🎉 chore(init): project initialization

This commit is contained in:
web@ppanel
2024-11-14 01:22:43 +07:00
commit 829edfa824
479 changed files with 61413 additions and 0 deletions
@@ -0,0 +1,30 @@
{
"actions": "Actions",
"announcementList": "Announcement List",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"content": "Content",
"create": "Create",
"createAnnouncement": "Create Announcement",
"createSuccess": "Create Success",
"delete": "Delete",
"deleteDescription": "Once deleted, the data cannot be recovered. Please proceed with caution.",
"deleteSuccess": "Delete Success",
"edit": "Edit",
"editAnnouncement": "Edit Announcement",
"enable": "Enable",
"form": {
"cancel": "Cancel",
"confirm": "Confirm",
"content": "Content",
"contentPlaceholder": "Please enter announcement content (supports Markdown)",
"title": "Title",
"titlePlaceholder": "Please enter"
},
"hide": "Hide",
"show": "Show",
"title": "Title",
"updateSuccess": "Update Success",
"updatedAt": "Updated At"
}
+39
View File
@@ -0,0 +1,39 @@
{
"check": {
"checking": "Checking...",
"continue": "Continue",
"description": "Please enter your email to continue logging in or registering.",
"email": "Please enter a valid email address.",
"title": "Login/Register",
"whitelist": "The email domain is not in the allowed whitelist."
},
"login": {
"description": "Please enter your account information to log in.",
"forgotPassword": "Forgot Password?",
"success": "Login successful!",
"switchAccount": "Register/Switch Account",
"title": "Login"
},
"logout": "Logout",
"orWithEmail": "Or with Email",
"register": {
"description": "Create a new account, fill in your information to register.",
"existingAccount": "Already have an account?",
"get": "Get",
"invite": "Invitation code",
"message": "#### Dear User, Hello!\n\nThank you for your attention and support. Due to adjustments in site operation strategy, we have closed the new user registration function. During this period, existing users will not be affected.\n\nWe are committed to providing you with better service and experience, so we will conduct comprehensive system optimization and feature upgrades during the registration closure. In the future, we will welcome you with better content and services.\n\nPlease follow our website and social media platforms to get the latest updates and notifications. Thank you for your understanding and support.\n\nIf you have any questions or need assistance, please feel free to contact our customer service team.\n\n**Thank you again for your support and understanding.**",
"passwordMismatch": "Passwords do not match",
"success": "Registration successful, automatically logged in!",
"switchToLogin": "Login/Reset Email",
"title": "Register"
},
"reset": {
"description": "Please enter your email address to reset your password.",
"existingAccount": "Already have an account?",
"get": "Get",
"success": "Password reset successful, automatically switched to login!",
"switchToLogin": "Login/Register",
"title": "Reset Password"
},
"tos": "Terms of Service"
}
+46
View File
@@ -0,0 +1,46 @@
{
"empty": [
"Imagine this place filled with exciting content! For now, you'll have to use your imagination...",
"This area mysteriously disappeared, but we're summoning it back!",
"Oh no, nothing happened... Feel free to fill in the blank!",
"It's like being at a concert and realizing there's no one on stage... Want to go up and perform?",
"You've found a blank canvas! How about building a house?",
"This area is currently empty, but creativity starts here!",
"Nothing here... but don't worry, it's just the beginning!",
"There were supposed to be big surprises here, but they slipped away!",
"There's nothing here for now, like an empty snack cabinet.",
"This empty space is waiting for its star to take the stage!"
],
"request": {
"10001": "Database query failed, please try again later",
"10002": "Data update failed, please try again later",
"10003": "Data save failed, please try again later",
"10004": "Data deletion failed, please try again later",
"20001": "The username is already registered",
"20002": "User not found",
"20003": "Incorrect password, please try again",
"20004": "Your account has been disabled",
"30001": "Node already exists",
"30002": "Node not found",
"30003": "Node group already exists",
"30004": "Node group not found",
"30005": "There is data in the node group, cannot be deleted",
"400": "Invalid request parameters, please check and resubmit",
"40002": "Please retry after logging in",
"40003": "Invalid login information, please log in again",
"40004": "Login session expired, please log in again",
"401": "Request is too frequent, please try again later",
"500": "Internal server error, we are working on fixing it urgently",
"undefined": "System error occurred, please try again later"
},
"table": {
"actions": "Actions",
"asc": "Ascending",
"desc": "Descending",
"hide": "Hide",
"pageInfo": "Page {current} of {total}",
"rowsPerPage": "Rows per page",
"selectedItems": "Selected {total} rows"
},
"unlimited": "Unlimited"
}
+50
View File
@@ -0,0 +1,50 @@
{
"actions": "Actions",
"amount": "Amount",
"cancel": "Cancel",
"code": "Code",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"count": "Count",
"couponList": "Coupon List",
"create": "Create",
"createCoupon": "Create Coupon",
"createSuccess": "Create Success",
"delete": "Delete",
"deleteSuccess": "Delete Success",
"deleteWarning": "Once deleted, data cannot be recovered. Please proceed with caution.",
"discount": "Discount",
"edit": "Edit",
"editCoupon": "Edit Coupon",
"enable": "Enable",
"form": {
"amountDiscount": "Amount Discount",
"cancel": "Cancel",
"confirm": "Confirm",
"count": "Max Usage Count",
"countPlaceholder": "Max Usage Count (leave blank for no limit)",
"customCouponCode": "Custom Coupon Code",
"customCouponCodePlaceholder": "Custom Coupon Code (leave blank for auto-generation)",
"enterCouponName": "Enter Coupon Name",
"enterValue": "Enter Value",
"expireTime": "Expire Time",
"name": "Name",
"percentageDiscount": "Percentage Discount",
"selectServer": "Select Subscription",
"selectTime": "Select Time",
"specifiedServer": "Specified Subscription",
"startTime": "Start Time",
"type": "Coupon Type",
"userLimit": "Max Usage Count per User",
"userLimitPlaceholder": "Max Usage Count per User (leave blank for no limit)"
},
"name": "Name",
"percentage": "Percentage",
"remainingTimes": "Remaining",
"subscribe": "Subscribe",
"type": "Type",
"unlimited": "Unlimited",
"updateSuccess": "Update Success",
"usedTimes": "Usage Times",
"validityPeriod": "Validity Period"
}
+29
View File
@@ -0,0 +1,29 @@
{
"DocumentList": "Document List",
"actions": "Actions",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createDocument": "Create Document",
"createSuccess": "Create Success",
"delete": "Delete",
"deleteDescription": "Once deleted, the data cannot be recovered. Please proceed with caution.",
"deleteSuccess": "Delete Success",
"edit": "Edit",
"editDocument": "Edit Document",
"form": {
"cancel": "Cancel",
"confirm": "Confirm",
"content": "Content",
"tags": "Tags",
"tagsPlaceholder": "Use Enter or comma (,) to enter multiple tags",
"title": "Title",
"titlePlaceholder": "Please enter"
},
"show": "Show",
"tags": "Tags",
"title": "Title",
"updateSuccess": "Update Success",
"updatedAt": "Updated At"
}
+1
View File
@@ -0,0 +1 @@
{}
+24
View File
@@ -0,0 +1,24 @@
{
"cs-CZ": "Czech",
"de-DE": "German",
"en-US": "English",
"es-ES": "Spanish",
"es-MX": "Spanish (Mexico)",
"fi-FI": "Finnish",
"fr-FR": "French",
"hi-IN": "Hindi",
"hu-HU": "Hungarian",
"ja-JP": "Japanese",
"ko-KR": "Korean",
"no-NO": "Norwegian",
"pl-PL": "Polish",
"pt-BR": "Portuguese (Brazil)",
"ro-RO": "Romanian",
"ru-RU": "Russian",
"th-TH": "Thai",
"tr-TR": "Turkish",
"uk-UA": "Ukrainian",
"vi-VN": "Vietnamese",
"zh-CN": "Chinese (Simplified)",
"zh-TW": "Chinese (Traditional)"
}
+17
View File
@@ -0,0 +1,17 @@
{
"Announcement Management": "Announcement Management",
"Coupon Management": "Coupon Management",
"Dashboard": "Dashboard",
"Document Management": "Document Management",
"Finance": "Finance",
"Order Management": "Order Management",
"Payment Config": "Payment Config",
"Server": "Server",
"Server Management": "Server Management",
"Settings": "Settings",
"Subscribe Management": "Subscribe Management",
"System Config": "System Config",
"Ticket Management": "Ticket Management",
"User": "User",
"User Management": "User Management"
}
+29
View File
@@ -0,0 +1,29 @@
{
"amount": "Amount",
"failed": "Failed",
"feAmount": "Fee Amount",
"method": "Payment Method",
"methods": {
"alipay_f2f": "Alipay (Face to Face)",
"balance": "Balance",
"epay": "Epay",
"stripe_alipay": "Stripe (Alipay)",
"stripe_wechat_pay": "Stripe (WeChat)"
},
"orderNumber": "Order Number",
"reductionPrice": "Discount Amount",
"status": "Order Status",
"subscribe": "Subscribe",
"subscribePrice": "Subscription Price",
"total": "Total",
"tradeNo": "Transaction Number",
"type": {
"0": "Type",
"1": "New Purchase",
"2": "Renewal",
"3": "Reset Traffic",
"4": "Recharge"
},
"updateTime": "Update Time",
"user": "User"
}
+41
View File
@@ -0,0 +1,41 @@
{
"aliPay": "Alipay payment",
"alipayf2f": {
"appId": "Alipay App ID",
"invoiceName": "Custom Product Name",
"invoiceNameDescription": "Will be displayed on Alipay bill",
"privateKey": "Alipay Private Key",
"publicKey": "Alipay Public Key"
},
"enable": "Enable",
"enableDescription": "Enable this payment method",
"epay": {
"key": "KEY",
"pid": "PID",
"url": "URL"
},
"feeMode": "Fee Mode",
"feeModeDescription": "Fee charging method for additional fees",
"feeModeItems": ["No Fee", "Percentage", "Fixed Amount", "Both"],
"feePercent": "Percentage Fee (optional)",
"feePercentDescription": "Add fee on top of order amount",
"fixedFee": "Fixed Fee (optional)",
"fixedFeeDescription": "Add fixed fee on top of order amount",
"iconUrl": "Icon URL (optional)",
"iconUrlDescription": "Used for frontend display",
"inputPlaceholder": "Please enter",
"key": "KEY",
"notifyUrl": "Custom Notification Domain (optional)",
"notifyUrlDescription": "Gateway notifications will be sent to this domain",
"pid": "PID",
"saveSuccess": "Save Successful",
"showName": "Display Name",
"showNameDescription": "Used for frontend display",
"stripe": {
"publicKey": "PUBLIC KEY",
"secretKey": "SECRET KEY",
"webhookSecret": "WEBHOOK Secret Key"
},
"url": "URL",
"wechatPay": "WeChat Pay"
}
+111
View File
@@ -0,0 +1,111 @@
{
"group": {
"actions": "Actions",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createNodeGroup": "Create Node Group",
"createdSuccessfully": "Created successfully",
"delete": "Delete",
"deleteWarning": "Data will not be recoverable after deletion. Please proceed with caution.",
"deletedSuccessfully": "Deleted successfully",
"description": "Description",
"edit": "Edit",
"editNodeGroup": "Edit Node Group",
"form": {
"cancel": "Cancel",
"confirm": "Confirm",
"description": "Description",
"name": "Name"
},
"name": "Name",
"title": "Node Group List",
"updatedAt": "Updated At"
},
"node": {
"actions": "Actions",
"address": "Address",
"all": "All",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createNode": "Create Node",
"createSuccess": "Created successfully",
"delete": "Delete",
"deleteSuccess": "Deleted successfully",
"deleteWarning": "Data will not be recoverable after deletion. Please proceed with caution.",
"edit": "Edit",
"editNode": "Edit Node",
"enable": "Enable",
"form": {
"Address or IP": "Address or IP",
"Host Name": "Host Name",
"allowInsecure": "Allow Insecure",
"cancel": "Cancel",
"confirm": "Confirm",
"edit": "Edit",
"editSecurity": "Edit Security Configuration",
"enableRelay": "Enable Relay",
"enableTLS": "Enable TLS",
"enableTls": "TLS",
"encryptionMethod": "Encryption Method",
"name": "Name",
"networkType": "Transport Protocol",
"nodeGroupId": "Node Group ID",
"password": "Password",
"path": "Path",
"port": "Server Port",
"protocol": "Protocol",
"relayHost": "Relay Host",
"relayPort": "Relay Port",
"remarks": "Remarks",
"security": "Security",
"security_config": {
"fingerprint": "Fingerprint",
"privateKey": "Private Key",
"privateKeyPlaceholder": "Leave blank for auto-generation",
"proxyProtocol": "Proxy Protocol",
"publicKey": "Public Key",
"publicKeyPlaceholder": "Leave blank for auto-generation",
"serverAddress": "Server Address",
"serverAddressPlaceholder": "REALITY target address, default using SNI",
"serverName": "Server Name (SNI)",
"serverNamePlaceholder": "REALITY required, consistent with backend",
"serverPort": "Server Port",
"serverPortPlaceholder": "REALITY target port, default 443",
"shortId": "Short ID",
"shortIdPlaceholder": "Leave blank for auto-generation"
},
"selectEncryptionMethod": "Select Encryption Method",
"selectNodeGroup": "Select Node Group",
"selectProtocol": "Select Protocol",
"serverAddr": "Server IP",
"serverName": "Service Name",
"serviceName": "Service Name",
"sni": "Server Name Indication (SNI)",
"speedLimit": "Speed Limit",
"speedLimitPlaceholder": "Unlimited",
"trafficRatio": "Traffic Rate",
"transport": "Transport Protocol Configuration",
"xtls": "XTLS Flow Control Algorithm"
},
"name": "Name",
"node": "Node",
"nodeGroup": "Node Group",
"rate": "Rate",
"relay": "Relay",
"serverAddr": "Server IP",
"speedLimit": "Speed Limit",
"status": "Status",
"trafficRatio": "Traffic Rate",
"type": "Type",
"updateSuccess": "Update successful",
"updatedAt": "Updated At"
},
"tabs": {
"node": "Node",
"nodeGroup": "Node Group"
}
}
+78
View File
@@ -0,0 +1,78 @@
{
"actions": "Actions",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createSubscribe": "Create Subscription",
"createSuccess": "Create Successful",
"delete": "Delete",
"deleteSuccess": "Delete Successful",
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
"deviceLimit": "Device Limit/Unit",
"edit": "Edit",
"editSubscribe": "Edit Subscription",
"form": {
"cancel": "Cancel",
"confirm": "Confirm",
"description": "Description",
"deviceLimit": "Device Limit",
"discount": "Discount",
"discountDescription": "Set discount based on unit price",
"discountMonths": "Months",
"discountPercent": "Discount Percentage",
"duration": "Duration (months)",
"inventory": "Inventory",
"name": "Name",
"noLimit": "No Limit",
"quota": "Purchase Limit",
"replacement": "Reset Price (per time)",
"selectSubscribeGroup": "Select Subscription Group",
"server": "Server",
"serverGroup": "Server Group",
"speedLimit": "Speed Limit (Mbps)",
"subscribeGroup": "Subscription Group",
"traffic": "Traffic",
"unit_price": "Monthly Price"
},
"group": {
"actions": "Actions",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createSubscribeGroup": "Create Subscription Group",
"createSuccess": "Create Successful",
"delete": "Delete",
"deleteSuccess": "Delete Successful",
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
"description": "Description",
"edit": "Edit",
"editSubscribeGroup": "Edit Subscription Group",
"form": {
"cancel": "Cancel",
"confirm": "Confirm",
"description": "Description",
"name": "Name"
},
"name": "Name",
"title": "Subscription Group List",
"updateSuccess": "Update Successful",
"updatedAt": "Updated At"
},
"inventory": "Inventory",
"name": "Name",
"quota": "Purchase Limit/Time",
"replacement": "Reset Price/Time",
"sell": "Sell",
"show": "Show",
"subscribe": "Subscribe",
"subscribeGroup": "Subscription Group",
"tabs": {
"subscribe": "Subscribe",
"subscribeGroup": "Subscription Group"
},
"traffic": "Traffic",
"unitPrice": "Price/Month",
"updateSuccess": "Update Successful"
}
+156
View File
@@ -0,0 +1,156 @@
{
"currency": {
"accessKey": "Access Key",
"accessKeyDescription": "API key provided for free by https://exchangerate.host",
"currencySymbol": "Currency Symbol",
"currencySymbolDescription": "Used for display purposes only; changing this will affect all currency units in the system",
"currencyUnit": "Currency Unit",
"currencyUnitDescription": "Used for display purposes only; changing this will affect all currency units in the system",
"saveSuccess": "Save Successful"
},
"email": {
"expiration_email_template": "Expiration Notice Template",
"expiration_email_templateDescription": "The {after}.variable{before} placeholders will be replaced with actual data. Ensure to keep these variables.",
"inputPlaceholder": "Enter value...",
"maintenance_email_template": "Maintenance Notice Template",
"maintenance_email_templateDescription": "The {after}.variable{before} placeholders will be replaced with actual data. Ensure to keep these variables.",
"saveSuccess": "Configuration saved successfully.",
"sendFailure": "Failed to send test email, please check the configuration.",
"sendSuccess": "Test email sent successfully.",
"sendTestEmail": "Send Test Email",
"sendTestEmailDescription": "Send a test email to verify the configuration.",
"senderAddress": "Sender Address",
"senderAddressDescription": "The default email address used for sending emails.",
"smtpAccount": "SMTP Account",
"smtpAccountDescription": "The email account used for authentication.",
"smtpEncryptionMethod": "SMTP Encryption Method",
"smtpEncryptionMethodDescription": "Choose whether to enable SSL encryption.",
"smtpPassword": "SMTP Password",
"smtpPasswordDescription": "The password for the SMTP account.",
"smtpServerAddress": "SMTP Server Address",
"smtpServerAddressDescription": "Specify the server address used for sending emails.",
"smtpServerPort": "SMTP Server Port",
"smtpServerPortDescription": "Specify the port used to connect to the SMTP server.",
"verify_email_template": "Verification Email Template",
"verify_email_templateDescription": "The {after}.variable{before} placeholders will be replaced with actual data. Ensure to keep these variables."
},
"invite": {
"commissionFirstTimeOnly": "Commission for First Purchase Only",
"commissionFirstTimeOnlyDescription": "When enabled, commission is generated only on the inviter's first payment; you can configure individual users in user management",
"enableForcedInvite": "Enable Forced Invite",
"enableForcedInviteDescription": "When enabled, only invited users can register",
"inputPlaceholder": "Enter",
"inviteCommissionPercentage": "Invite Commission Percentage",
"inviteCommissionPercentageDescription": "Default global commission distribution ratio; you can configure individual ratios in user management",
"saveSuccess": "Save Successful"
},
"node": {
"communicationKey": "Communication Key",
"communicationKeyDescription": "Key for node communication to ensure data security",
"inputPlaceholder": "Enter",
"nodePullInterval": "Node Pull Interval",
"nodePullIntervalDescription": "Frequency (in seconds) for nodes to fetch data from the panel",
"nodePushInterval": "Node Push Interval",
"nodePushIntervalDescription": "Frequency for nodes to push data to the panel",
"saveSuccess": "Save Successful"
},
"register": {
"emailSuffixWhitelist": "Email Suffix Whitelist",
"emailSuffixWhitelistDescription": "When enabled, only emails with suffixes in the list can register",
"emailVerification": "Email Verification",
"emailVerificationDescription": "When enabled, users will need to verify their email",
"ipRegistrationLimit": "IP Registration Limit",
"ipRegistrationLimitDescription": "When enabled, IPs that meet the rule requirements will be restricted from registering; note that IP determination may cause issues due to CDNs or frontend proxies",
"penaltyTime": "Penalty Time (minutes)",
"penaltyTimeDescription": "Users must wait for the penalty time to expire before registering again",
"registrationLimitCount": "Registration Limit Count",
"registrationLimitCountDescription": "Enable penalty after reaching registration limit",
"saveSuccess": "Save Successful",
"stopNewUserRegistration": "Stop New User Registration",
"stopNewUserRegistrationDescription": "When enabled, no one can register",
"trialRegistration": "Trial Registration",
"trialRegistrationDescription": "Enable trial registration; modify trial package and duration first",
"whitelistSuffixes": "Whitelist Suffixes",
"whitelistSuffixesDescription": "Used for email verification during registration; one per line",
"whitelistSuffixesPlaceholder": "Enter email suffixes, one per line"
},
"site": {
"logo": "Logo",
"logoDescription": "Used for displaying the logo in designated locations",
"logoPlaceholder": "Enter the URL of the logo, without ending with '/'",
"saveSuccess": "Save Successful",
"siteDesc": "Site Description",
"siteDescDescription": "Used for displaying the site description in designated locations",
"siteDescPlaceholder": "Enter site description",
"siteDomain": "Site Domain",
"siteDomainDescription": "Domain address of the current website, e.g., used in emails",
"siteDomainPlaceholder": "Please enter the domain address. For multiple domains, please enter one per line.",
"siteName": "Site Name",
"siteNameDescription": "Used for displaying the site name in designated locations",
"siteNamePlaceholder": "Enter site name"
},
"subscription": {
"add": "Add",
"app": "App",
"appDescription": "Configure app download URL and import rules; remember to save after modification",
"appDownloadURL": "App Download URL",
"appIcon": "App Icon",
"appName": "App Name",
"delete": "Delete",
"reset": "Reset",
"save": "Save",
"saveSuccess": "Save Successful",
"singleSubscriptionMode": "Single Subscription Mode",
"singleSubscriptionModeDescription": "When enabled, all user subscriptions will be converted to balance",
"subscriptionDomain": "Subscription Domain",
"subscriptionDomainDescription": "Used for subscription; leave blank to use site domain",
"subscriptionDomainPlaceholder": "Enter subscription domain, one per line",
"subscriptionPath": "Subscription Path",
"subscriptionPathDescription": "Used for subscription",
"subscriptionPathPlaceholder": "Enter",
"subscriptionProtocol": "Subscription Protocol",
"wildcardResolution": "Wildcard Resolution",
"wildcardResolutionDescription": "Used for subscription"
},
"tabs": {
"currency": "Currency",
"email": "Email",
"invite": "Invite",
"node": "Node",
"register": "Register",
"site": "Site",
"subscription": "Subscription",
"telegram": "Telegram",
"tos": "Terms of Service",
"verify": "Verify"
},
"telegram": {
"botToken": "Bot Token",
"botTokenDescription": "Enter the token provided by Botfather",
"enableBotNotifications": "Enable Bot Notifications",
"enableBotNotificationsDescription": "When enabled, the bot will send basic notifications to linked Telegram admins and users",
"groupURL": "Group URL",
"groupURLDescription": "If filled, will be displayed to users or used in required locations",
"inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx",
"inputPlaceholderGroupURL": "https://t.me/xxxxxx",
"saveSuccess": "Save Successful"
},
"tos": {
"saveSuccess": "Save Successful",
"title": "Terms of Service"
},
"verify": {
"inputPlaceholder": "Enter",
"loginVerificationCode": "Login Verification Code",
"loginVerificationCodeDescription": "Human verification during login",
"registrationVerificationCode": "Registration Verification Code",
"registrationVerificationCodeDescription": "Human verification during registration",
"resetPasswordVerificationCode": "Reset Password Verification Code",
"resetPasswordVerificationCodeDescription": "Human verification during password reset",
"saveSuccess": "Save Successful",
"turnstileSecret": "Turnstile Secret Key",
"turnstileSecretDescription": "Turnstile secret key provided by Cloudflare",
"turnstileSiteKey": "Turnstile Site Key",
"turnstileSiteKeyDescription": "Turnstile site key provided by Cloudflare"
}
}
+19
View File
@@ -0,0 +1,19 @@
{
"actions": "Actions",
"cancel": "Cancel",
"check": "Check",
"close": "Close",
"closeSuccess": "Closed successfully",
"closeWarning": "Once closed, the ticket cannot be operated on. Please proceed with caution.",
"confirm": "Confirm",
"confirmClose": "Are you sure you want to close?",
"createdAt": "Created At",
"inputPlaceholder": "Please enter your question, we will reply as soon as possible.",
"open": "Open",
"reply": "Reply",
"status": ["Status", "Pending Follow-up", "Pending Reply", "Resolved", "Closed"],
"ticketList": "Ticket List",
"title": "Title",
"updatedAt": "Updated At",
"user": "User"
}
+38
View File
@@ -0,0 +1,38 @@
{
"actions": "Actions",
"balance": "Balance",
"cancel": "Cancel",
"confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?",
"create": "Create",
"createSuccess": "Create successful",
"createUser": "Create User",
"createdAt": "Created At",
"delete": "Delete",
"deleteDescription": "Data cannot be recovered after deletion, please proceed with caution.",
"deleteSuccess": "Delete successful",
"edit": "Edit",
"editUser": "Edit User",
"email": "Email",
"enable": "Enable",
"form": {
"balance": "Balance",
"balancePlaceholder": "Balance",
"cancel": "Cancel",
"confirm": "Confirm",
"invalidEmailFormat": "Invalid email format",
"inviteCode": "Invite Code",
"inviteCodePlaceholder": "Enter invite code (leave blank to generate)",
"manager": "Manager",
"password": "Password",
"passwordPlaceholder": "Enter new password (optional)",
"refererId": "Referer ID",
"refererIdPlaceholder": "Enter referer ID",
"userEmail": "User Email",
"userEmailPlaceholder": "Enter user email"
},
"referer": "Referer",
"updateSuccess": "Update successful",
"userList": "User List",
"userName": "User Email"
}
+36
View File
@@ -0,0 +1,36 @@
import { getRequestConfig } from 'next-intl/server';
import { cookies, headers } from 'next/headers';
const locales = ['zh-CN', 'en-US'];
export default getRequestConfig(async () => {
const browserLocale = (await headers()).get('Accept-Language')?.split(',')?.[0] || '';
const defaultLocale = locales.includes(browserLocale) ? browserLocale : '';
const cookieLocale = (await cookies()).get('locale')?.value || '';
const locale =
cookieLocale || defaultLocale || process.env.NEXT_PUBLIC_DEFAULT_LANGUAGE || locales[0];
const messages = {
language: (await import(`./${locale}/language.json`)).default,
menu: (await import(`./${locale}/menu.json`)).default,
auth: (await import(`./${locale}/auth.json`)).default,
common: (await import(`./${locale}/common.json`)).default,
system: (await import(`./${locale}/system.json`)).default,
payment: (await import(`./${locale}/payment.json`)).default,
server: (await import(`./${locale}/server.json`)).default,
subscribe: (await import(`./${locale}/subscribe.json`)).default,
order: (await import(`./${locale}/order.json`)).default,
coupon: (await import(`./${locale}/coupon.json`)).default,
user: (await import(`./${locale}/user.json`)).default,
announcement: (await import(`./${locale}/announcement.json`)).default,
ticket: (await import(`./${locale}/ticket.json`)).default,
document: (await import(`./${locale}/document.json`)).default,
index: (await import(`./${locale}/index.json`)).default,
};
return {
locale,
messages,
};
});
+8
View File
@@ -0,0 +1,8 @@
import { getLocale } from '@/utils/common';
import { createTranslator } from 'next-intl';
export async function getTranslations(namespace: string) {
const locale = getLocale();
const messages = (await import(`./${locale}/${namespace}.json`)).default;
return createTranslator({ locale, messages });
}
@@ -0,0 +1,30 @@
{
"actions": "操作",
"announcementList": "公告列表",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "您确定要删除吗?",
"content": "内容",
"create": "创建",
"createAnnouncement": "创建公告",
"createSuccess": "创建成功",
"delete": "删除",
"deleteDescription": "一旦删除,数据将无法恢复。请谨慎操作。",
"deleteSuccess": "删除成功",
"edit": "编辑",
"editAnnouncement": "编辑公告",
"enable": "启用",
"form": {
"cancel": "取消",
"confirm": "确认",
"content": "内容",
"contentPlaceholder": "请输入公告内容(支持Markdown",
"title": "标题",
"titlePlaceholder": "请输入"
},
"hide": "隐藏",
"show": "显示",
"title": "标题",
"updateSuccess": "更新成功",
"updatedAt": "更新时间"
}
+39
View File
@@ -0,0 +1,39 @@
{
"check": {
"checking": "正在验证...",
"continue": "继续",
"description": "请输入您的电子邮件以继续登录或注册。",
"email": "请输入有效的邮箱地址。",
"title": "登录/注册",
"whitelist": "邮箱域名不在允许的白名单中。"
},
"login": {
"description": "请输入您的账户信息以登录。",
"forgotPassword": "忘记密码?",
"success": "登录成功!",
"switchAccount": "注册/切换账号",
"title": "登录"
},
"logout": "退出登录",
"orWithEmail": "或使用邮箱",
"register": {
"description": "创建新账户,填写您的信息以注册。",
"existingAccount": "已有账户?",
"get": "获取",
"invite": "邀请码",
"message": "#### 尊敬的用户,您好!\n\n感谢您对我们的关注和支持。由于站点运营策略的调整,我们已关闭新用户注册功能。在此期间,现有用户的使用不会受到任何影响。\n\n我们致力于为您提供更好的服务和体验,因此将在关闭注册期间进行全面的系统优化和功能升级。未来,我们将以更优质的内容和服务迎接您的到来。\n\n请关注我们的网站和社交媒体平台,获取最新的动态和通知。感谢您的理解与支持。\n\n如有任何疑问或需要帮助,请随时联系我们的客服团队。\n\n**再次感谢您的支持与理解。**",
"passwordMismatch": "两次密码输入不一致",
"success": "注册成功,已自动登录!",
"switchToLogin": "登录/重置邮箱",
"title": "注册"
},
"reset": {
"description": "请输入您的电子邮件地址以重置密码。",
"existingAccount": "已有账户?",
"get": "获取",
"success": "重置密码成功,已自动切换到登录!",
"switchToLogin": "登录/注册",
"title": "重置密码"
},
"tos": "服务条款"
}
+46
View File
@@ -0,0 +1,46 @@
{
"empty": [
"想象一下这里充满了精彩的内容!暂时只能靠想象了…",
"这片区域神秘消失了,我们正在召唤它回来!",
"哎呀,什么都没发生…你可以自己填点什么!",
"这就像在演唱会上发现舞台上没人…要不你上去表演?",
"你找到了一片空白乐土!要不要建个房子?",
"这里暂时空无一物,但创意从这里开始!",
"什么也没有…但别担心,这只是个开始!",
"这里原本准备了大惊喜,结果惊喜溜走了!",
"暂时什么都没有,就像零食柜被吃空了一样。",
"这片空地在等它的主角登场!"
],
"request": {
"10001": "数据库查询失败,请稍后重试",
"10002": "数据更新失败,请稍后重试",
"10003": "数据保存失败,请稍后重试",
"10004": "数据删除失败,请稍后重试",
"20001": "该用户名已被注册",
"20002": "找不到该用户",
"20003": "密码错误,请重新输入",
"20004": "您的账号已被禁用",
"30001": "该节点已存在",
"30002": "找不到该节点",
"30003": "该节点组已存在",
"30004": "找不到该节点组",
"30005": "节点组中还有数据,无法删除",
"400": "请求参数有误,请检查后重新提交",
"40002": "请登录后重试",
"40003": "登录信息无效,请重新登录",
"40004": "登录已过期,请重新登录",
"401": "请求过于频繁,请稍后重试",
"500": "系统内部错误,我们正在紧急修复",
"undefined": "系统发生错误,请稍后重试"
},
"table": {
"actions": "操作",
"asc": "升序",
"desc": "降序",
"hide": "隐藏",
"pageInfo": "第 {current} 页,共 {total} 页",
"rowsPerPage": "每页行数",
"selectedItems": "已选择 {total} 行"
},
"unlimited": "无限制"
}
+50
View File
@@ -0,0 +1,50 @@
{
"actions": "操作",
"amount": "金额",
"cancel": "取消",
"code": "代码",
"confirm": "确认",
"confirmDelete": "您确定要删除吗?",
"count": "数量",
"couponList": "优惠券列表",
"create": "创建",
"createCoupon": "创建优惠券",
"createSuccess": "创建成功",
"delete": "删除",
"deleteSuccess": "删除成功",
"deleteWarning": "一旦删除,数据将无法恢复。请谨慎操作。",
"discount": "折扣",
"edit": "编辑",
"editCoupon": "编辑优惠券",
"enable": "启用",
"form": {
"amountDiscount": "金额折扣",
"cancel": "取消",
"confirm": "确认",
"count": "最大使用次数",
"countPlaceholder": "最大使用次数(留空表示无限制)",
"customCouponCode": "自定义优惠码",
"customCouponCodePlaceholder": "自定义优惠码(留空自动生成)",
"enterCouponName": "请输入优惠券名称",
"enterValue": "请输入数值",
"expireTime": "过期时间",
"name": "名称",
"percentageDiscount": "百分比折扣",
"selectServer": "请选择订阅",
"selectTime": "选择时间",
"specifiedServer": "指定订阅",
"startTime": "生效时间",
"type": "优惠券类型",
"userLimit": "每用户最大使用次数",
"userLimitPlaceholder": "每用户最大使用次数(留空表示无限制)"
},
"name": "名称",
"percentage": "百分比",
"remainingTimes": "剩余",
"subscribe": "订阅",
"type": "类型",
"unlimited": "无限制",
"updateSuccess": "更新成功",
"usedTimes": "使用次数",
"validityPeriod": "有效期"
}
+29
View File
@@ -0,0 +1,29 @@
{
"DocumentList": "文档列表",
"actions": "操作",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "您确定要删除吗?",
"create": "创建",
"createDocument": "创建文档",
"createSuccess": "创建成功",
"delete": "删除",
"deleteDescription": "一旦删除,数据将无法恢复。请谨慎操作。",
"deleteSuccess": "删除成功",
"edit": "编辑",
"editDocument": "编辑文档",
"form": {
"cancel": "取消",
"confirm": "确认",
"content": "内容",
"tags": "类别",
"tagsPlaceholder": "请用回车键或逗号(,)分隔以输入多个类别",
"title": "标题",
"titlePlaceholder": "请输入"
},
"show": "显示",
"tags": "类别",
"title": "标题",
"updateSuccess": "更新成功",
"updatedAt": "更新时间"
}
+1
View File
@@ -0,0 +1 @@
{}
+24
View File
@@ -0,0 +1,24 @@
{
"cs-CZ": "捷克语",
"de-DE": "德语",
"en-US": "英语",
"es-ES": "西班牙语",
"es-MX": "西班牙语(墨西哥)",
"fi-FI": "芬兰语",
"fr-FR": "法语",
"hi-IN": "印地语",
"hu-HU": "匈牙利语",
"ja-JP": "日语",
"ko-KR": "韩语",
"no-NO": "挪威语",
"pl-PL": "波兰语",
"pt-BR": "葡萄牙语(巴西)",
"ro-RO": "罗马尼亚语",
"ru-RU": "俄语",
"th-TH": "泰语",
"tr-TR": "土耳其语",
"uk-UA": "乌克兰语",
"vi-VN": "越南语",
"zh-CN": "中文(简体)",
"zh-TW": "中文(繁体)"
}
+17
View File
@@ -0,0 +1,17 @@
{
"Announcement Management": "公告管理",
"Coupon Management": "优惠券管理",
"Dashboard": "仪表盘",
"Document Management": "文档管理",
"Finance": "财务",
"Order Management": "订单管理",
"Payment Config": "支付配置",
"Server": "服务",
"Server Management": "服务管理",
"Settings": "设置",
"Subscribe Management": "订阅管理",
"System Config": "系统配置",
"Ticket Management": "工单管理",
"User": "用户",
"User Management": "用户管理"
}
+36
View File
@@ -0,0 +1,36 @@
{
"amount": "金额",
"failed": "失败",
"feAmount": "手续费",
"method": "支付方式",
"methods": {
"alipay_f2f": "支付宝(面对面)",
"balance": "余额",
"epay": "易支付",
"stripe_alipay": "Stripe(支付宝)",
"stripe_wechat_pay": "Stripe(微信)"
},
"orderNumber": "订单编号",
"reductionPrice": "优惠金额",
"status": {
"0": "状态",
"1": "待支付",
"2": "已支付",
"3": "已取消",
"4": "已关闭",
"5": "已完成"
},
"subscribe": "订阅",
"subscribePrice": "订阅价格",
"total": "总计",
"tradeNo": "交易号",
"type": {
"0": "类型",
"1": "新购",
"2": "续费",
"3": "重置流量",
"4": "充值"
},
"updateTime": "更新时间",
"user": "用户"
}
+41
View File
@@ -0,0 +1,41 @@
{
"aliPay": "支付宝支付",
"alipayf2f": {
"appId": "支付宝应用ID",
"invoiceName": "自定义产品名称",
"invoiceNameDescription": "将显示在支付宝账单中",
"privateKey": "支付宝私钥",
"publicKey": "支付宝公钥"
},
"enable": "启用",
"enableDescription": "启用此支付方式",
"epay": {
"key": "KEY",
"pid": "PID",
"url": "URL"
},
"feeMode": "收费方式",
"feeModeDescription": "额外手续费的收费方式",
"feeModeItems": ["无手续费", "百分比", "固定金额", "以上两种"],
"feePercent": "百分比费用(可选)",
"feePercentDescription": "在订单金额之上添加费用",
"fixedFee": "固定费用(可选)",
"fixedFeeDescription": "在订单金额之上添加固定费用",
"iconUrl": "图标 URL(可选)",
"iconUrlDescription": "用于前端显示",
"inputPlaceholder": "请输入",
"key": "KEY",
"notifyUrl": "自定义通知域(可选)",
"notifyUrlDescription": "网关通知将发送到此域",
"pid": "PID",
"saveSuccess": "保存成功",
"showName": "显示名称",
"showNameDescription": "用于前端显示",
"stripe": {
"publicKey": "PUBLIC KEY",
"secretKey": "SECRET KEY",
"webhookSecret": "WEBHOOK 密钥签名"
},
"url": "URL",
"wechatPay": "微信支付"
}
+111
View File
@@ -0,0 +1,111 @@
{
"group": {
"actions": "操作",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "确定要删除吗?",
"create": "创建",
"createNodeGroup": "创建节点组",
"createdSuccessfully": "创建成功",
"delete": "删除",
"deleteWarning": "删除后数据将无法恢复,请谨慎操作。",
"deletedSuccessfully": "删除成功",
"description": "描述",
"edit": "编辑",
"editNodeGroup": "编辑节点组",
"form": {
"cancel": "取消",
"confirm": "确认",
"description": "描述",
"name": "名称"
},
"name": "名称",
"title": "节点组列表",
"updatedAt": "更新时间"
},
"node": {
"actions": "操作",
"address": "地址",
"all": "全部",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "确定要删除吗?",
"create": "创建",
"createNode": "创建节点",
"createSuccess": "创建成功",
"delete": "删除",
"deleteSuccess": "删除成功",
"deleteWarning": "删除后,数据将无法恢复。请谨慎操作。",
"edit": "编辑",
"editNode": "编辑节点",
"enable": "启用",
"form": {
"Address or IP": "地址或IP",
"Host Name": "服务地址",
"allowInsecure": "允许不安全",
"cancel": "取消",
"confirm": "确认",
"edit": "编辑",
"editSecurity": "编辑安全性配置",
"enableRelay": "启用中转",
"enableTLS": "启用TLS",
"enableTls": "TLS",
"encryptionMethod": "加密方法",
"name": "名称",
"networkType": "传输协议",
"nodeGroupId": "节点组ID",
"password": "密码",
"path": "路径",
"port": "服务端口",
"protocol": "协议",
"relayHost": "中转地址",
"relayPort": "中转端口",
"remarks": "备注",
"security": "安全性",
"security_config": {
"fingerprint": "FingerPrint",
"privateKey": "Private Key",
"privateKeyPlaceholder": "留空自动生成",
"proxyProtocol": "Proxy Protocol",
"publicKey": "Public Key",
"publicKeyPlaceholder": "留空自动生成",
"serverAddress": "Server Address",
"serverAddressPlaceholder": "REALITY目标地址,默认使用SNI",
"serverName": "Server Name(SNI)",
"serverNamePlaceholder": "REALITY必填,与后端保持一致",
"serverPort": "Server Port",
"serverPortPlaceholder": "REALITY目标端口,默认443",
"shortId": "ShortId",
"shortIdPlaceholder": "留空自动生成"
},
"selectEncryptionMethod": "选择加密方法",
"selectNodeGroup": "选择节点组",
"selectProtocol": "选择协议",
"serverAddr": "服务器IP",
"serverName": "服务名称",
"serviceName": "服务名称",
"sni": "服务器名称指示(sni)",
"speedLimit": "速度限制",
"speedLimitPlaceholder": "无限制",
"trafficRatio": "流量速率",
"transport": "传输协议配置",
"xtls": "XTLS流控算法"
},
"name": "名称",
"node": "节点",
"nodeGroup": "节点组",
"rate": "速率",
"relay": "中继",
"serverAddr": "服务器IP",
"speedLimit": "速度限制",
"status": "状态",
"trafficRatio": "流量速率",
"type": "类型",
"updateSuccess": "更新成功",
"updatedAt": "更新时间"
},
"tabs": {
"node": "节点",
"nodeGroup": "节点组"
}
}
+78
View File
@@ -0,0 +1,78 @@
{
"actions": "操作",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "确定删除吗?",
"create": "创建",
"createSubscribe": "新建订阅",
"createSuccess": "创建成功",
"delete": "删除",
"deleteSuccess": "删除成功",
"deleteWarning": "删除后数据无法恢复,请谨慎操作。",
"deviceLimit": "设备数/台",
"edit": "编辑",
"editSubscribe": "编辑订阅",
"form": {
"cancel": "取消",
"confirm": "确认",
"description": "描述",
"deviceLimit": "设备限制",
"discount": "折扣",
"discountDescription": "基于单价设置折扣",
"discountMonths": "月",
"discountPercent": "折扣比",
"duration": "时长(月)",
"inventory": "库存",
"name": "名称",
"noLimit": "无限制",
"quota": "限购数量",
"replacement": "重置价格(每次)",
"selectSubscribeGroup": "请选择订阅组",
"server": "服务",
"serverGroup": "服务组",
"speedLimit": "速度限制(Mbps",
"subscribeGroup": "订阅组",
"traffic": "流量",
"unit_price": "单月价格"
},
"group": {
"actions": "操作",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "确定删除吗?",
"create": "创建",
"createSubscribeGroup": "新建订阅组",
"createSuccess": "创建成功",
"delete": "删除",
"deleteSuccess": "删除成功",
"deleteWarning": "删除后数据无法恢复,请谨慎操作。",
"description": "描述",
"edit": "编辑",
"editSubscribeGroup": "编辑订阅组",
"form": {
"cancel": "取消",
"confirm": "确认",
"description": "描述",
"name": "名称"
},
"name": "名称",
"title": "订阅组列表",
"updateSuccess": "更新成功",
"updatedAt": "更新时间"
},
"inventory": "库存",
"name": "名称",
"quota": "限购/次",
"replacement": "重置价格/次",
"sell": "销售",
"show": "显示",
"subscribe": "订阅",
"subscribeGroup": "订阅组",
"tabs": {
"subscribe": "订阅",
"subscribeGroup": "订阅组"
},
"traffic": "流量",
"unitPrice": "价格/月",
"updateSuccess": "更新成功"
}
+156
View File
@@ -0,0 +1,156 @@
{
"currency": {
"accessKey": "密钥",
"accessKeyDescription": "https://exchangerate.host 提供免费提供的汇率API密钥",
"currencySymbol": "货币符号",
"currencySymbolDescription": "仅用于展示使用,更改后系统中所有的货币单位都将发生变更",
"currencyUnit": "货币单位",
"currencyUnitDescription": "仅用于展示使用,更改后系统中所有的货币单位都将发生变更",
"saveSuccess": "保存成功"
},
"email": {
"expiration_email_template": "过期通知模板",
"expiration_email_templateDescription": "模板中的 {after}.变量名{before} 会被替换为实际数据,请确保保留这些变量。",
"inputPlaceholder": "请输入内容...",
"maintenance_email_template": "维护通知模板",
"maintenance_email_templateDescription": "模板中的 {after}.变量名{before} 会被替换为实际数据,请确保保留这些变量。",
"saveSuccess": "配置已成功保存。",
"sendFailure": "测试邮件发送失败,请检查配置。",
"sendSuccess": "测试邮件已成功发送。",
"sendTestEmail": "发送测试邮件",
"sendTestEmailDescription": "发送一封测试邮件以验证配置是否正确。",
"senderAddress": "发件人地址",
"senderAddressDescription": "默认用于发送邮件的邮箱地址。",
"smtpAccount": "SMTP 账号",
"smtpAccountDescription": "用于身份验证的邮件账号。",
"smtpEncryptionMethod": "SMTP 加密方式",
"smtpEncryptionMethodDescription": "选择是否启用 SSL 加密。",
"smtpPassword": "SMTP 密码",
"smtpPasswordDescription": "该 SMTP 账号的密码。",
"smtpServerAddress": "SMTP 服务器地址",
"smtpServerAddressDescription": "指定用于发送邮件的服务器地址。",
"smtpServerPort": "SMTP 服务器端口",
"smtpServerPortDescription": "指定用于连接 SMTP 服务器的端口号。",
"verify_email_template": "验证邮件模板",
"verify_email_templateDescription": "模板中的 {after}.变量名{before} 会被替换为实际数据,请确保保留这些变量。"
},
"invite": {
"commissionFirstTimeOnly": "仅首次购买佣金",
"commissionFirstTimeOnlyDescription": "启用后,佣金仅在邀请人首次付款时生成您可以在用户管理中配置单个用户",
"enableForcedInvite": "启用强制邀请",
"enableForcedInviteDescription": "启用后,只有受邀用户才能注册",
"inputPlaceholder": "请输入",
"inviteCommissionPercentage": "邀请佣金百分比",
"inviteCommissionPercentageDescription": "默认全局佣金分配比例,您可以在用户管理中配置单个比例",
"saveSuccess": "保存成功"
},
"node": {
"communicationKey": "通信密钥",
"communicationKeyDescription": "节点通信的密钥,以确保数据不被他人拦截",
"inputPlaceholder": "请输入",
"nodePullInterval": "节点拉取间隔",
"nodePullIntervalDescription": "节点从面板获取数据的频率(秒)",
"nodePushInterval": "节点推送间隔",
"nodePushIntervalDescription": "节点将数据推送到面板的频率",
"saveSuccess": "保存成功"
},
"register": {
"emailSuffixWhitelist": "电子邮件后缀白名单",
"emailSuffixWhitelistDescription": "启用后,只有列表中的后缀的电子邮件才能注册",
"emailVerification": "电子邮件验证",
"emailVerificationDescription": "启用后,用户将需要验证他们的电子邮件",
"ipRegistrationLimit": "IP 注册限制",
"ipRegistrationLimitDescription": "启用后,符合规则要求的 IP 将被限制注册请注意,由于 CDN 或前端代理,IP 确定可能会导致问题",
"penaltyTime": "处罚时间(分钟)",
"penaltyTimeDescription": "用户必须等待处罚时间过去才能再次注册",
"registrationLimitCount": "注册限制计数",
"registrationLimitCountDescription": "达到注册限制后启用处罚",
"saveSuccess": "保存成功",
"stopNewUserRegistration": "停止新用户注册",
"stopNewUserRegistrationDescription": "启用后,没有人可以注册",
"trialRegistration": "试用注册",
"trialRegistrationDescription": "启用试用注册,请先修改试用套餐和时长",
"whitelistSuffixes": "白名单后缀",
"whitelistSuffixesDescription": "用于注册电子邮件验证,每行一个",
"whitelistSuffixesPlaceholder": "请输入电子邮件后缀,每行一个"
},
"site": {
"logo": "LOGO",
"logoDescription": "用于显示需要展示 LOGO 的位置",
"logoPlaceholder": "请输入 LOGO 的 URL 地址,不要以 '/' 结尾",
"saveSuccess": "保存成功",
"siteDesc": "站点描述",
"siteDescDescription": "用于显示需要展示站点描述的位置",
"siteDescPlaceholder": "请输入站点描述",
"siteDomain": "站点域名",
"siteDomainDescription": "当前网站的域名地址,例如用于电子邮件中",
"siteDomainPlaceholder": "请输入域名地址,多个域名请每行一个",
"siteName": "站点名称",
"siteNameDescription": "用于显示需要展示站点名称的位置",
"siteNamePlaceholder": "请输入站点名称"
},
"subscription": {
"add": "添加",
"app": "应用",
"appDescription": "配置 APP 的下载地址和导入规则,记得修改后保存",
"appDownloadURL": "应用下载地址",
"appIcon": "应用图标",
"appName": "应用名称",
"delete": "删除",
"reset": "重置",
"save": "保存",
"saveSuccess": "保存成功",
"singleSubscriptionMode": "单一订阅模式",
"singleSubscriptionModeDescription": "开启后,所有用户的套餐将转换为余额",
"subscriptionDomain": "订阅域名",
"subscriptionDomainDescription": "用于订阅,留空则使用站点域名",
"subscriptionDomainPlaceholder": "请输入订阅域名,多个域名请每行一个",
"subscriptionPath": "订阅路径",
"subscriptionPathDescription": "用于订阅",
"subscriptionPathPlaceholder": "请输入",
"subscriptionProtocol": "订阅协议",
"wildcardResolution": "通配符解析",
"wildcardResolutionDescription": "用于订阅"
},
"tabs": {
"currency": "货币",
"email": "电子邮件",
"invite": "邀请",
"node": "节点",
"register": "注册",
"site": "站点",
"subscription": "订阅",
"telegram": "Telegram",
"tos": "服务条款",
"verify": "验证"
},
"telegram": {
"botToken": "机器人 Token",
"botTokenDescription": "请输入 Botfather 提供的 token",
"enableBotNotifications": "启用机器人通知",
"enableBotNotificationsDescription": "启用后,机器人将向已链接 Telegram 的管理员和用户发送基本通知",
"groupURL": "群组 URL",
"groupURLDescription": "填写后,将在用户端显示或用于需要的位置",
"inputPlaceholderBotToken": "0000000000:xxxxxxxxx_xxxxxxxxxxxxxxx",
"inputPlaceholderGroupURL": "https://t.me/xxxxxx",
"saveSuccess": "保存成功"
},
"tos": {
"saveSuccess": "保存成功",
"title": "服务条款"
},
"verify": {
"inputPlaceholder": "请输入",
"loginVerificationCode": "登录验证码",
"loginVerificationCodeDescription": "登录时的人机验证",
"registrationVerificationCode": "注册验证码",
"registrationVerificationCodeDescription": "注册时的人机验证",
"resetPasswordVerificationCode": "重置密码验证码",
"resetPasswordVerificationCodeDescription": "重置密码时的人机验证",
"saveSuccess": "保存成功",
"turnstileSecret": "Turnstile 密钥",
"turnstileSecretDescription": "Cloudflare 提供的 Turnstile 密钥",
"turnstileSiteKey": "Turnstile 站点密钥",
"turnstileSiteKeyDescription": "Cloudflare 提供的 Turnstile 站点密钥"
}
}
+19
View File
@@ -0,0 +1,19 @@
{
"actions": "操作",
"cancel": "取消",
"check": "查看",
"close": "关闭",
"closeSuccess": "关闭成功",
"closeWarning": "一旦关闭,将无法操作该工单。请谨慎操作。",
"confirm": "确认",
"confirmClose": "确定要关闭吗?",
"createdAt": "创建时间",
"inputPlaceholder": "请输入您的问题,我们会尽快回复。",
"open": "打开",
"reply": "回复",
"status": ["状态", "待跟进", "待回复", " 已处理", "关闭"],
"ticketList": "工单列表",
"title": "标题",
"updatedAt": "更新时间",
"user": "用户"
}
+38
View File
@@ -0,0 +1,38 @@
{
"actions": "操作",
"balance": "余额",
"cancel": "取消",
"confirm": "确认",
"confirmDelete": "您确定要删除吗?",
"create": "创建",
"createSuccess": "创建成功",
"createUser": "创建用户",
"createdAt": "注册时间",
"delete": "删除",
"deleteDescription": "删除后无法恢复数据,请谨慎操作。",
"deleteSuccess": "删除成功",
"edit": "编辑",
"editUser": "编辑用户",
"email": "邮箱",
"enable": "启用",
"form": {
"balance": "余额",
"balancePlaceholder": "余额",
"cancel": "取消",
"confirm": "确认",
"invalidEmailFormat": "无效的电子邮件格式",
"inviteCode": "邀请码",
"inviteCodePlaceholder": "请输入邀请码(留空则自动生成)",
"manager": "管理员",
"password": "密码",
"passwordPlaceholder": "请输入新密码(可留空)",
"refererId": "推荐人 ID",
"refererIdPlaceholder": "请输入推荐人 ID",
"userEmail": "用户邮箱",
"userEmailPlaceholder": "请输入用户邮箱"
},
"referer": "推荐人",
"updateSuccess": "更新成功",
"userList": "用户列表",
"userName": "用户邮箱"
}