{
  "title": "Projects",
  "subtitle": "",
  "create": "Create project",
  "createHint": "After create, open detail to deploy, publish, and tune resources",
  "empty": "No projects yet",
  "emptyHint": "Create your first project, then deploy and publish Nginx",
  "emptyFilter": "No matching projects",
  "emptyFilterHint": "Clear search or change the runtime filter",
  "name": "Name",
  "domain": "Domain (optional)",
  "detail": "Project detail",
  "deploy": "Deploy",
  "deployPhp": "Deploy PHP",
  "stop": "Stop",
  "health": "Health check",
  "publishNginx": "Publish Nginx",
  "publishNginxSsl": "Publish Nginx + SSL",
  "opsResult": "Ops result",
  "runtime": "Runtime",
  "template": "Template (optional)",
  "templateNone": "— none —",
  "searchPlaceholder": "Search name, domain, or ID…",
  "listDesc": "Manage sites on this host.",
  "filterAll": "All runtimes",
  "statTotal": "Total",
  "statRunning": "Running",
  "statDegraded": "Degraded",
  "statUnhealthy": "Unhealthy",
  "statStopped": "Stopped / ready",
  "statStoppedOnly": "Stopped",
  "statReadyOnly": "Ready",
  "statPendingOs": "OS user pending",
  "status": {
    "failed": "Failed",
    "failedHint": "Deploy or health check failed — check logs",
    "unhealthy": "Unhealthy",
    "unhealthyHint": "Process is up but health check failed",
    "pendingOs": "OS user pending",
    "pendingOsHint": "System user not provisioned",
    "degraded": "Running (degraded)",
    "degradedHint": "Process is up but not full production mode (e.g. non-root / pidfile)",
    "deploying": "Deploying",
    "published": "Published",
    "publishedHint": "Nginx config written; process may be separate",
    "running": "Running",
    "stopped": "Stopped",
    "ready": "Ready",
    "readyHint": "Created — deploy to start",
    "unknown": "Unknown"
  },
  "checklist": {
    "title": "Launch path",
    "desc": "Complete these steps to serve traffic",
    "created": "Created",
    "os": "OS user",
    "deploy": "Deploy",
    "nginx": "Nginx",
    "health": "Health"
  },
  "next": {
    "pendingOsTitle": "System user not provisioned",
    "provisionOsAction": "Create system user",
    "pendingOsBody": "This project has no isolated system user yet.",
    "pendingOsActions": "You can still deploy; full isolation needs admin privileges on the host.",
    "deployTitle": "Next: Deploy",
    "deployBody": "Use Deploy in the header, or the Deploy tab for Git.",
    "nginxTitle": "Next: Publish Nginx",
    "nginxBody": "Open the Network tab to publish Nginx (optional SSL)."
  },
  "healthDetail": {
    "none": "No health check yet",
    "overall": "Result",
    "nginxStatus": "Nginx status",
    "nginxReloaded": "Nginx reload",
    "httpStatus": "HTTP",
    "latency": "Latency",
    "error": "Error",
    "at": "Checked at",
    "deployMode": "Deploy mode",
    "edgeKind": "Edge",
    "goLiveOk": "Go-live",
    "goLiveAt": "Go-live at",
    "degraded": "Degraded"
  },
  "railPhp": "PHP / site",
  "railStatic": "Static site",
  "sectionPhpDeploy": "PHP deploy",
  "sectionPhpDeployDesc": "Write PHP site / pool and apply when allowed",
  "sectionStaticDeploy": "Static content",
  "sectionStaticDeployDesc": "Static sites use files + Nginx — no Node process",
  "staticDeployHint": "Pull content via Git, then Publish Nginx under Network.",
  "noDomain": "No domain",
  "lastDeploy": "Last deploy",
  "neverDeployed": "Never deployed",
  "created": "Created {{name}}",
  "backToList": "Back to projects",
  "openUrl": "Open site",
  "openUrlNeedDomain": "Set a domain first — do not open 127.0.0.1 in your browser",
  "needOsUser": "Create the system user on the Isolation tab first",
  "goIsolation": "Open Isolation tab",
  "homeMissing": "Home directory does not exist",
  "homeMissingHint": "Same live probe as migrate inventory — create the system user on Isolation",
  "stopTitle": "Stop this project (systemd unit and public site)",
  "deployTitle": "Deploy this project",
  "httpStatsHint": "From this project’s access log (last sample)",
  "httpStatsNone": "No project access log yet",
  "notFound": "Project not found",
  "home": "Home directory",
  "env": "Environment",
  "backup": "Backup",
  "resources": "Resources",
  "quotaUnlimited": "No quota",
  "lastHealth": "Last health",
  "tabOverview": "Overview",
  "tabDeploy": "Deploy",
  "tabApp": "App",
  "tabNetwork": "Network",
  "tabResources": "Resources",
  "tabIsolation": "Isolation",
  "tabLogs": "Logs",
  "tabAdvanced": "Advanced",
  "tabMore": "More",
  "createGoLive": "Deploy and publish Nginx after create",
  "createPreferredPort": "Fixed port (optional)",
  "goLiveOk": "Deployed and published",
  "goLivePartial": "Created; deploy/publish incomplete",
  "nginxLive": "Live",
  "nginxWritten": "Written",
  "nginxNeedsDeploy": "Needs deploy",
  "nginxFailed": "Publish failed",
  "netEdgeStatus": "Edge status",
  "netUpstream": "Upstream",
  "netPortTitle": "Process port",
  "netCurrentPort": "Current port",
  "netPublishTitle": "Publish",
  "netConfPreview": "Conf",
  "savePublishSsl": "Save and publish + SSL",
  "retryLiveTitle": "Go-live incomplete",
  "retryLiveBody": "Deploy or Nginx publish did not finish. Retry below.",
  "retryDeploy": "Retry deploy",
  "retryPublish": "Retry publish Nginx",
  "preferredPortRedeployHint": "Save, then redeploy for the process to use this port",
  "railProcess": "Process",
  "railNginx": "Nginx",
  "railOs": "OS user",
  "railHealth": "Health",
  "nginxPublished": "Config published",
  "nginxNone": "Not published",
  "osProvisioned": "System user provisioned",
  "osPending": "OS isolation pending",
  "healthOk": "Healthy",
  "healthBad": "Failed",
  "healthUnknown": "Not checked",
  "sectionRuntimeDeploy": "Runtime deploy",
  "sectionRuntimeDeployDesc": "Start the process for this project runtime (Node / PHP)",
  "sectionGit": "Git",
  "sectionGitDesc": "Clone, sync, and inbound push",
  "sectionEnv": "Environment variables",
  "sectionEnvDesc": "Write KEY=value lines to the project .env",
  "gitUrl": "Git URL",
  "gitDeploy": "Git deploy",
  "envFile": "Env (.env)",
  "saveEnv": "Save env",
  "sectionNginx": "Nginx & SSL",
  "sectionNginxDesc": "Write and apply site config",
  "domainHint": "Set a domain at create time for cleaner publish",
  "sectionQuota": "Disk quota",
  "sectionQuotaDesc": "Limit home directory size (MiB)",
  "sectionLimits": "CPU / memory",
  "sectionLimitsDesc": "systemd limits; redeploy to apply the unit",
  "quotaMb": "Quota (MiB)",
  "memoryMax": "MemoryMax",
  "cpuQuota": "CPU quota %",
  "setQuota": "Set quota",
  "setResources": "Save resource limits",
  "sectionLogs": "Application logs",
  "sectionLogsDesc": "Tail recent log files under the project home",
  "viewLogs": "Load logs",
  "logsEmpty": "No logs loaded yet",
  "logsNoFiles": "(no log files yet — deploy first)",
  "sectionAdvanced": "Other actions",
  "sectionAdvancedDesc": "Backups and template content",
  "downloadWp": "Download WordPress",
  "dangerZone": "Danger zone",
  "dangerZoneDesc": "Delete removes project records and related resources",
  "delete": "Delete project",
  "confirmStopTitle": "Stop this project?",
  "confirmStopDesc": "This will stop the running process for “{{name}}”.",
  "confirmDeleteTitle": "Delete this project?",
  "confirmDeleteDesc": "Delete “{{name}}”? This cannot be undone from the UI.",
  "close": "Close",
  "statProjects": "{{count}} projects",
  "noProjectsShort": "No projects yet",
  "runtimeStatic": "Static",
  "logsLoadFailed": "Failed to load logs",
  "deleteFailed": "Delete failed",
  "tabAbout": "About",
  "statusLabel": "Status",
  "userLabel": "User",
  "nginxValuePublished": "Published",
  "nginxValueNone": "Not published",
  "osValueReady": "Ready",
  "osValuePending": "OS user pending",
  "openFiles": "Files",
  "enableCdn": "Enable CDN",
  "openLogs": "Logs",
  "osUserReadyMsg": "System user ready. {{detail}}",
  "osUserNeedRoot": "Cannot create system user: needs YSK_EXECUTE + root. {{detail}}",
  "osUserIncomplete": "System user provisioning incomplete",
  "saveLogDirsFailed": "Failed to save log directories",
  "createName": "Project name",
  "noPathSepHint": "The name cannot contain / or \\.",
  "createRuntime": "Runtime",
  "createRuntimeHint": "You can change deploy options later in detail",
  "createVersion": "Version",
  "createVersionHint": "Writes the project runtime version setting; deploy / FPM uses it",
  "createVersionAria": "Runtime version",
  "createPrimaryDomain": "Primary domain",
  "createPrimaryDomainHint": "Optional for now",
  "createAliases": "Aliases",
  "createAliasesHint": "Comma or newline separated",
  "createTemplate": "Template",
  "createTemplateHint": "One Hello World! demo per runtime; picking a template sets that runtime",
  "createTemplateNote": "Templates only write a skeleton; deploy to build/start.",
  "createRuntimeNow": "Current runtime: ",
  "createTemplateFooter": ". Optional template to start faster, or leave empty.",
  "createDraftResources": "Also create draft resources with the domain",
  "createNeedDomainFirst": "Enter primary domain first so draft options apply together.",
  "createDnsZone": "Also create DNS zone",
  "createDnsZoneDesc": "Writes management draft only — not live authoritative DNS",
  "createMailDomain": "Also register mail domain",
  "createMailDomainDesc": "Finish mailboxes and apply on the mail page later",
  "createServerIpv4": "Server IPv4",
  "createServerIpv4Hint": "For DNS / mail templates",
  "createServerIpv4Ph": "This host public IPv4",
  "createServerIpv6": "Server IPv6 (optional)",
  "createServerIpv6Ph": "Public IPv6 (optional)",
  "sshCardDesc": "Login keys decide who can enter;",
  "sshLoginKeys": "Login public keys allowed",
  "sshKeyCount": "{{count}} key(s)",
  "sshOutbound": "Outbound identity",
  "sshOutboundNone": "Not created",
  "sshOutboundCreated": "Outbound identity created (private key encrypted)",
  "sshCreateFailed": "Create failed",
  "sshWriteTried": "Tried writing to disk",
  "sshOutboundHint": "After create, this project user can use git/scripts outbound.",
  "sshCreateOutbound": "Create outbound identity",
  "sshWriteHome": "Write home/.ssh",
  "sshOpenWorkspace": "Open SSH workspace",
  "sshManageLoginKeys": "Manage login keys",
  "logsSectionDesc": "Scan logs/, log/ and extra dirs; search by name or content keyword",
  "logsNameSearch": "Filename search",
  "logsNameSearchHint": "Match relative path, e.g. error, app.out",
  "logsContentKw": "Content keyword",
  "logsContentKwHint": "Search file tails (not full-file)",
  "logsSearch": "Search",
  "logsRescan": "Rescan",
  "logsRefreshFile": "Refresh this file",
  "logsCopy": "Copy content",
  "logsDownloadTail": "Download tail",
  "logsCenter": "Log center",
  "logsHitsTitle": "{{count}} file(s) with hits — click to open tail (with keyword filter)",
  "logsLinesHit": "{{count}} line hit(s)",
  "logsFileCount": "Log files {{count}}",
  "logsNameFilter": "(name contains “{{q}}”)",
  "logsScanning": "Scanning logs…",
  "logsNoneYet": "No log files yet — appear after deploy/run; extra dirs also work.",
  "logsNoContent": "No content yet",
  "logsRelated": "Related sources",
  "logsRelatedDesc": "journal / nginx / PHP-FPM (see log center)",
  "logsAvailable": "Available",
  "logsMissing": "Missing",
  "logsOpenInCenter": "Open in log center",
  "logsExtraDirs": "Extra log directories",
  "logsExtraDirsDesc": "Paths relative to project home (besides logs/ and log/)",
  "logsDirList": "Directory list",
  "logsDirListHint": "One per line; home-relative paths only",
  "logsReset": "Reset",
  "logsSaveScan": "Save and scan",
  "logsDefaultNote": "Always scans logs/ and log/. Extra dirs only include *.log / *.out / *.err.",
  "resOsTitle": "System user isolation",
  "resOsDesc": "Each project has its own Linux user;",
  "resLinuxUser": "Linux user",
  "resOsIsolation": "OS isolation",
  "resOsReady": "Ready",
  "resOsNotCreated": "Not created (needs admin)",
  "resHomeDir": "Home directory",
  "resCanonical": "Intended path",
  "resUserMissing": "User missing",
  "resShellLive": "Live shell / lock",
  "resLocked": "Locked",
  "resUnlocked": "Unlocked",
  "resHomeMode": "home mode",
  "resHomeExists": "Exists · mode {{mode}}",
  "resHomeMissing": "Missing",
  "resIsolationOn": "Isolated",
  "resIsolationPending": "Pending isolation",
  "resOsHint": "Processes run as the project user",
  "resProvisionUser": "Create / repair system user",
  "resRefreshStatus": "Refresh status",
  "resFixHome": "Fix home ownership",
  "resMigrateHome": "Migrate to /home/ysk-server-…",
  "resQuotaDesc": "Soft quota (du before deploy) + hard enforce when setquota exists",
  "resQuotaHint": "e.g. 1024 = 1 GiB",
  "resSetSoftQuota": "Save soft quota",
  "resLimitsTitle": "Process and account limits",
  "resLimitsDesc": "systemd MemoryMax / CPUQuota / TasksMax / NOFILE + shell / lock",
  "resLimitsDescSystemd": "systemd cgroup: MemoryMax / CPUQuota / TasksMax / NOFILE + shell / lock",
  "resLimitsDescPm2": "PM2: memory maps to max_memory_restart; other limits use systemd.",
  "resRunnerSystemd": "Process manager: systemd",
  "resRunnerPm2": "Process manager: PM2",
  "resMemMax": "Memory max",
  "resMemHint": "e.g. 512M or 1G",
  "resMemHintSystemd": "systemd MemoryMax (cgroup hard cap, e.g. 512M or 1G)",
  "resMemHintPm2": "Writes ecosystem max_memory_restart (restart threshold, not cgroup kill);",
  "resFieldSystemdOnly": "systemd cgroup only; still saved to DB for when you switch back to systemd",
  "resCpuHint": "100 = one CPU",
  "resCustomPct": "Custom %",
  "resTasksHint": "Max tasks",
  "resNofileHint": "Open files limit",
  "resShellHint": "Default nologin",
  "resShellBashRisk": "bash · risk",
  "resLockAccount": "Lock Linux account",
  "resLockDesc": "usermod -L; uncheck to unlock",
  "resLimitsHint": "Save & apply writes DB and tries usermod / setquota / systemctl set-property",
  "resLimitsHintSystemd": "Save & apply writes panel state and OS/systemd limits when allowed.",
  "resLimitsHintPm2": "Save & apply writes panel state and PM2 memory limit.",
  "resSaveApply": "Save and apply limits to OS",
  "resSaveControlOnly": "Save Mem/CPU to control plane only",
  "resReapply": "Re-apply once (no form change)",
  "resMigrateDone": "Migration complete",
  "resMigrateIncomplete": "Migration incomplete",
  "resMigrateTitle": "Migrate system user home?",
  "resMigrateDesc": "Migrates to /home/ysk-server-{id} and creates/repairs the system user",
  "resMigrate": "Migrate",
  "resWrittenOnly": "Written to control plane; OS not applied (needs root). {{notes}}",
  "resAppliedOs": "Limits applied to OS. {{notes}}",
  "resSaved": "Saved",
  "resIncomplete": "Incomplete",
  "resApplyLimitsFailed": "Failed to apply limits",
  "resApplied": "Applied",
  "resApplyFailed": "Apply failed",
  "resChownOk": "chown complete",
  "resChownFailed": "chown failed",
  "netSavedPublished": "Network saved and Nginx published",
  "netSavedOnly": "Network settings saved (not published)",
  "netSaveFailed": "Save failed",
  "netSuspended": "Project suspended — visitors get 503. Unsuspend then publish.",
  "netDomainTitle": "Domain",
  "netDomainDesc": "Primary domain and aliases; save can also write Nginx management config",
  "netPrimaryDomain": "Primary domain",
  "netPrimaryHint": "Visitor domain, e.g. app.example.com",
  "netAliases": "Aliases",
  "netAliasesHint": "One per line, e.g. www or blog subdomain",
  "netNeedPrimary": "Enter primary domain first",
  "netHttpsTitle": "HTTPS and site redirect",
  "netHttpsDesc": "Publish Nginx after save. Full-site 301 overrides proxy/PHP/static content",
  "netForceHttps": "Force HTTPS",
  "netForceHttpsDesc": "HTTP → HTTPS (301); needs SSL cert and SSL publish",
  "netForceHttpsOn": "HTTP will redirect to HTTPS after you publish the edge.",
  "netForceHttpsOff": "No forced redirect is stored.",
  "netBoundCert": "Bound certificate",
  "netBoundCertExpiry": "expires {{at}}",
  "netNoBoundCert": "No certificate on disk for this hostname",
  "netForceHttpsNeedCert": "Issue a certificate on /ssl for this domain before forcing HTTPS.",
  "netHttpsLiveNotForced": "An edge file exists; HTTPS may already work. This box only forces HTTP→HTTPS.",
  "netHsts": "Enable HSTS",
  "netHstsDesc": "Browsers stick to HTTPS (recommended after force HTTPS)",
  "netHstsNeedHttps": "Turn on force HTTPS first",
  "netRedirectUrl": "Full-site redirect URL",
  "netRedirectHint": "Optional. Full-site 301 to this URL (move / apex→www)",
  "netBasicAuthTitle": "HTTP basic auth (browser login)",
  "netBasicAuthDesc": "Writes htpasswd on publish; empty username = off. Empty password = keep stored",
  "netAuthUserHint": "Empty disables auth",
  "netAuthPassHint": "Required first time; leave empty later to keep",
  "netAuthPassSet": "Set or update password",
  "netCacheNote": "Static/PHP static Cache-Control 7d by default; purge clears host nginx cache dir (needs YSK_EXECUTE)",
  "netPurgeOk": "Tried purge cache",
  "netPurgeFailed": "purge failed",
  "netDocrootTitle": "Site directory (docroot)",
  "netDocrootDesc": "Relative to project home; used as Nginx root on publish (default app/public)",
  "netDocrootLabel": "Document root",
  "netDocrootFull": "Full path: {{path}}",
  "netDocrootCustom": "Custom relative path…",
  "netAdvancedTitle": "Advanced & publish",
  "netAdvancedDesc": "Bind IP, publish to system Nginx",
  "netCollapseBind": "Collapse bind IP",
  "netExpandBind": "Expand bind IP",
  "netBindIp": "Bind IP",
  "netBindHint": "Empty = all interfaces",
  "netBindPh": "Empty = all; or bind IP",
  "netNeedDomainSave": "Enter and save primary domain first",
  "ovUsed": "Used",
  "ovQuota": "Quota",
  "ovQuotaUnset": "Unset",
  "ovQuotaStatus": "Quota status",
  "ovOverQuota": "Over quota",
  "ovQuotaOk": "OK",
  "ovDocroot": "Document root",
  "ovAccessSample": "Access sample",
  "ovLines": "{{count}} lines",
  "ovDailyDays": "Daily stats days",
  "ovDailyTitle": "Daily visit stats (max 60 days)",
  "ovDailyDesc": "Rolling from access log samples",
  "ovQuickTitle": "Site shortcuts",
  "ovQuickDesc": "Publish and backup (main deploy via header or Deploy tab)",
  "ovNeedNetworkDomain": "Set domain on Network tab first",
  "ovPublishNginx": "Publish Nginx",
  "ovPublishSsl": "Publish Nginx + SSL",
  "ovBackupProject": "Backup this project",
  "ovOpenFiles": "Open project files",
  "ovNoDomainHint": "No domain — set it on Network tab before publishing.",
  "ovPublishNote": "Publish writes management config; live Nginx reload needs system change rights.",
  "ovStatic": "Static",
  "ovAliases": "Aliases",
  "ovForceOn": "Forced",
  "ovForceOff": "Not forced",
  "advFtpCreated": "FTP {{user}} created (draft — apply on FTPS page)",
  "advCreateFailed": "Create failed",
  "advFtpFailed": "FTP create failed",
  "advMaintTitle": "Maintenance",
  "advMaintDesc": "Backup, suspend/resume, optional tools",
  "advBackupProject": "Backup this project",
  "advOneClickWp": "One-click WordPress (download + setup)",
  "advSuspendedHint": "Suspended: process stopped, visitors get 503.",
  "advSuspendHint": "Suspend stops the process and shows a 503 maintenance page.",
  "advFtpTitle": "Project FTP (path jail)",
  "advFtpDesc": "Account jailed to project app dir; apply on FTPS service page after create",
  "advFtpUserHint": "Optional; system can generate",
  "advFtpPassHint": "At least 8 characters",
  "advDangerTitle": "Danger zone",
  "advDangerDesc": "Delete cannot be undone from the UI — backup first.",
  "advDelete": "Delete project",
  "deployPyHint": "Default: venv + pip; ASGI via uvicorn, Django via gunicorn.",
  "deployGoHint": "Default: go build -o app . then ./app; skip build if binary exists.",
  "deployRustHint": "Default: cargo build --release then target/release/{crate}; skip build optional.",
  "deployNodeHint": "Start Node process (entry default server.js); systemd recommended in prod.",
  "deployDefaultHint": "Start by runtime; external only after apply.",
  "deployOsStep": "Isolated Linux user + /home/ysk-server-{project id} (Resources tab can create)",
  "deployPyReady": "Python runtime ready",
  "deployPipNet": "requirements.txt needs outbound pip",
  "deployCheckPort": "After deploy check port and /health",
  "deployPublishProxy": "Publish Nginx reverse proxy",
  "deployToolchainReady": "{{runtime}} toolchain ready",
  "deployFirstBuild": "First deploy builds (may take a while)",
  "deployNeedBinary": "Binary only after successful build",
  "deployPhpFpmOk": "PHP-FPM version OK",
  "deployPhpPool": "Deploy PHP / apply pool",
  "deployNginxSsl": "Publish Nginx + optional SSL",
  "deployPublicContent": "Confirm public/ has content",
  "deployNetPublish": "Publish Nginx on Network tab",
  "deployConfirmToolchain": "Confirm runtime page installed toolchain (or host has it)",
  "deployConfirmCode": "Confirm app/ has code (template or Git)",
  "deployPressDeploy": "Press Deploy; then publish Nginx on Network",
  "deployVersionSaved": "Saved {{runtime}} version {{version}} (used on deploy)",
  "deployVersionSaveFailed": "Failed to save runtime version",
  "deployInstallingToolchain": "Installing / confirming toolchain…",
  "deployToolchainIncomplete": "Toolchain install incomplete (permission or network); try Runtime page",
  "deployToolchainDone": "Toolchain step done, starting deploy…",
  "deployToolchainFailed": "Toolchain install failed",
  "deployChecklistTitle": "Created — deploy checklist",
  "deployChecklistDesc": "{{runtime}} skeleton ready; finish steps to serve traffic",
  "deploySectionTitle": "{{runtime}} deploy",
  "deploySectionDesc": "Start {{runtime}} process (port / systemd or pidfile)",
  "deployPhpVersion": "PHP version",
  "deployPhpVersionHint": "PHP version for this site (matching FPM must be installed)",
  "deployRuntimeVersion": "{{runtime}} version",
  "deployRuntimeVersionHint": "Saved on project; used on deploy. Install on Runtime page",
  "deployRuntimeVersionCreateHint": "Written at create; referenced on deploy",
  "deployRuntimeVersionGeneric": "Runtime version",
  "deployEntry": "Start entry",
  "deployEntryHint": "Empty = default ({{hint}}); synced to server",
  "deploySkipBuild": "Skip build",
  "deploySkipBuildHint": "If venv/binary exists; speeds restart (local preference)",
  "deployPort": "· port {{port}}",
  "deployFpmApplied": "PHP-FPM pool applied",
  "deployFpmIncomplete": "FPM incomplete",
  "deployFpmNote": "Writes site/pool config; live reload needs system change rights.",
  "deployBuildNote": "Build/start failures show in ops result. Entry writes to server; skip-build is local preference.",
  "deployPhpIniTitle": "Project php.ini overrides",
  "deployPhpIniDesc": "Only keys to change;",
  "deployPhpIniExample": "e.g. 256M; empty = global",
  "deployGlobal": "Global",
  "deployCustom": "Custom",
  "deployOff": "Off",
  "deployOnCareful": "On · careful",
  "deployPhpIniSaved": "Project php.ini overrides saved; deploy or apply FPM again",
  "deployHistory": "Deploy history ({{count}})",
  "deployHistoryDesc": "From audit; newest first",
  "deployGitUrlHint": "HTTPS or git@host:org/repo.git",
  "deployEnvHint": "One KEY=value per line; # comments",
  "resume": "Resume project",
  "suspend": "Suspend project",
  "goFtpsApply": "Go apply on FTPS service",
  "toolchainNote": "Installing toolchain ≠ project is live; deploy success ≠ public Nginx (publish on Network).",
  "installToolchainDeploy": "Install toolchain and deploy",
  "deployOnly": "Deploy only",
  "openRuntime": "Open {{runtime}} runtime",
  "later": "Later",
  "installToolchainDeployShort": "Toolchain + deploy",
  "runtimeEnv": "{{runtime}} env",
  "applyFpmPool": "Apply FPM pool",
  "staticNginxHint": "Static sites rely on Publish Nginx — use Network or Overview shortcuts.",
  "fullIniLink": "Full catalog and opcache/session etc. at",
  "phpIniLink": "PHP runtime → php.ini",
  "savePhpIniOverride": "Save php.ini overrides",
  "scaffoldNote": "If app/ is a YSK scaffold (.ysk-scaffold), it is cleared before clone; custom content refuses overwrite.",
  "saveOnly": "Save only",
  "savePublishNginx": "Save and publish Nginx",
  "needDomainToPublish": "Enter primary domain before publishing.",
  "savePublish": "Save and publish",
  "saveAuth": "Save auth",
  "cacheZoneNote": "Full FastCGI/proxy_cache zones need keys_zone in host nginx.conf; panel offers best-effort purge.",
  "purgeNginxCache": "Purge Nginx cache",
  "nginxManageFile": "Nginx management file: ",
  "publishRuntimeNote": "Publish writes proxy/PHP-FPM/static conf by runtime (auth, redirects, docroot)",
  "publishStored": "Publish with saved settings",
  "publishStoredSsl": "Publish saved + SSL",
  "publishNote": "Publish writes management conf; sync to /etc/nginx and reload needs system-change rights.",
  "hitsFiles": "{{count}} file(s) with hits — click to open tail (keyword filter)",
  "logFilesCount": "Log files {{count}}",
  "defaultScanNote": "Always scans logs/ and log/. Extra dirs only include *.log / *.out / *.err.",
  "opsOk": "{{label}} completed{{url}}",
  "opsOkWithNote": "{{label}} completed: {{note}}{{url}}",
  "opsFail": "{{label}} failed: {{reason}}",
  "railPython": "Python process",
  "railGo": "Go process",
  "railRust": "Rust process",
  "railNode": "Node process",
  "runtimeName": {
    "php": "PHP",
    "node": "Node.js",
    "static": "Static",
    "python": "Python",
    "go": "Go",
    "rust": "Rust",
    "java": "Java",
    "kotlin": "Kotlin",
    "bun": "Bun"
  },
  "netCacheTitle": "Cache",
  "logsDeepAccess": "Log center · access",
  "logsDeepError": "Log center · error",
  "logsDeepNginxUnit": "Nginx unit logs",
  "logsPresetAccess": "Filter access.log",
  "logsPresetError": "Filter error.log",
  "railJava": "Java process",
  "railKotlin": "Kotlin process",
  "railBun": "Bun process",
  "deployProcessManager": "Process manager",
  "deployProcessManagerSystemd": "systemd (recommended)",
  "deployProcessManagerPm2": "PM2",
  "proc_restart": "Restart",
  "proc_stop": "Stop",
  "proc_reload": "Reload",
  "procControlsHint": "Process controls ({{manager}})",
  "procActionOk": "{{action}} ok · {{notes}}",
  "procActionFail": "{{action}} failed · {{notes}}",
  "procActionFailShort": "Process action failed",
  "procMissingUser": "Project has no Linux user — cannot target PM2 app",
  "deploySystemdHint": "Production default: unit ysk-project-*",
  "deployPm2Hint": "Starts via pm2 (ecosystem",
  "deleteDialogTitle": "Permanently delete project",
  "deletePermanent": "Delete permanently",
  "deleteRemoveFiles": "Delete disk home and Linux user",
  "deleteTypeName": "Type the project name to confirm",
  "deletedOk": "Project deleted",
  "sslRequiredFirst": "No SSL certificate for this domain yet. Create or upload one under SSL Certificates before Publish + SSL.",
  "sslGateHint": "SSL actions locked — go to",
  "sslGateHint2": "to issue/upload a cert for this domain first.",
  "netPublishPrimary": "Basic",
  "netPublishSsl": "HTTPS / SSL",
  "netPublishMaint": "Maintenance",
  "sslNeedDomain": "Set a domain before publishing Nginx / SSL.",
  "createTemplateMissing": "{{v0}} ；「— —」。",
  "deleteDialogDesc": "This permanently deletes “{{name}}”. It cannot be undone.",
  "deleteWillStop": "systemd / PM2 /",
  "deleteWillWeb": "Nginx conf、PHP-FPM pool、Apache vhost（）",
  "deleteWillOs": "Linux home （）",
  "deleteKeepOs": "home Linux （）",
  "deleteWillDb": "…",
  "deleteRemoveFilesDesc": "Cancel，",
  "deleteTypeNameHint": "「{{name}}」",
  "deleteDnsWarn": "DNS zone / domain 。",
  "manageInNginx": "Manage in Nginx",
  "advFtpHomeApp": "Site app directory",
  "advFtpHomeRoot": "Project home (full)",
  "advFtpManage": "Open FTP page",
  "resShell": "Login shell",
  "resSaveHint": "Save and apply changes the live OS. Control-plane only stores the form. Re-apply uses the last saved values.",
  "resBashConfirmTitle": "Allow interactive bash?",
  "resBashConfirmDesc": "This grants an interactive login shell to the project user. Confirm only if you need SSH or PTY as that user.",
  "createGitHint": "Optional. Stored on the project; clone from the Deploy tab (does not clone on create).",
  "gitTokenLaterHint": "HTTPS token and clone depth are set on the project Deploy tab after create.",
  "gitBranch": "Branch",
  "gitBranchHint": "Pick a remote branch or tag.",
  "gitBranchAfterUrl": "Enter a Git URL first. Empty uses the remote default branch.",
  "gitLastRef": "Last sync: {{branch}} @ {{commit}}",
  "gitConfirmTitle": "Clone into this project?",
  "gitConfirmBody": "If app/ is still the Hello World placeholder it will be cleared, then cloned. Custom files that are not a YSK scaffold are refused.",
  "gitConfirmRemoteBody": "This points origin at the new URL and pulls. Unrelated histories fail; custom files are not wiped.",
  "runtimeActual": "Actual binary {{path}}",
  "runtimeFallback": "Chosen {{version}} is not on this host. Process uses {{path}}.",
  "gitSync": "Sync",
  "gitFetch": "Fetch",
  "gitCheckout": "Checkout",
  "gitReset": "Reset to remote",
  "gitResetNeedConfirm": "Needs confirmation — discards local commits",
  "gitDeepen": "Fetch full history",
  "gitLogTitle": "Recent commits",
  "gitDirtyTitle": "Local changes block pull",
  "gitDirtyBody": "{{count}} file(s) differ from Git (Files edits or the app). Discard them or abort.",
  "gitSyncBlockedDirty": "Sync is disabled until local changes are discarded (Reset) or the files match Git.",
  "gitViewDiff": "View diff",
  "gitDiscard": "Discard local files",
  "gitOpenFiles": "Open in Files",
  "gitNotCloned": "Not cloned",
  "gitClean": "Clean",
  "gitDirty": "Dirty",
  "gitBehind": "Behind {{count}}",
  "gitAhead": "Ahead {{count}}",
  "gitDetached": "Pinned",
  "gitShallow": "Shallow",
  "gitMissing": "git missing",
  "gitResetConfirmTitle": "Reset hard to remote?",
  "gitResetConfirmBody": "This discards local Git history and untracked files except .env, then restores .env from the control plane.",
  "gitHeads": "Remote branches",
  "gitToken": "HTTPS token",
  "gitTokenHint": "Encrypted at rest. Never stored in the remote URL.",
  "gitTokenPlaceholder": "ghp_… or glpat-…",
  "gitTokenSet": "Token set",
  "gitSaveToken": "Save token",
  "gitClearToken": "Clear token",
  "gitDeployKey": "Deploy public key",
  "gitDeployKeyHint": "Add this as a read-only deploy key on the Git host.",
  "gitDeployKeyOn": "Deploy key",
  "gitMakeKey": "Create deploy key",
  "gitCopyPub": "Copy public key",
  "gitClearKey": "Clear deploy key",
  "gitKeyCopied": "Public key copied",
  "gitPinHost": "Pin host key",
  "gitPinHostBody": "{{host}} is not pinned. Confirm the fingerprints, then pin before SSH clone.",
  "gitHostUnpinned": "Host key not pinned",
  "gitHookTitle": "Push hook",
  "gitHookHint": "Paste the URL into GitHub / Gitea / GitLab (push only). Not Slack.",
  "gitHookOn": "On",
  "gitHookOff": "Off",
  "gitHookEnable": "Enable",
  "gitHookRotate": "Rotate secret",
  "gitHookDisable": "Disable",
  "gitHookSecretOnce": "Copy this secret now — it will not be shown again.",
  "gitHookCopyUrl": "Copy",
  "gitHookCopySecret": "Copy secret",
  "gitHookCopied": "Copied",
  "gitHookSetup": "Payload URL = the URL above. Content type application/json. Events: push only. Secret = the one-time value.",
  "gitHookGithub": "Settings → Webhooks → Add webhook. Content type application/json. Events: Just the push event. GitHub.com needs HTTPS.",
  "gitHookGitea": "Settings → Webhooks → Add Webhook → Gitea. Method POST. Event: Push.",
  "gitHookGitlab": "Settings → Webhooks. Trigger: Push events. Secret token = hook secret (X-Gitlab-Token).",
  "gitHookHonesty": "Host unit needs YSK_EXECUTE=1 or the hook only returns a plan.",
  "gitHookSkipOther": "Other branches are ignored.",
  "gitAuthHttps": "HTTPS token",
  "gitAuthSsh": "SSH deploy key",
  "gitLoadRefs": "Load branches",
  "gitRefDefault": "Remote default",
  "gitRefBranches": "Branches",
  "gitRefTags": "Tags",
  "gitRefOther": "Other ref…",
  "gitRefCustom": "Commit or ref",
  "gitRefsNeedUrl": "Enter a URL first.",
  "gitRefsNeedAuth": "Save a token or deploy key, then load branches.",
  "gitRefsHint": "Loaded from the remote. Choose one — do not type.",
  "gitHookSetupToggle": "How to paste this",
  "gitHookOneLiner": "HMAC or X-YSK-Git-Hook. Only this project’s ref.",
  "gitHookExecuteHint": "Needs YSK_EXECUTE=1 to clone or deploy.",
  "gitShowKey": "Show key",
  "gitHideKey": "Hide",
  "gitBehindShort": "↓{{count}}",
  "gitAheadShort": "↑{{count}}",
  "gitDirtyShort": "Dirty · {{count}}",
  "gitFilesLink": "Files",
  "nameInvalid": "Use a lowercase name: start with a letter, then letters, digits, or hyphen (max 31).",
  "deployVersionMissing": "Node {{version}} is not installed on this host. Pick an installed version, or install this version first.",
  "deployUsedBinary": "Deploy used {{path}}"
}
