feat(frontend): align console IA with integrations sidebar

Add 对接与扩展 (IPSec, Feishu/OIDC, Plugins, Nodes), move identity
out of settings onto /identity, make sessions/logs tab-deep-linkable,
and rename ops audit / dial-in / admin labels to match the locked nav.
This commit is contained in:
Codex committed 2026-10-23 16:12:02 +08:00
1 parent 7f80f0f7ce
commit f01d3dc5ea
12 files changed
+584 -262

No files matched your search

+219 -56
View File
@@ -229,27 +229,34 @@
"title": "Feishu / OIDC browser authentication",
"externalService": "Requires openvpn-auth-oauth2",
"componentReady": "Authentication component installed v{version}",
"authEntryPending": "HTTPS is ready at {domain}; sync the authentication route in Settings → Feishu Identity after starting the tunnel.",
"authEntryPending": "HTTPS is ready at {domain}; sync the authentication route on the Feishu / OIDC Identity page after starting the tunnel.",
"app": "Create app",
"appShort": "Feishu developer console",
"identity": "Enter identity settings",
"identityShort": "OIDC and credentials",
"builtinIdentityShort": "Enter Feishu credentials in Settings",
"builtinIdentityShort": "Enter Feishu credentials on the Feishu / OIDC Identity page",
"callback": "Set public callback",
"callbackShort": "HTTPS reverse proxy",
"test": "Test client",
"testShort": "Browser sign-in",
"appTip": "Ask a Feishu administrator to create and publish an app with the appropriate sign-in capability.",
"builtinAppTip": "Manage Feishu App ID and App Secret in Settings → Feishu Identity, not in each tunnel.",
"builtinAppTip": "Manage Feishu App ID and App Secret on the Feishu / OIDC Identity page, not in each tunnel.",
"openConsole": "Open Feishu app console",
"appInstruction1": "Create an enterprise app, obtain its credentials, and enable the web sign-in capability.",
"appInstruction2": "Register a redirect URL under the app's security/redirect settings. If using a broker, use the broker's upstream callback here.",
"builtinAppInstruction2": "Register the Feishu app callback shown below in the app's redirect settings, not the VPN client callback.",
"appInstruction3": "Publish the app and restrict its available users to people allowed to access this VPN.",
"scopeTip": "Restrict who can use the Feishu app. LDAP dial-in users are not automatically linked to Feishu identities.",
"providerTip": "Use the built-in Feishu issuer configured in Settings, or provide an external issuer with OIDC discovery and ID tokens. A Feishu app URL alone is not an issuer.",
"source": "Identity source", "builtinSource": "Built-in Feishu", "externalSource": "External OIDC", "configureBuiltIn": "The built-in Feishu issuer is not enabled. Save app credentials and enable it in Settings first.", "manageFeishu": "Open Settings → Feishu Identity", "builtinSummary": "The Feishu App ID, App Secret, and tenant are managed in Settings; this tunnel references the issuer and its own public authentication entry.",
"useBuiltIn": "Use built-in Feishu issuer", "builtInSecret": "The server supplies the VPN Client Secret. Do not enter the Feishu App Secret here.", "builtInGatewayPending": "The public Nginx route for the built-in issuer is pending; sync it in Settings before testing.",
"providerTip": "Use the built-in Feishu issuer configured on the Feishu / OIDC Identity page, or provide an external issuer with OIDC discovery and ID tokens. A Feishu app URL alone is not an issuer.",
"source": "Identity source",
"builtinSource": "Built-in Feishu",
"externalSource": "External OIDC",
"configureBuiltIn": "The built-in Feishu issuer is not enabled. Save app credentials and enable it on the Feishu / OIDC Identity page first.",
"manageFeishu": "Open Feishu / OIDC Identity",
"builtinSummary": "The Feishu App ID, App Secret, and tenant are managed on the Feishu / OIDC Identity page; this tunnel references the issuer and its own public authentication entry.",
"useBuiltIn": "Use built-in Feishu issuer",
"builtInSecret": "The server supplies the VPN Client Secret. Do not enter the Feishu App Secret here.",
"builtInGatewayPending": "The public Nginx route for the built-in issuer is pending; sync it on the Feishu / OIDC Identity page before testing.",
"issuer": "OIDC issuer URL",
"issuerTip": "Use an HTTPS issuer that provides standard discovery (/.well-known/openid-configuration) and ID tokens, not an authorization page URL.",
"clientId": "OIDC Client ID",
@@ -260,14 +267,17 @@
"secretTip": "Encrypted server-side and stored only in the auth service's 0600 configuration file.",
"baseUrl": "Public sign-in URL",
"baseTip": "Automatic filling reuses the domain and certificate only. The management site does not yet proxy OAuth2 paths to the auth component. Sign-in needs that Nginx route. Recheck saved tunnel callbacks if the domain changes.",
"builtinBaseTip": "Uses the system HTTPS domain automatically. The auth component listens locally; sync public routes in Settings after starting the tunnel.",
"reuseDomain": "Use current public domain", "linkedDomain": "Using the HTTPS domain from system settings; you can edit it.",
"builtinBaseTip": "Uses the system HTTPS domain automatically. The auth component listens locally; sync public routes on the Feishu / OIDC Identity page after starting the tunnel.",
"reuseDomain": "Use current public domain",
"linkedDomain": "Using the HTTPS domain from system settings; you can edit it.",
"listenPort": "Local auth service port",
"portTip": "Listens only on 127.0.0.1; no public access needed. New tunnels increment from 19090; +/- and manual entry skip configured and locally occupied ports.",
"portLookupFailed": "Could not find an available port. Retry or enter one manually.",
"callbackTitle": "Register this callback with the final OIDC provider",
"callbackTip": "With an identity broker, register this URL in the broker's OIDC client, and register the broker's upstream callback in Feishu. Reverse proxy the public endpoint to 127.0.0.1:{port}; :18080 does not handle this callback.",
"builtinCallbackTitle": "The VPN client and Feishu app use different callbacks", "builtinCallbackTip": "The VPN client callback above is handled by openvpn-auth-oauth2. Register only the Feishu app callback below in Feishu. After starting the tunnel, sync /oauth2/ to local port 127.0.0.1:{port} in Settings.", "feishuCallbackLabel": "Feishu app callback",
"builtinCallbackTitle": "The VPN client and Feishu app use different callbacks",
"builtinCallbackTip": "The VPN client callback above is handled by openvpn-auth-oauth2. Register only the Feishu app callback below in Feishu. After starting the tunnel, sync /oauth2/ to local port 127.0.0.1:{port} on the Feishu / OIDC Identity page.",
"feishuCallbackLabel": "Feishu app callback",
"testTip": "Install openvpn-auth-oauth2 and OpenVPN ≥ 2.6.2, then test with a WebAuth-capable client (e.g. OpenVPN Community for Windows or Tunnelblick/Viscosity for macOS). OpenVPN Connect v3 needs individual testing.",
"startFailed": "Configuration generated, but the tunnel did not start. Resolve the error below and retry from the tunnel list.",
"fillRequired": "Configure an identity source, OIDC issuer, VPN client credentials, and public sign-in URL"
@@ -349,8 +359,8 @@
"installFailed": "Failed to install {protocol}"
},
"users": {
"title": "User Management",
"clientLoginHint": "These accounts sign in to the admin console. Desktop VPN clients use VPN dial-in users assigned to a WireGuard line.",
"title": "Admins",
"clientLoginHint": "These accounts sign in to the admin console. Desktop VPN clients use dial-in accounts assigned to a WireGuard line.",
"batchImport": "Batch Import",
"ldapImport": "LDAP Import",
"addUser": "Add User",
@@ -428,7 +438,7 @@
"empty": "No client devices registered"
},
"vpnUsers": {
"title": "VPN Dial-in Users",
"title": "Dial-in Accounts",
"mfaHint": "OpenVPN Two-Factor Auth (TOTP / Static Challenge / PIN+OTP)",
"addUser": "Add User",
"bulkImport": "Bulk Import",
@@ -454,7 +464,7 @@
"lastOnline": "Last Online",
"downloadConfig": "Download Config",
"otpManagement": "OTP Management",
"addVpnUserTitle": "Add VPN Dial-in User",
"addVpnUserTitle": "Add Dial-in Account",
"dialTunnel": "Dial-in Tunnel",
"pickFromUsers": "Pick from Users",
"displayNameLabel": "Display Name",
@@ -576,18 +586,65 @@
"noAlerts": "No traffic alerts"
},
"identity": {
"tab": "Feishu identity", "title": "Built-in Feishu identity service", "description": "Issue OIDC identities for VPN using your existing HTTPS domain. Feishu app credentials stay upstream; this platform creates separate VPN client credentials.",
"guideTitle": "Feishu app setup", "guideApp": "Enter the enterprise app ID and secret; grant the three scopes below as needed.", "guidePermission": "", "guidePublish": "Publish the app and include VPN users in its availability scope.", "guideCallback": "Security Settings → Redirect URL:", "guideCallbackPending": "Configure an HTTPS domain first.", "guideVerify": "", "guideManual": "", "guideScope": "",
"tenantPermission": "tenant:tenant:readonly · enterprise lookup", "userPermission": "contact:user.base:readonly · browser sign-in", "basicProfilePermission": "contact:user.basic_profile:readonly · name lookup by open_id (app identity)", "permissionSteps": "Grant the app identity scope and publish the app; after a member signs in, check their name below.", "openFeishuPermission": "Open Feishu permissions ↗", "checkNamePending": "Check name below", "checking": "Checking", "checked": "Verified", "checkFailed": "Check failed", "checkPending": "Not checked", "checkedByLogin": "Login verified", "loginPending": "Verify on first login",
"appId": "Feishu App ID", "appSecret": "Feishu App Secret", "secretPlaceholder": "Leave blank if saved; enter a new secret to rotate", "tenant": "Allowed Feishu tenant_key", "tenantPlaceholder": "Fetched automatically or enter manually", "fetchTenant": "Check again", "fetchingTenant": "Checking ({seconds}s)…", "tenantFetched": "Enterprise permission verified", "tenantFailed": "Enterprise permission check failed", "tenantNotEnabled": "", "enabled": "Enable built-in issuer", "httpsOnly": "Use HTTPS to enter app credentials.", "openHttps": "Open HTTPS management site",
"httpsRequired": "Configure and activate your public HTTPS site and certificate first.", "gatewayPending": "The identity provider is saved but Nginx does not yet route /id/; sync the gateway.",
"addresses": "Addresses and client credentials", "issuer": "OIDC issuer", "feishuCallback": "Callback registered in Feishu", "vpnCallback": "VPN client callback", "clientId": "VPN Client ID",
"oneTimeSecret": "New VPN Client Secret is displayed only once. Store it safely; rotation of active tunnel credentials requires separate planning.", "routeHint": "Sync identity routes first. After starting the one OpenVPN OIDC tunnel using this domain, sync again to route /oauth2/ to its local auth component.",
"syncGateway": "Sync identity gateway", "gatewaySynced": "Gateway routes updated", "gatewayFailed": "Gateway update failed", "loadFailed": "Could not load identity settings", "saved": "Identity settings saved", "saveFailed": "Could not save identity settings"
"tab": "Feishu identity",
"title": "Built-in Feishu identity service",
"description": "Issue OIDC identities for VPN using your existing HTTPS domain. Feishu app credentials stay upstream; this platform creates separate VPN client credentials.",
"guideTitle": "Feishu app setup",
"guideApp": "Enter the enterprise app ID and secret; grant the three scopes below as needed.",
"guidePermission": "",
"guidePublish": "Publish the app and include VPN users in its availability scope.",
"guideCallback": "Security Settings → Redirect URL:",
"guideCallbackPending": "Configure an HTTPS domain first.",
"guideVerify": "",
"guideManual": "",
"guideScope": "",
"tenantPermission": "tenant:tenant:readonly · enterprise lookup",
"userPermission": "contact:user.base:readonly · browser sign-in",
"basicProfilePermission": "contact:user.basic_profile:readonly · name lookup by open_id (app identity)",
"permissionSteps": "Grant the app identity scope and publish the app; after a member signs in, check their name below.",
"openFeishuPermission": "Open Feishu permissions ↗",
"checkNamePending": "Check name below",
"checking": "Checking",
"checked": "Verified",
"checkFailed": "Check failed",
"checkPending": "Not checked",
"checkedByLogin": "Login verified",
"loginPending": "Verify on first login",
"appId": "Feishu App ID",
"appSecret": "Feishu App Secret",
"secretPlaceholder": "Leave blank if saved; enter a new secret to rotate",
"tenant": "Allowed Feishu tenant_key",
"tenantPlaceholder": "Fetched automatically or enter manually",
"fetchTenant": "Check again",
"fetchingTenant": "Checking ({seconds}s)…",
"tenantFetched": "Enterprise permission verified",
"tenantFailed": "Enterprise permission check failed",
"tenantNotEnabled": "",
"enabled": "Enable built-in issuer",
"httpsOnly": "Use HTTPS to enter app credentials.",
"openHttps": "Open HTTPS management site",
"httpsRequired": "Configure and activate your public HTTPS site and certificate first.",
"gatewayPending": "The identity provider is saved but Nginx does not yet route /id/; sync the gateway.",
"addresses": "Addresses and client credentials",
"issuer": "OIDC issuer",
"feishuCallback": "Callback registered in Feishu",
"vpnCallback": "VPN client callback",
"clientId": "VPN Client ID",
"oneTimeSecret": "New VPN Client Secret is displayed only once. Store it safely; rotation of active tunnel credentials requires separate planning.",
"routeHint": "Sync identity routes first. After starting the one OpenVPN OIDC tunnel using this domain, sync again to route /oauth2/ to its local auth component.",
"syncGateway": "Sync identity gateway",
"gatewaySynced": "Gateway routes updated",
"gatewayFailed": "Gateway update failed",
"loadFailed": "Could not load identity settings",
"saved": "Identity settings saved",
"saveFailed": "Could not save identity settings",
"pageDescription": "Configure Feishu or OIDC identity (app credentials, tenant, callbacks, and directory sync). Per-tunnel admission stays on the tunnel editor."
},
"settings": {
"pageDescription": "Manage account security, the public gateway, and server setup.",
"securityTab": "Account Security", "gatewayTab": "Public Gateway", "hostTab": "Server Setup",
"securityTab": "Account Security",
"gatewayTab": "Public Gateway",
"hostTab": "Server Setup",
"mustChangePassword": "First login or password has been reset by admin. You must change your password before using other features.",
"changePassword": "Change Password",
"oldPassword": "Current Password",
@@ -615,7 +672,7 @@
"prodSuggestion": "Production Tip",
"prodSuggestionDesc": "Expose via Nginx/Caddy reverse proxy with TLS termination",
"auditTitle": "Audit Log (Latest 100)",
"auditMigrated": "Audit logs have been moved to Log Center with pagination, filtering, and CSV export",
"auditMigrated": "Audit logs have been moved to Operation Audit with pagination, filtering, and CSV export",
"noAuditLogs": "No audit logs yet",
"mfaEnabledTitle": "MFA Enabled — Please Save Backup Codes",
"backupCodesHint": "These backup codes are shown only once. Use them to log in if you lose your phone. Copy and save them now!",
@@ -636,10 +693,12 @@
"strengthWeak": "Weak",
"strengthFair": "Fair",
"strengthStrong": "Strong",
"strengthVeryStrong": "Very Strong"
"strengthVeryStrong": "Very Strong",
"identityMovedHint": "Feishu / OIDC platform settings moved to a dedicated sidebar page; they are no longer configured here.",
"identityMovedLink": "Open Feishu / OIDC Identity"
},
"plugins": {
"title": "Custom Protocol Plugins",
"title": "Custom Protocol Plugins (Preview)",
"registerPlugin": "Register Plugin",
"commandHooks": "command hooks",
"pluginHint": "Plugins implement the unified protocol contract via {hooks}: the platform pipes tunnel config JSON to hook commands via stdin.",
@@ -653,10 +712,11 @@
"protocolIdPlaceholder": "e.g., myproto (alphanumeric)",
"displayName": "Display Name",
"optional": "Optional",
"protocolIdRequired": "Protocol ID and Start hook are required"
"protocolIdRequired": "Protocol ID and Start hook are required",
"soonHint": "Protocol plugins are an early preview; contracts and stability are still evolving."
},
"nodes": {
"title": "Node Management",
"title": "Node Management (Preview)",
"addNode": "Add Node",
"nodeHint": "Nodes are used to deploy tunnels to relay servers. The local node is the built-in default; remote nodes support SSH credential verification (password/private key). Verified nodes show \"Verified\" status.",
"type": "Type",
@@ -691,7 +751,8 @@
"updated": "Updated",
"verifySuccess": "Verification successful: {msg}",
"verifyFailed": "Verification failed: {msg}",
"deleteNodeConfirm": "Delete node \"{name}\"? This action cannot be undone."
"deleteNodeConfirm": "Delete node \"{name}\"? This action cannot be undone.",
"soonHint": "Node management is an early multi-relay entry point; use with caution in production."
},
"notFound": {
"title": "404",
@@ -760,20 +821,26 @@
"createTunnel": "Create Tunnel",
"editTunnel": "Edit Tunnel",
"ipsecPeer": "IPSec Peer Test",
"nodes": "Nodes",
"users": "Users",
"vpnUsers": "VPN Dial-in Users",
"nodes": "Nodes (Preview)",
"users": "Admins",
"vpnUsers": "Dial-in Accounts",
"clientDevices": "Client Devices",
"plugins": "Protocol Plugins",
"plugins": "Protocol Plugins (Preview)",
"settings": "Settings",
"logs": "Log Center",
"logs": "Operation Audit",
"notFound": "Page Not Found",
"sidebarOps": "Tunnel Ops",
"sidebarOps": "Tunnels",
"sidebarResource": "Identity & Devices",
"sidebarSystem": "System",
"sidebarWorkspace": "Workspace", "console": "Admin Console",
"navigation": "Main navigation", "openNavigation": "Open navigation", "closeNavigation": "Close navigation",
"collapseNavigation": "Collapse sidebar", "expandNavigation": "Expand sidebar"
"sidebarWorkspace": "Workspace",
"console": "Admin Console",
"navigation": "Main navigation",
"openNavigation": "Open navigation",
"closeNavigation": "Close navigation",
"collapseNavigation": "Collapse sidebar",
"expandNavigation": "Expand sidebar",
"identityAccess": "Feishu / OIDC Identity",
"sidebarIntegration": "Integrations"
},
"protocolIcon": {
"custom": "Custom Protocol"
@@ -781,20 +848,93 @@
"tls": {
"title": "Domain & certificate",
"description": "Configure a public domain and use Nginx / Certbot for HTTP-01 issuance and renewal.",
"domain": "Configured domain", "activeDomain": "Active domain", "saveDomain": "Save domain", "restartRequired": "Domain saved; restart OpsX VPN to enable ports 80/443 and automatic issuance", "saveFailed": "Could not save domain", "dns": "DNS", "certificate": "Certificate", "valid": "Valid", "pending": "Pending first HTTPS handshake",
"notConfigured": "Disabled", "saved": "Domain configuration saved", "issuer": "Issuer", "expires": "Expires", "renewal": "Renewal", "automatic": "Automatic (autocert)",
"ports": "HTTP / HTTPS ports", "externalPorts": "Managed by external Nginx; listener status not checked", "setupHint": "Restart to apply a saved domain or mode. Before switching to Nginx, follow the deployment guide to install it, issue a certificate, and validate the configuration. Go mode caches certificates in data/acme; saving settings alone does not issue a certificate.",
"refresh": "Refresh status", "openHttps": "Open HTTPS health check", "loadFailed": "Could not load certificate status",
"mode": "Public entry mode", "goMode": "Go automatic certificate (binds 80/443)", "nginxMode": "Nginx proxy (external 80/443)", "saveMode": "Save entry mode",
"domain": "Configured domain",
"activeDomain": "Active domain",
"saveDomain": "Save domain",
"restartRequired": "Domain saved; restart OpsX VPN to enable ports 80/443 and automatic issuance",
"saveFailed": "Could not save domain",
"dns": "DNS",
"certificate": "Certificate",
"valid": "Valid",
"pending": "Pending first HTTPS handshake",
"notConfigured": "Disabled",
"saved": "Domain configuration saved",
"issuer": "Issuer",
"expires": "Expires",
"renewal": "Renewal",
"automatic": "Automatic (autocert)",
"ports": "HTTP / HTTPS ports",
"externalPorts": "Managed by external Nginx; listener status not checked",
"setupHint": "Restart to apply a saved domain or mode. Before switching to Nginx, follow the deployment guide to install it, issue a certificate, and validate the configuration. Go mode caches certificates in data/acme; saving settings alone does not issue a certificate.",
"refresh": "Refresh status",
"openHttps": "Open HTTPS health check",
"loadFailed": "Could not load certificate status",
"mode": "Public entry mode",
"goMode": "Go automatic certificate (binds 80/443)",
"nginxMode": "Nginx proxy (external 80/443)",
"saveMode": "Save entry mode",
"nginxHint": "Save the Nginx mode and domain, restart the service, then enable the site and request a certificate. Public ports 80/443 must be open.",
"externalRenewal": "Managed by Certbot", "previewNginx": "Preview Nginx configuration", "previewOnly": "Configuration preview; HTTP handles issuance and HTTPS starts after the certificate exists.", "httpSite": "HTTP-01 site", "httpsSite": "HTTPS management site",
"siteStage": "Site stage", "stage_none": "Inactive", "stage_http": "HTTP-01 ready; certificate pending", "stage_https": "HTTPS configuration enabled", "activateSite": "Enable site and issue certificate", "activateHint": "Checks existing sites and ports first. Certbot registration uses no email address, so renewal failures cannot be reported by email.", "siteReady": "HTTPS site and certificate are ready", "siteFailed": "Gateway or certificate setup failed; see output",
"externalRenewal": "Managed by Certbot",
"previewNginx": "Preview Nginx configuration",
"previewOnly": "Configuration preview; HTTP handles issuance and HTTPS starts after the certificate exists.",
"httpSite": "HTTP-01 site",
"httpsSite": "HTTPS management site",
"siteStage": "Site stage",
"stage_none": "Inactive",
"stage_http": "HTTP-01 ready; certificate pending",
"stage_https": "HTTPS configuration enabled",
"activateSite": "Enable site and issue certificate",
"activateHint": "Checks existing sites and ports first. Certbot registration uses no email address, so renewal failures cannot be reported by email.",
"siteReady": "HTTPS site and certificate are ready",
"siteFailed": "Gateway or certificate setup failed; see output",
"directPortWarning": "The management service still listens publicly on port 18080, bypassing Nginx path rules. Migrate clients using the old HTTP address, then bind the service to 127.0.0.1:18080.",
"setupTitle": "Optional HTTPS public gateway", "setupStepCheck": "Detect system", "setupStepInstall": "Install dependencies", "setupStepConfigure": "Configure gateway and certificate", "detectedSystem": "Server OS", "setupUnsupported": "Automatic setup requires root on Ubuntu or TencentOS Server 4", "setupScope": "Use only if you choose the Nginx gateway. Installs Nginx / Certbot and prepares the validation directory. It does not install VPN protocol dependencies, enable ports, or issue certificates.", "setupButton": "Prepare Nginx / Certbot", "setupComplete": "Dependencies are ready; configure the site and certificate next", "setupFailed": "Initialization failed; inspect the output", "setupInterrupted": "Log connection interrupted; refresh status. Installation may still be running on the server",
"commonSetupTitle": "First-time shared network setup", "commonSetupHint": "Check permissions, default route and IPv4 forwarding. Enable shared forwarding only when needed; install protocol-specific dependencies separately in Create Tunnel.", "hostRoot": "Privileges", "hostRoute": "Default route", "hostForward": "IPv4 forwarding", "enableForwarding": "Enable IPv4 forwarding", "forwardingEnabled": "IPv4 forwarding enabled"
"setupTitle": "Optional HTTPS public gateway",
"setupStepCheck": "Detect system",
"setupStepInstall": "Install dependencies",
"setupStepConfigure": "Configure gateway and certificate",
"detectedSystem": "Server OS",
"setupUnsupported": "Automatic setup requires root on Ubuntu or TencentOS Server 4",
"setupScope": "Use only if you choose the Nginx gateway. Installs Nginx / Certbot and prepares the validation directory. It does not install VPN protocol dependencies, enable ports, or issue certificates.",
"setupButton": "Prepare Nginx / Certbot",
"setupComplete": "Dependencies are ready; configure the site and certificate next",
"setupFailed": "Initialization failed; inspect the output",
"setupInterrupted": "Log connection interrupted; refresh status. Installation may still be running on the server",
"commonSetupTitle": "First-time shared network setup",
"commonSetupHint": "Check permissions, default route and IPv4 forwarding. Enable shared forwarding only when needed; install protocol-specific dependencies separately in Create Tunnel.",
"hostRoot": "Privileges",
"hostRoute": "Default route",
"hostForward": "IPv4 forwarding",
"enableForwarding": "Enable IPv4 forwarding",
"forwardingEnabled": "IPv4 forwarding enabled"
},
"feishuSync": {
"title": "Feishu directory", "publishAll": "Publish the Feishu app, set availability to All Employees, and include departments in directory visibility.", "hint": "Sync manually or every 30 minutes; imports do not grant VPN access.", "permissions": "Grant department and user-list access; Feishu error codes show missing permissions.", "liveCheck": "Access check", "recheck": "Check again", "checking": "Checking…", "checkFailed": "Access check failed", "liveVisibility": "App visibility: {departments} departments · {users} individual users (not the enterprise total)", "scopeMissing": "Departments are not visible. Check department access and directory scope, then publish.", "permissionMissing": "Departments: {department}; users: {users}. Grant scopes indicated by the error codes.", "apiReady": "Endpoints work. Confirm publication and All Employees in Feishu.", "ok": "Available", "auto": "Auto sync (30 min)", "run": "Sync now", "lastSuccess": "Last success", "counts": "Departments {departments} · members {members}", "visibility": "Last scope: {departments} departments · {users} individual users", "noDepartments": "Departments are not visible yet. Check the app's access and directory scope.", "numberName": "Feishu still returns a 'User + number' name. Sync saved that value; if you just renamed them, check app visibility and retry later.", "name": "Name", "departments": "Department IDs", "firstMembers": "Showing the first 500 members", "saved": "Sync settings saved", "started": "Sync started", "done": "Directory sync complete", "failed": "Directory sync failed"
"title": "Feishu directory",
"publishAll": "Publish the Feishu app, set availability to All Employees, and include departments in directory visibility.",
"hint": "Sync manually or every 30 minutes; imports do not grant VPN access.",
"permissions": "Grant department and user-list access; Feishu error codes show missing permissions.",
"liveCheck": "Access check",
"recheck": "Check again",
"checking": "Checking…",
"checkFailed": "Access check failed",
"liveVisibility": "App visibility: {departments} departments · {users} individual users (not the enterprise total)",
"scopeMissing": "Departments are not visible. Check department access and directory scope, then publish.",
"permissionMissing": "Departments: {department}; users: {users}. Grant scopes indicated by the error codes.",
"apiReady": "Endpoints work. Confirm publication and All Employees in Feishu.",
"ok": "Available",
"auto": "Auto sync (30 min)",
"run": "Sync now",
"lastSuccess": "Last success",
"counts": "Departments {departments} · members {members}",
"visibility": "Last scope: {departments} departments · {users} individual users",
"noDepartments": "Departments are not visible yet. Check the app's access and directory scope.",
"numberName": "Feishu still returns a 'User + number' name. Sync saved that value; if you just renamed them, check app visibility and retry later.",
"name": "Name",
"departments": "Department IDs",
"firstMembers": "Showing the first 500 members",
"saved": "Sync settings saved",
"started": "Sync started",
"done": "Directory sync complete",
"failed": "Directory sync failed"
},
"feishuDirectory": {
"title": "Feishu directory lookup",
@@ -1000,15 +1140,38 @@
"desc": "Standard IP protocol 47 tunnel for point-to-point Layer 3 connectivity between Linux, routers, and firewalls",
"scenes": "Network Device Interconnect / Site-to-Site Routing",
"fields": {
"local_endpoint": { "label": "Local Public IP" },
"remote_endpoint": { "label": "Remote Public IP" },
"local_tunnel_ip": { "label": "Local Tunnel IP", "tip": "Use a /30, for example 10.255.0.1/30" },
"remote_tunnel_ip": { "label": "Remote Tunnel IP", "tip": "Must share the local tunnel IP subnet" },
"remote_subnet": { "label": "Remote LAN Subnet", "tip": "Adds a static route through the GRE peer" },
"enable_nat": { "label": "NAT Remote Traffic", "tip": "Enable only when the remote subnet needs Internet egress via this host" },
"outbound_interface": { "label": "NAT Egress Interface" },
"ttl": { "label": "TTL" },
"mtu": { "label": "GRE MTU", "tip": "1476 is typical over public Internet GRE; lower it for additional encapsulation" }
"local_endpoint": {
"label": "Local Public IP"
},
"remote_endpoint": {
"label": "Remote Public IP"
},
"local_tunnel_ip": {
"label": "Local Tunnel IP",
"tip": "Use a /30, for example 10.255.0.1/30"
},
"remote_tunnel_ip": {
"label": "Remote Tunnel IP",
"tip": "Must share the local tunnel IP subnet"
},
"remote_subnet": {
"label": "Remote LAN Subnet",
"tip": "Adds a static route through the GRE peer"
},
"enable_nat": {
"label": "NAT Remote Traffic",
"tip": "Enable only when the remote subnet needs Internet egress via this host"
},
"outbound_interface": {
"label": "NAT Egress Interface"
},
"ttl": {
"label": "TTL"
},
"mtu": {
"label": "GRE MTU",
"tip": "1476 is typical over public Internet GRE; lower it for additional encapsulation"
}
}
},
"frp": {