{
"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.zone.com; @ → 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 Website management 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"
}
}