mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-14 02:46:37 +08:00
feat(frontend): 控制台 next-intl 中英双语
接入无 URL 前缀的 zh-CN/en,顶栏与外观设置可切换语言;选择写入 cookie 后刷新生效。
This commit is contained in:
@@ -0,0 +1,582 @@
|
||||
{
|
||||
"websites": {
|
||||
"title": "Websites",
|
||||
"createZone": "Add Zone",
|
||||
"searchRoot": "Search Zone root domain",
|
||||
"loadingList": "Loading Zone list...",
|
||||
"requestFailed": "Request failed. Please try again later.",
|
||||
"emptySearch": "No matching Zone found.",
|
||||
"emptyList": "No Zones yet. Click “Add Zone” in the top right to get started.",
|
||||
"rootDomain": "Root domain",
|
||||
"domainCount": "Domains",
|
||||
"createdAt": "Created",
|
||||
"updatedAt": "Updated",
|
||||
"actions": "Actions",
|
||||
"manage": "Manage",
|
||||
"manageZone": "Manage Zone",
|
||||
"loadingDetail": "Loading Zone details...",
|
||||
"invalidId": "Invalid website ID. Open the details page from the website list.",
|
||||
"notFound": "Website not found. It may have been deleted or the ID is invalid.",
|
||||
"back": "Back",
|
||||
"detailSubtitle": "Zone website management",
|
||||
"tabOverview": "Overview",
|
||||
"tabDomains": "Domains ({count})",
|
||||
"tabCertificates": "Certificates ({count})",
|
||||
"basicInfo": "Basic information",
|
||||
"basicInfoDesc": "Maintain the Zone’s registrable root domain. After changing the root, confirm that its domains still belong to it.",
|
||||
"currentRoot": "Current root domain",
|
||||
"editRoot": "Edit root domain",
|
||||
"dangerZone": "Dangerous actions",
|
||||
"dangerZoneDesc": "Clear all domains under the Zone before deleting it. Deletion cannot be undone.",
|
||||
"deleteZone": "Delete Zone",
|
||||
"deleteZoneTitle": "Delete Zone",
|
||||
"deleteZoneDesc": "Delete {domain}? Domains under it must be unbound from routes first. This cannot be undone.",
|
||||
"deleting": "Deleting…",
|
||||
"confirmDelete": "Delete",
|
||||
"zoneDeleted": "Zone deleted",
|
||||
"editZone": "Edit Zone",
|
||||
"editorDesc": "A Zone accepts only a registrable root domain, such as example.com.",
|
||||
"rootRequired": "Enter a Zone root domain",
|
||||
"rootInvalid": "Enter a root domain without a protocol or wildcard",
|
||||
"zoneUpdated": "Zone updated",
|
||||
"zoneCreated": "Zone created",
|
||||
"saveFailed": "Save failed",
|
||||
"saveChanges": "Save changes",
|
||||
"range24h": "24 hours",
|
||||
"range7d": "7 days",
|
||||
"range30d": "30 days",
|
||||
"chartUv": "Bucket UV",
|
||||
"chartBytes": "Data served",
|
||||
"statsFailed": "Failed to load traffic stats",
|
||||
"analyticsUnavailable": "Analytics storage is unavailable, so charts may be empty. Confirm that ClickHouse is enabled.",
|
||||
"uniqueVisitors": "Unique visitors in query window",
|
||||
"uniqueVisitorsDesc": "The top total is de-duplicated across the whole window; the curve is UV per time bucket and buckets cannot be added together",
|
||||
"totalRequests": "Total requests",
|
||||
"totalBytes": "Total data served",
|
||||
"zoneInfo": "Zone information",
|
||||
"addDomain": "Add domain",
|
||||
"emptyDomains": "No domains added yet",
|
||||
"certificate": "Certificate",
|
||||
"upstream": "Upstream",
|
||||
"certNumber": "Certificate #{id}",
|
||||
"unbound": "Unbound",
|
||||
"unlinkedRoute": "No linked route",
|
||||
"loadingEllipsis": "Loading…",
|
||||
"upstreamUnset": "No upstream configured",
|
||||
"viewRoute": "View route details",
|
||||
"deleteDomain": "Delete domain",
|
||||
"domainDeleted": "Domain deleted",
|
||||
"deleteFailed": "Delete failed",
|
||||
"deleteDomainTitle": "Delete domain",
|
||||
"deleteDomainDesc": "Delete {domain}? This cannot be undone.",
|
||||
"zoneCertsTitle": "Certificates used by this Zone",
|
||||
"zoneCertsDesc": "Certificates are managed in the global certificate library. This list only shows certificates bound to domains in this Zone.",
|
||||
"certLibrary": "Certificate library",
|
||||
"unboundCertHint": "{count} domains still have no certificate. Choose one in the Domains tab.",
|
||||
"emptyBoundCerts": "No bound certificates. Choose a certificate on a domain row, or import/apply one in the certificate library.",
|
||||
"status": "Status",
|
||||
"coverage": "Covered domains",
|
||||
"expiresAt": "Expires",
|
||||
"selectZone": "Select a Zone first",
|
||||
"enterDomain": "Enter a domain",
|
||||
"noWildcard": "Zone domains do not support wildcards",
|
||||
"invalidFormat": "Invalid domain format",
|
||||
"invalidSubdomain": "Invalid subdomain name format",
|
||||
"mustBelongToZone": "The domain must belong to Zone {root}",
|
||||
"domainAdded": "Domain added",
|
||||
"addFailed": "Add failed",
|
||||
"quickCreateTitle": "Quick add domain",
|
||||
"quickCreateDesc": "After selecting a Zone, enter a subdomain name (such as api), @ (the root), or a full FQDN.",
|
||||
"selectRegisteredRoot": "Select registered root domain",
|
||||
"zoneLabel": "Zone:",
|
||||
"domain": "Domain",
|
||||
"domainPlaceholderWithZone": "api or @ or api.{domain}",
|
||||
"domainPlaceholder": "api / @ / full domain",
|
||||
"willCreate": "Will create:",
|
||||
"domainExample": "Example: enter <api>api</api> → <fqdn>api.zone.com</fqdn>; <apex>@</apex> → the root itself",
|
||||
"certOptional": "Certificate (optional)",
|
||||
"noCert": "No certificate"
|
||||
},
|
||||
"certificates": {
|
||||
"title": "Certificates",
|
||||
"refresh": "Refresh certificates",
|
||||
"importCert": "Import certificate",
|
||||
"applyTitle": "Apply for certificate",
|
||||
"listTitle": "Certificate list",
|
||||
"listDesc": "Shows certificate validity, remarks, and status. You can view details, edit contents, or delete certificates.",
|
||||
"loadingList": "Loading certificate list...",
|
||||
"requestFailed": "Request failed. Please try again later.",
|
||||
"emptyList": "No certificates yet. Click “Import certificate” or “Apply for certificate” in the top right to get started.",
|
||||
"notBeforeLabel": "Valid from: {value}",
|
||||
"notAfterLabel": "Expires: {value}",
|
||||
"sourceLabel": "Source: {value}",
|
||||
"sourceAcme": "ACME application",
|
||||
"sourceUpload": "Manual upload",
|
||||
"statusLabel": "Status: {value}",
|
||||
"converting": "Conversion in progress...",
|
||||
"applying": "Applying...",
|
||||
"statusError": "Status: {value} ({message})",
|
||||
"convertFailed": "Conversion failed",
|
||||
"applyFailed": "Application failed",
|
||||
"remarkLabel": "Remark: {value}",
|
||||
"noRemark": "No remark",
|
||||
"view": "View",
|
||||
"edit": "Edit",
|
||||
"renew": "Renew",
|
||||
"deleted": "Certificate deleted",
|
||||
"renewSubmitted": "Renewal task submitted for certificate {name}",
|
||||
"imported": "Certificate {name} imported",
|
||||
"applySubmitted": "Application task submitted for certificate {name}",
|
||||
"convertSubmitted": "Conversion application submitted for certificate {name}",
|
||||
"reapplySubmitted": "Certificate {name} updated and is being re-applied...",
|
||||
"updated": "Certificate {name} updated",
|
||||
"deleteTitle": "Delete certificate",
|
||||
"deleteDesc": "Delete certificate {name}?",
|
||||
"applyEditTitle": "Edit and re-apply certificate",
|
||||
"applyConvertTitle": "Convert to applied certificate",
|
||||
"applyEditDesc": "Change the ACME certificate settings. After saving, the certificate will be re-applied with the new settings.",
|
||||
"applyConvertDesc": "Fill in the ACME application details. After a successful application, the current manual certificate is converted in place to an auto-renewable applied certificate.",
|
||||
"applyDesc": "Use ACME (Let's Encrypt and others) to automatically apply for and renew certificates, including wildcard domains.",
|
||||
"name": "Certificate name",
|
||||
"namePlaceholder": "For example: main site certificate",
|
||||
"primaryDomain": "Primary domain",
|
||||
"primaryDomainPlaceholder": "example.com or *.example.com",
|
||||
"otherDomains": "Other domains",
|
||||
"otherDomainsHint": "One domain per line. For a wildcard certificate, also enter the corresponding root domain so it can be issued together.",
|
||||
"dnsAccount": "DNS provider account",
|
||||
"selectDnsAccount": "Select a DNS account",
|
||||
"keyAlgorithm": "Key algorithm",
|
||||
"remark": "Remark",
|
||||
"remarkPlaceholder": "Optional. Record what this certificate is used for.",
|
||||
"autoRenew": "Enable auto-renewal",
|
||||
"autoRenewDesc": "When enabled, the certificate is renewed automatically 7 days before it expires.",
|
||||
"advanced": "Advanced options",
|
||||
"dnsServer1": "DNS validation server 1",
|
||||
"dnsServer2": "DNS validation server 2",
|
||||
"dnsServerPlaceholder": "Leave empty to use the default authoritative DNS",
|
||||
"skipCname": "Skip CNAME check",
|
||||
"skipCnameDesc": "Do not follow CNAME records during DNS-01 validation.",
|
||||
"skipDns": "Skip DNS pre-check",
|
||||
"skipDnsDesc": "Ask Let's Encrypt to validate directly without a local check.",
|
||||
"submitting": "Submitting...",
|
||||
"saveAndApply": "Save and apply",
|
||||
"startConvert": "Start conversion",
|
||||
"startApply": "Start application",
|
||||
"editTitle": "Edit certificate",
|
||||
"editDesc": "You can change the certificate name and remark, and re-upload the PEM certificate and private key.",
|
||||
"loadingContent": "Loading certificate contents...",
|
||||
"notFound": "Certificate not found. It may have been deleted.",
|
||||
"certPem": "Certificate PEM",
|
||||
"keyPem": "Private key PEM",
|
||||
"convertSource": "Convert source",
|
||||
"saving": "Saving...",
|
||||
"saveCert": "Save certificate",
|
||||
"importTitle": "Add certificate",
|
||||
"importDesc": "Paste PEM manually or upload certificate files. After import, you can select it immediately in website forms.",
|
||||
"manualImport": "Manual import",
|
||||
"fileImport": "File import",
|
||||
"remarkProdPlaceholder": "For example: production certificate for the main site",
|
||||
"importing": "Importing...",
|
||||
"remarkWildcardPlaceholder": "For example: production wildcard certificate",
|
||||
"certFile": "Certificate file",
|
||||
"keyFile": "Private key file",
|
||||
"fileSelected": "Selected: {name}",
|
||||
"selectCertFile": "Select a PEM/CRT file",
|
||||
"selectKeyFile": "Select a KEY/PEM file",
|
||||
"uploading": "Uploading...",
|
||||
"uploadFiles": "Upload files",
|
||||
"clearFiles": "Clear files",
|
||||
"selectFiles": "Select a certificate file and a private key file.",
|
||||
"detailTitle": "Certificate details",
|
||||
"detailDesc": "View certificate metadata, remarks, and the currently saved PEM contents.",
|
||||
"loadingDetail": "Loading certificate details...",
|
||||
"status": "Status",
|
||||
"notBefore": "Valid from",
|
||||
"notAfter": "Expires",
|
||||
"certPemCopied": "Certificate PEM copied",
|
||||
"keyPemCopied": "Private key PEM copied",
|
||||
"copy": "Copy",
|
||||
"close": "Close",
|
||||
"editCert": "Edit certificate",
|
||||
"deleting": "Deleting...",
|
||||
"deleteCert": "Delete certificate",
|
||||
"certStatus": {
|
||||
"unknownExpiry": "Expiry unknown",
|
||||
"expired": "Expired",
|
||||
"expiresInDays": "Expires within {days} days",
|
||||
"valid": "Valid"
|
||||
},
|
||||
"validation": {
|
||||
"nameRequired": "Enter a certificate name",
|
||||
"nameTooLong": "Certificate name cannot exceed 255 characters",
|
||||
"certPemRequired": "Enter the certificate PEM",
|
||||
"keyPemRequired": "Enter the private key PEM",
|
||||
"remarkTooLong": "Remark cannot exceed 255 characters",
|
||||
"primaryDomainRequired": "Enter a primary domain",
|
||||
"dnsAccountRequired": "Select a DNS account"
|
||||
}
|
||||
},
|
||||
"dnsAccounts": {
|
||||
"title": "DNS accounts",
|
||||
"addAccount": "Add account",
|
||||
"listTitle": "DNS account list",
|
||||
"listDesc": "Centrally manage DNS provider accounts used for ACME certificate DNS validation.",
|
||||
"loadingList": "Loading DNS accounts...",
|
||||
"requestFailed": "Request failed. Please try again later.",
|
||||
"emptyList": "No DNS accounts yet. Click “Add account” in the top right to get started.",
|
||||
"createdAt": "Created: {date}",
|
||||
"created": "DNS account added",
|
||||
"deleted": "DNS account deleted",
|
||||
"deleteTitle": "Delete DNS account",
|
||||
"deleteDesc": "Delete DNS account {name}?",
|
||||
"createTitle": "Add DNS account",
|
||||
"createDesc": "Centrally manage DNS provider accounts used for ACME certificate DNS validation.",
|
||||
"accountName": "Account name",
|
||||
"accountNamePlaceholder": "Cloudflare email account",
|
||||
"provider": "DNS provider",
|
||||
"tokenPlaceholder": "Do not use a Global API Key",
|
||||
"nameRequired": "Enter a name",
|
||||
"tokenRequired": "Enter a token",
|
||||
"submitting": "Submitting...",
|
||||
"submit": "Submit"
|
||||
},
|
||||
"origins": {
|
||||
"title": "Origins",
|
||||
"subtitle": "Centrally maintain origin addresses reused by routes, so bulk address changes need less repeated work.",
|
||||
"refresh": "Refresh",
|
||||
"create": "Add origin",
|
||||
"loadFailed": "Load failed",
|
||||
"emptyTitle": "No origins",
|
||||
"emptyDesc": "Click Add origin in the top right. Later routes can reuse these addresses directly.",
|
||||
"routeCount": "{count} routes",
|
||||
"noRemark": "No remark",
|
||||
"lastUpdated": "Last updated: {date}",
|
||||
"detail": "Details",
|
||||
"edit": "Edit",
|
||||
"deleted": "Origin deleted",
|
||||
"deleteFailed": "Delete failed",
|
||||
"deleteTitle": "Delete origin",
|
||||
"deleteDesc": "Delete origin {name}?",
|
||||
"confirmDelete": "Delete",
|
||||
"missingId": "A valid origin ID is missing.",
|
||||
"loadingDetail": "Loading origin details...",
|
||||
"backToList": "Back to list",
|
||||
"notFound": "Origin not found or already deleted.",
|
||||
"editOrigin": "Edit origin",
|
||||
"deleteOrigin": "Delete origin",
|
||||
"boundRoutes": "Bound routes",
|
||||
"createdAt": "Created",
|
||||
"updatedAt": "Updated",
|
||||
"remark": "Remark",
|
||||
"relatedRoutes": "Related routes",
|
||||
"relatedRoutesDesc": "Shows routes that bind this origin as the primary origin.",
|
||||
"noRelatedRoutes": "No related routes",
|
||||
"noRelatedRoutesDesc": "This origin is not referenced by any route yet.",
|
||||
"domain": "Domain",
|
||||
"address": "Origin address",
|
||||
"status": "Status",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"addressRequired": "Enter an origin address",
|
||||
"addressInvalid": "Invalid origin address format",
|
||||
"updated": "Origin updated",
|
||||
"created": "Origin created",
|
||||
"saveFailed": "Save failed",
|
||||
"editorDesc": "Origins are a reusable address directory for routes. Protocol and port are still decided by the route.",
|
||||
"name": "Origin name",
|
||||
"namePlaceholder": "Main origin",
|
||||
"saving": "Saving...",
|
||||
"saveChanges": "Save changes"
|
||||
},
|
||||
"proxyRoutes": {
|
||||
"title": "Route configuration",
|
||||
"refresh": "Refresh",
|
||||
"createRule": "New route",
|
||||
"listTitle": "Route list",
|
||||
"searchPlaceholder": "Search sites, domains, or upstreams...",
|
||||
"emptyTitle": "No websites",
|
||||
"emptyDesc": "Create a website first, then open the configuration page to finish HTTPS, cache, and rate limits.",
|
||||
"noMatches": "No matching results",
|
||||
"noMatchesDesc": "Try a different search term, or clear the filter.",
|
||||
"siteName": "Site name",
|
||||
"domain": "Domain",
|
||||
"status": "Status",
|
||||
"upstream": "Upstream",
|
||||
"actions": "Actions",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"configure": "Configure",
|
||||
"siteCreated": "Website created",
|
||||
"siteDeleted": "Website deleted",
|
||||
"deleteFailed": "Delete failed",
|
||||
"loadListFailed": "Failed to load route list",
|
||||
"unknownError": "Unknown error",
|
||||
"deleteSiteTitle": "Delete website",
|
||||
"deleteSiteDesc": "Delete website {name}? This deletes all domains and configuration under the site.",
|
||||
"deleting": "Deleting...",
|
||||
"missingId": "A valid route ID is missing.",
|
||||
"notFound": "Route not found",
|
||||
"notFoundDesc": "Return to the list and try again.",
|
||||
"saving": "Saving...",
|
||||
"saveFailed": "Save failed",
|
||||
"requestFailed": "Request failed. Please try again later.",
|
||||
"back": "Back",
|
||||
"publish": "Publish configuration",
|
||||
"diffFailed": "Failed to load configuration diff",
|
||||
"noPublishNeeded": "The current configuration matches the active version. Nothing to publish.",
|
||||
"publishSuccess": "Published successfully",
|
||||
"versionLabel": "Version {version}",
|
||||
"publishFailed": "Publish failed",
|
||||
"publishTitle": "Publish configuration",
|
||||
"publishDesc": "This creates a new version from the pending configuration and sets it as active. Nodes will then pull the update.",
|
||||
"confirmPublish": "Publish",
|
||||
"createDesc": "Choose bindings from registered Zone domains. After creating the route, you can continue configuring cache, rate limits, and other advanced options.",
|
||||
"siteId": "Site identifier",
|
||||
"siteIdOptionalDesc": "Optional. If left empty, the first domain is used automatically.",
|
||||
"siteIdStableDesc": "Use a stable, readable business identifier. It does not have to match the domain exactly.",
|
||||
"bindDomains": "Bound domains",
|
||||
"bindDomainsHint": "Select registered domains to bind. Use “Quick add domain” to create an FQDN under a Zone and select it automatically.",
|
||||
"upstreamType": "Origin mode",
|
||||
"upstreamDirect": "Direct upstream",
|
||||
"upstreamTunnel": "Tunnel",
|
||||
"upstreamPages": "Pages static site",
|
||||
"upstreamAddresses": "Upstream addresses",
|
||||
"upstreamUrlsHint": "One full URL per line. The first line is the primary origin. In multi-upstream mode, keep the same protocol and do not include a path or query.",
|
||||
"selectTunnel": "Select a tunnel",
|
||||
"pleaseSelect": "Please select...",
|
||||
"online": "Online",
|
||||
"offline": "Offline",
|
||||
"tunnelForwardHint": "Forward requests to the client node connected by this tunnel.",
|
||||
"tunnelProtocol": "Internal service protocol",
|
||||
"tunnelAddress": "Internal service address",
|
||||
"tunnelAddressHint": "For example: 127.0.0.1:8080 or 192.168.1.10:80",
|
||||
"selectPagesProject": "Select a Pages project",
|
||||
"pagesProjectHint": "Only enabled Pages projects with an active deployment are shown.",
|
||||
"enableSite": "Enable site",
|
||||
"enableSiteDesc": "When disabled, the configuration is kept but not included in publish.",
|
||||
"createFailed": "Create failed. Please try again later.",
|
||||
"creating": "Creating…",
|
||||
"create": "Create",
|
||||
"searchDomainOrZone": "Search domain or Zone…",
|
||||
"quickAddDomain": "Quick add domain",
|
||||
"noZoneDomains": "No Zone domains available. Add an FQDN in <websites>Website management</websites> first, or use “Quick add domain”.",
|
||||
"noBindableDomains": "No bindable domains (the rest are already bound to other routes). Use “Quick add domain” to create one.",
|
||||
"noMatchingDomains": "No matching domains",
|
||||
"certNumber": "Certificate #{id}",
|
||||
"noCert": "No certificate",
|
||||
"zoneName": "Zone {name}",
|
||||
"zoneId": "Zone #{id}",
|
||||
"unboundDomain": "No domain bound",
|
||||
"pagesProjectId": "Pages project #{id}",
|
||||
"pagesUnbound": "Pages project not bound",
|
||||
"tunnelTargetUnset": "Target not configured",
|
||||
"upstreamUnset": "No upstream configured",
|
||||
"domainSettings": "Domain settings",
|
||||
"domainSettingsDesc": "Bind FQDNs already registered in a Zone. Maintain certificates in Zone domain management.",
|
||||
"redirectNeedsCert": "Bind a certificate to the selected domains (in the Zone) before enabling HTTP redirect",
|
||||
"domainSettingsSaved": "Domain settings saved",
|
||||
"redirectHttp": "Automatically redirect HTTP to HTTPS",
|
||||
"redirectHttpEnabledHint": "When enabled, extra port-80 redirect rules are generated.",
|
||||
"redirectHttpNeedsCert": "At least one selected domain must have a bound certificate before this can be enabled.",
|
||||
"reverseProxy": "Reverse proxy",
|
||||
"reverseProxyDesc": "Configure the origin strategy and upstream addresses.",
|
||||
"proxySaved": "Reverse proxy settings saved",
|
||||
"originHostHint": "If left empty, the request hostname $host is passed through by default.",
|
||||
"customHeaders": "Custom request headers",
|
||||
"customHeadersHint": "One per line, in Key: Value format.",
|
||||
"limits": "Traffic limits",
|
||||
"limitsDesc": "Site rate limits. Empty or 0 inherits the global default; -1 turns it off explicitly; greater than 0 is custom.",
|
||||
"limitsSaved": "Traffic limits saved",
|
||||
"connLimit": "Concurrency limit",
|
||||
"connLimitHint": "Empty or 0 inherits the global default; -1 turns it off; greater than 0 is a custom concurrency cap.",
|
||||
"ipLimit": "Per-IP limit",
|
||||
"ipLimitHint": "Empty or 0 inherits the global default; -1 turns it off; greater than 0 is a custom per-IP cap.",
|
||||
"rateLimit": "Rate limit",
|
||||
"rateLimitPlaceholder": "512k/1m or -1",
|
||||
"rateLimitHint": "Empty or 0 inherits the global default; -1 turns it off; for example 512k or 1m is a custom bandwidth.",
|
||||
"reqLimit": "Per-IP request rate",
|
||||
"reqLimitPlaceholder": "10r/s / 100r/m or -1",
|
||||
"reqLimitHint": "Empty or 0 inherits the global default; -1 turns it off; for example 10r/s or 100r/m is a custom rate.",
|
||||
"cache": "Cache",
|
||||
"cacheDesc": "Configure the site edge cache policy.",
|
||||
"cacheSaved": "Cache settings saved",
|
||||
"enableCache": "Enable site cache",
|
||||
"enableCacheDesc": "New sites should use “Standard static assets”.",
|
||||
"cachePolicy": "Cache policy",
|
||||
"policyStatic": "Standard static assets (recommended)",
|
||||
"policyAll": "All cacheable GET (advanced)",
|
||||
"policySuffix": "Custom suffix",
|
||||
"policyPrefix": "Path prefix",
|
||||
"policyExact": "Exact path",
|
||||
"advancedRiskTitle": "Advanced policy risk",
|
||||
"advancedRiskDesc": "Personalized HTML may be edge-cached and served to other users if the origin does not declare private / no-store. See the help next to the title for details.",
|
||||
"cacheRules": "Cache rules",
|
||||
"cacheHelpTitle": "Cache usage notes",
|
||||
"cacheHelpIntro": "The extension/policy decides whether a response can be cached. Origin headers and Set-Cookie decide whether it is stored. Global OpenResty cache in performance settings must also be enabled.",
|
||||
"cacheHelpRecommendLabel": "Recommended policy:",
|
||||
"cacheHelpRecommend": "New sites should use “Standard static assets” (includes css/js/map/images/fonts/media, excludes HTML/JSON).",
|
||||
"cacheHelpGeneralLabel": "General rules:",
|
||||
"cacheHelpGeneral": "Non-GET is not cached; login cookies do not skip cache on their own; origin private/no-store or a Set-Cookie response is not written to the edge.",
|
||||
"cacheHelpAllGetLabel": "All cacheable GET:",
|
||||
"cacheHelpAllGet": "An advanced option, similar to Cache Everything. Personalized pages must be declared private/no-store by the origin, or HTML may be edge-cached and served to other users.",
|
||||
"cacheHelpCustomLabel": "Custom rules:",
|
||||
"cacheHelpCustom": "Use suffixes such as jpg/css/js; path prefixes such as /assets; exact paths such as /robots.txt. After saving, republish a configuration version before it takes effect on nodes.",
|
||||
"cacheHintSuffix": "One suffix per line, for example jpg, css, js.",
|
||||
"cacheHintPrefix": "One path prefix per line, for example /assets, /static.",
|
||||
"cacheHintExact": "One exact path per line, for example /robots.txt.",
|
||||
"cacheHintStatic": "Standard static assets use the built-in extension list. No extra rules are needed.",
|
||||
"cacheHintNone": "The current policy does not need extra path rules.",
|
||||
"cachePlaceholderNone": "No extra rules for the current policy",
|
||||
"auth": "Authentication",
|
||||
"authDesc": "Configure Basic Auth to block unauthorized access. Configure PoW protection in a WAF rule group.",
|
||||
"authSaved": "Authentication settings saved",
|
||||
"authFormInvalid": "Check the authentication form",
|
||||
"authMode": "Authentication mode",
|
||||
"authNone": "No authentication",
|
||||
"powHint": "PoW protection can only be enabled in a WAF rule group and bound to a site.",
|
||||
"username": "Username",
|
||||
"password": "Password",
|
||||
"wafDesc": "Global rule groups always apply. Here you can add custom rule groups for the current website.",
|
||||
"wafUpdated": "WAF rule groups updated",
|
||||
"loadingWaf": "Loading WAF rule groups...",
|
||||
"alwaysOn": "Always on",
|
||||
"selectCustomRules": "Select custom rules",
|
||||
"selectCustomRulesDesc": "Selected rules run in the execution order below.",
|
||||
"selectRule": "Select {name}",
|
||||
"ruleEnabled": "Enabled",
|
||||
"ruleDisabled": "Disabled",
|
||||
"nodeCount": "{count} nodes",
|
||||
"executionOrder": "Execution order",
|
||||
"executionOrderDesc": "Custom rules run in this order. Drag them or use the up/down buttons to change the order.",
|
||||
"noCustomWaf": "No custom WAF rule groups",
|
||||
"dragRule": "Drag {name}",
|
||||
"moveUpRule": "Move {name} up",
|
||||
"moveDownRule": "Move {name} down",
|
||||
"sections": {
|
||||
"domains": "Domain settings",
|
||||
"domainsDesc": "Maintain the site identifier and choose bound domains from a Zone.",
|
||||
"limits": "Traffic limits",
|
||||
"limitsDesc": "Set connection limits and rate limits (can inherit global defaults).",
|
||||
"proxy": "Reverse proxy",
|
||||
"proxyDesc": "Configure the primary origin and upstream addresses.",
|
||||
"cache": "Cache",
|
||||
"cacheDesc": "Configure the site cache policy.",
|
||||
"waf": "WAF",
|
||||
"wafDesc": "Bind WAF rule groups and view the policies that apply to this site.",
|
||||
"auth": "Authentication",
|
||||
"authDesc": "Configure basic authentication so visitors must enter a username and password."
|
||||
},
|
||||
"validation": {
|
||||
"enterDomain": "Enter a domain",
|
||||
"invalidDomain": "Invalid domain format",
|
||||
"enterAtLeastOneDomain": "Enter at least one domain",
|
||||
"invalidDomainWithValue": "Invalid domain format: {domain}",
|
||||
"duplicateDomain": "Duplicate domain: {domain}",
|
||||
"enterAtLeastOneUpstream": "Enter at least one upstream address",
|
||||
"invalidUpstream": "Invalid upstream address format: {url}",
|
||||
"upstreamMustBeHttp": "Upstream address must start with http:// or https://: {url}",
|
||||
"upstreamMissingHost": "Upstream address is missing a hostname: {url}",
|
||||
"multiUpstreamNoPath": "Multi-upstream mode does not support addresses with a path or query",
|
||||
"multiUpstreamSameProtocol": "Multiple upstreams for the same site must use the same protocol",
|
||||
"invalidOriginHost": "Invalid origin Host format",
|
||||
"invalidHeader": "Invalid custom request header format: {line}",
|
||||
"invalidHeaderName": "Invalid custom request header name: {key}",
|
||||
"invalidLimitRate": "Invalid rate-limit format. Use 512k, 1m, a number, or -1 to turn it off",
|
||||
"invalidLimitReq": "Invalid request-rate format. Use 10r/s, 100r/m, or -1 to turn it off",
|
||||
"cacheRuleRequired": "The current cache policy needs at least one rule",
|
||||
"invalidCacheSuffix": "Invalid cache suffix format: {rule}",
|
||||
"invalidCachePath": "Invalid cache path rule format: {rule}",
|
||||
"siteNameTooLong": "Site identifier cannot exceed 255 characters",
|
||||
"selectAtLeastOneDomain": "Select at least one domain",
|
||||
"selectTunnel": "Select a tunnel",
|
||||
"enterTunnelTarget": "Enter an internal service address (for example 127.0.0.1:8080)",
|
||||
"selectPagesProject": "Select a Pages project",
|
||||
"enterSiteId": "Enter a site identifier",
|
||||
"enterIntegerOrMinusOne": "Enter -1, 0, or a positive integer",
|
||||
"enterUsername": "Enter a username",
|
||||
"enterPassword": "Enter a password"
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"title": "Response pages",
|
||||
"subtitle": "Configure origin error pages and offline pages.",
|
||||
"loadingPermission": "Loading permission information...",
|
||||
"loadingConfig": "Loading response page settings...",
|
||||
"loadingPage": "Loading response pages...",
|
||||
"loadingErrorConfig": "Loading error page settings...",
|
||||
"loadingOfflineConfig": "Loading offline page settings...",
|
||||
"loadFailed": "Load failed",
|
||||
"forbidden": "Insufficient permission",
|
||||
"forbiddenSettings": "Only administrators can access response page settings.",
|
||||
"forbiddenPreviewError": "Only administrators can preview the error page.",
|
||||
"forbiddenPreviewOffline": "Only administrators can preview the offline page.",
|
||||
"forbiddenEditError": "Only administrators can edit the error page HTML.",
|
||||
"forbiddenEditOffline": "Only administrators can edit the offline page HTML.",
|
||||
"errorPage": "Error page",
|
||||
"offlinePage": "Offline page",
|
||||
"saveFailed": "Save failed",
|
||||
"policySaved": "Trigger policy saved. Publish a version for the configuration to take effect.",
|
||||
"triggerPolicy": "Trigger policy",
|
||||
"triggerPolicyDesc": "Configure when the origin error page is enabled and which status codes trigger it.",
|
||||
"enableErrorPage": "Enable origin error page",
|
||||
"enableErrorPageDesc": "When disabled, the origin or Nginx default error response is passed through.",
|
||||
"getOnly": "GET requests only",
|
||||
"getOnlyDesc": "When enabled, the custom error page is returned only for matching error status codes on GET requests.",
|
||||
"statusCodes": "Trigger status codes",
|
||||
"statusCodesDesc": "Supports a single code (such as 502) or a closed range (such as 500-599).",
|
||||
"statusCodesPlaceholder": "For example 502 or 500-599, then press Enter",
|
||||
"pagePreview": "Page preview",
|
||||
"preview": "Preview",
|
||||
"edit": "Edit",
|
||||
"errorPagePreview": "Origin error page preview",
|
||||
"errorPreview": "Error page preview",
|
||||
"offlinePreview": "Offline page preview",
|
||||
"offlinePageDesc": "When enabled, a Service Worker is issued to HTTPS websites. If the domain is unreachable, the browser shows this offline page from cache.",
|
||||
"offlineSaved": "Offline page saved. Publish a version for the configuration to take effect.",
|
||||
"enableOffline": "Enable Service Worker offline page",
|
||||
"enableOfflineDesc": "Only takes effect on HTTPS websites.",
|
||||
"enableOfflineAria": "Enable offline page",
|
||||
"scope": "Scope",
|
||||
"scopeDesc": "Applies only to the selected HTTPS domains. If empty, nothing is injected.",
|
||||
"addDomain": "Add domain",
|
||||
"noScopeSelected": "No scope domains selected. After saving, nothing is injected into any site.",
|
||||
"enableThenSelectScope": "Enable the offline fallback before choosing scope domains.",
|
||||
"removeDomain": "Remove {domain}",
|
||||
"selectScopeTitle": "Select scope domains",
|
||||
"selectScopeDesc": "Inject the offline fallback only for selected HTTPS domains. Search, filter, and bulk-select.",
|
||||
"domain": "Domain",
|
||||
"searchDomainOrZone": "Search domain or apex…",
|
||||
"selectedCount": "Selected {count}",
|
||||
"visibleCount": "Visible {count}",
|
||||
"unselectVisible": "Clear visible",
|
||||
"selectVisible": "Select visible",
|
||||
"clear": "Clear",
|
||||
"noAvailableDomains": "No domains available. Register domains in Zone management first.",
|
||||
"noMatchingDomains": "No matching domains",
|
||||
"selectZone": "Select apex {domain}",
|
||||
"apex": "Apex",
|
||||
"confirm": "OK",
|
||||
"backToError": "Back to error page",
|
||||
"backToOffline": "Back to offline page",
|
||||
"closePreview": "Close preview",
|
||||
"fullscreen": "Full-screen view",
|
||||
"htmlTooLarge": "HTML exceeds the size limit (max 256KB)",
|
||||
"errorHtmlSaved": "Origin error page HTML saved. Publish a version for the configuration to take effect.",
|
||||
"offlineHtmlSaved": "Offline page HTML saved. Publish a version for the configuration to take effect.",
|
||||
"templateNotFound": "Selected template not found",
|
||||
"templateLoaded": "Loaded template “{name}” into the editor",
|
||||
"errorRestored": "Cleared to use the server built-in default template (save to apply)",
|
||||
"offlineRestored": "Cleared to use the built-in default template (save to apply)",
|
||||
"editErrorHtml": "Edit error page HTML",
|
||||
"editOfflineHtml": "Edit offline page HTML",
|
||||
"offlineLivePreview": "Offline page live preview",
|
||||
"builtinTemplates": "Built-in templates",
|
||||
"selectTemplate": "Select a template",
|
||||
"loadTemplate": "Load template",
|
||||
"restoreDefault": "Restore default",
|
||||
"restoreTitle": "Restore default HTML?",
|
||||
"restoreErrorDesc": "This clears the editor. After saving, the server built-in default template is used. This action does not save automatically.",
|
||||
"restoreOfflineDesc": "This clears the editor. After saving, the built-in default template is used. This action does not save automatically.",
|
||||
"confirmRestore": "Restore"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user