mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-28 05:46:36 +08:00
f4ec58c0e6
This reverts commit 2ba28417b3.
583 lines
31 KiB
JSON
583 lines
31 KiB
JSON
{
|
||
"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"
|
||
}
|
||
}
|