mirror of
https://github.com/fosrl/pangolin.git
synced 2026-01-29 06:10:47 +00:00
changes to wording
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"setupCreate": "Create your organization, site, and resources",
|
||||
"setupCreate": "Create the organization, site, and resources",
|
||||
"setupNewOrg": "New Organization",
|
||||
"setupCreateOrg": "Create Organization",
|
||||
"setupCreateResources": "Create Resources",
|
||||
"setupOrgName": "Organization Name",
|
||||
"orgDisplayName": "This is the display name of your organization.",
|
||||
"orgDisplayName": "This is the display name of the organization.",
|
||||
"orgId": "Organization ID",
|
||||
"setupIdentifierMessage": "This is the unique identifier for your organization.",
|
||||
"setupIdentifierMessage": "This is the unique identifier for the organization.",
|
||||
"setupErrorIdentifier": "Organization ID is already taken. Please choose a different one.",
|
||||
"componentsErrorNoMemberCreate": "You are not currently a member of any organizations. Create an organization to get started.",
|
||||
"componentsErrorNoMember": "You are not currently a member of any organizations.",
|
||||
@@ -50,10 +50,10 @@
|
||||
"siteMessageRemove": "Once removed the site will no longer be accessible. All targets associated with the site will also be removed.",
|
||||
"siteQuestionRemove": "Are you sure you want to remove the site from the organization?",
|
||||
"siteManageSites": "Manage Sites",
|
||||
"siteDescription": "Allow connectivity to your network through secure tunnels",
|
||||
"siteDescription": "Create and manage sites to enable connectivity to private networks",
|
||||
"siteCreate": "Create Site",
|
||||
"siteCreateDescription2": "Follow the steps below to create and connect a new site",
|
||||
"siteCreateDescription": "Create a new site to start connecting your resources",
|
||||
"siteCreateDescription": "Create a new site to start connecting resources",
|
||||
"close": "Close",
|
||||
"siteErrorCreate": "Error creating site",
|
||||
"siteErrorCreateKeyPair": "Key pair or site defaults not found",
|
||||
@@ -74,7 +74,7 @@
|
||||
"siteInstallNewt": "Install Newt",
|
||||
"siteInstallNewtDescription": "Get Newt running on your system",
|
||||
"WgConfiguration": "WireGuard Configuration",
|
||||
"WgConfigurationDescription": "Use the following configuration to connect to your network",
|
||||
"WgConfigurationDescription": "Use the following configuration to connect to the network",
|
||||
"operatingSystem": "Operating System",
|
||||
"commands": "Commands",
|
||||
"recommended": "Recommended",
|
||||
@@ -87,32 +87,32 @@
|
||||
"siteUpdated": "Site updated",
|
||||
"siteUpdatedDescription": "The site has been updated.",
|
||||
"siteGeneralDescription": "Configure the general settings for this site",
|
||||
"siteSettingDescription": "Configure the settings on your site",
|
||||
"siteSettingDescription": "Configure the settings on the site",
|
||||
"siteSetting": "{siteName} Settings",
|
||||
"siteNewtTunnel": "Newt Tunnel (Recommended)",
|
||||
"siteNewtTunnelDescription": "Easiest way to create an entrypoint into your network. No extra setup.",
|
||||
"siteNewtTunnelDescription": "Easiest way to create an entrypoint into any network. No extra setup.",
|
||||
"siteWg": "Basic WireGuard",
|
||||
"siteWgDescription": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.",
|
||||
"siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.",
|
||||
"siteLocalDescription": "Local resources only. No tunneling.",
|
||||
"siteLocalDescriptionSaas": "Local resources only. No tunneling. Only available on remote nodes.",
|
||||
"siteSeeAll": "See All Sites",
|
||||
"siteTunnelDescription": "Determine how you want to connect to your site",
|
||||
"siteTunnelDescription": "Determine how you want to connect to the site",
|
||||
"siteNewtCredentials": "Credentials",
|
||||
"siteNewtCredentialsDescription": "This is how the site will authenticate with the server",
|
||||
"siteCredentialsSave": "Save Your Credentials",
|
||||
"siteCredentialsSave": "Save the Credentials",
|
||||
"siteCredentialsSaveDescription": "You will only be able to see this once. Make sure to copy it to a secure place.",
|
||||
"siteInfo": "Site Information",
|
||||
"status": "Status",
|
||||
"shareTitle": "Manage Share Links",
|
||||
"shareDescription": "Create shareable links to grant temporary or permanent access to your resources",
|
||||
"shareDescription": "Create shareable links to grant temporary or permanent access to proxy resources",
|
||||
"shareSearch": "Search share links...",
|
||||
"shareCreate": "Create Share Link",
|
||||
"shareErrorDelete": "Failed to delete link",
|
||||
"shareErrorDeleteMessage": "An error occurred deleting link",
|
||||
"shareDeleted": "Link deleted",
|
||||
"shareDeletedDescription": "The link has been deleted",
|
||||
"shareTokenDescription": "Your access token can be passed in two ways: as a query parameter or in the request headers. These must be passed from the client on every request for authenticated access.",
|
||||
"shareTokenDescription": "The access token can be passed in two ways: as a query parameter or in the request headers. These must be passed from the client on every request for authenticated access.",
|
||||
"accessToken": "Access Token",
|
||||
"usageExamples": "Usage Examples",
|
||||
"tokenId": "Token ID",
|
||||
@@ -121,7 +121,7 @@
|
||||
"importantNote": "Important Note",
|
||||
"shareImportantDescription": "For security reasons, using headers is recommended over query parameters when possible, as query parameters may be logged in server logs or browser history.",
|
||||
"token": "Token",
|
||||
"shareTokenSecurety": "Keep your access token secure. Do not share it in publicly accessible areas or client-side code.",
|
||||
"shareTokenSecurety": "Keep the access token secure. Do not share it in publicly accessible areas or client-side code.",
|
||||
"shareErrorFetchResource": "Failed to fetch resources",
|
||||
"shareErrorFetchResourceDescription": "An error occurred while fetching the resources",
|
||||
"shareErrorCreate": "Failed to create share link",
|
||||
@@ -145,9 +145,9 @@
|
||||
"never": "Never",
|
||||
"shareErrorSelectResource": "Please select a resource",
|
||||
"proxyResourceTitle": "Manage Proxy Resources",
|
||||
"proxyResourceDescription": "Create and manage secure, publicly accessible resources through a web browser",
|
||||
"proxyResourceDescription": "Create and manage resources that are publicly accessible through a web browser",
|
||||
"clientResourceTitle": "Manage Client Resources",
|
||||
"clientResourceDescription": "Create and manage private resources that are accessible only through a connected client, with no public exposure",
|
||||
"clientResourceDescription": "Create and manage resources that are only accessible through a connected client",
|
||||
"resourcesSearch": "Search resources...",
|
||||
"resourceAdd": "Add Resource",
|
||||
"resourceErrorDelte": "Error deleting resource",
|
||||
@@ -157,9 +157,9 @@
|
||||
"resourceMessageRemove": "Once removed, the resource will no longer be accessible. All targets associated with the resource will also be removed.",
|
||||
"resourceQuestionRemove": "Are you sure you want to remove the resource from the organization?",
|
||||
"resourceHTTP": "HTTPS Resource",
|
||||
"resourceHTTPDescription": "Proxy requests to your app over HTTPS using a subdomain or base domain.",
|
||||
"resourceHTTPDescription": "Proxy requests to the app over HTTPS using a subdomain or base domain.",
|
||||
"resourceRaw": "Raw TCP/UDP Resource",
|
||||
"resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.",
|
||||
"resourceRawDescription": "Proxy requests to the app over TCP/UDP using a port number. This only works when sites are connected to nodes.",
|
||||
"resourceCreate": "Create Resource",
|
||||
"resourceCreateDescription": "Follow the steps below to create a new resource",
|
||||
"resourceSeeAll": "See All Resources",
|
||||
@@ -173,22 +173,22 @@
|
||||
"noCountryFound": "No country found.",
|
||||
"siteSelectionDescription": "This site will provide connectivity to the target.",
|
||||
"resourceType": "Resource Type",
|
||||
"resourceTypeDescription": "Determine how you want to access your resource",
|
||||
"resourceTypeDescription": "Determine how to access the resource",
|
||||
"resourceHTTPSSettings": "HTTPS Settings",
|
||||
"resourceHTTPSSettingsDescription": "Configure how your resource will be accessed over HTTPS",
|
||||
"resourceHTTPSSettingsDescription": "Configure how the resource will be accessed over HTTPS",
|
||||
"domainType": "Domain Type",
|
||||
"subdomain": "Subdomain",
|
||||
"baseDomain": "Base Domain",
|
||||
"subdomnainDescription": "The subdomain where your resource will be accessible.",
|
||||
"subdomnainDescription": "The subdomain where the resource will be accessible.",
|
||||
"resourceRawSettings": "TCP/UDP Settings",
|
||||
"resourceRawSettingsDescription": "Configure how your resource will be accessed over TCP/UDP. You map the resource to a port on the host Pangolin server, so you can access the resource from server-public-ip:mapped-port.",
|
||||
"resourceRawSettingsDescription": "Configure how the resource will be accessed over TCP/UDP. You map the resource to a port on the host Pangolin server, so you can access the resource from server-public-ip:mapped-port.",
|
||||
"protocol": "Protocol",
|
||||
"protocolSelect": "Select a protocol",
|
||||
"resourcePortNumber": "Port Number",
|
||||
"resourcePortNumberDescription": "The external port number to proxy requests.",
|
||||
"cancel": "Cancel",
|
||||
"resourceConfig": "Configuration Snippets",
|
||||
"resourceConfigDescription": "Copy and paste these configuration snippets to set up your TCP/UDP resource",
|
||||
"resourceConfigDescription": "Copy and paste these configuration snippets to set up the TCP/UDP resource",
|
||||
"resourceAddEntrypoints": "Traefik: Add Entrypoints",
|
||||
"resourceExposePorts": "Gerbil: Expose Ports in Docker Compose",
|
||||
"resourceLearnRaw": "Learn how to configure TCP/UDP resources",
|
||||
@@ -204,14 +204,14 @@
|
||||
"proxy": "Proxy",
|
||||
"internal": "Internal",
|
||||
"rules": "Rules",
|
||||
"resourceSettingDescription": "Configure the settings on your resource",
|
||||
"resourceSettingDescription": "Configure the settings on the resource",
|
||||
"resourceSetting": "{resourceName} Settings",
|
||||
"alwaysAllow": "Always Allow",
|
||||
"alwaysDeny": "Always Deny",
|
||||
"passToAuth": "Pass to Auth",
|
||||
"orgSettingsDescription": "Configure your organization's settings",
|
||||
"orgSettingsDescription": "Configure the organization's settings",
|
||||
"orgGeneralSettings": "Organization Settings",
|
||||
"orgGeneralSettingsDescription": "Manage your organization details and configuration",
|
||||
"orgGeneralSettingsDescription": "Manage the organization's details and configuration",
|
||||
"saveGeneralSettings": "Save General Settings",
|
||||
"saveSettings": "Save Settings",
|
||||
"orgDangerZone": "Danger Zone",
|
||||
@@ -234,7 +234,7 @@
|
||||
"orgMissing": "Organization ID Missing",
|
||||
"orgMissingMessage": "Unable to regenerate invitation without an organization ID.",
|
||||
"accessUsersManage": "Manage Users",
|
||||
"accessUsersDescription": "Invite users and add them to roles to manage access to your organization",
|
||||
"accessUsersDescription": "Invite and manage users with access to this organization",
|
||||
"accessUsersSearch": "Search users...",
|
||||
"accessUserCreate": "Create User",
|
||||
"accessUserRemove": "Remove User",
|
||||
@@ -243,13 +243,13 @@
|
||||
"role": "Role",
|
||||
"nameRequired": "Name is required",
|
||||
"accessRolesManage": "Manage Roles",
|
||||
"accessRolesDescription": "Configure roles to manage access to your organization",
|
||||
"accessRolesDescription": "Create and manage roles for users in the organization",
|
||||
"accessRolesSearch": "Search roles...",
|
||||
"accessRolesAdd": "Add Role",
|
||||
"accessRoleDelete": "Delete Role",
|
||||
"description": "Description",
|
||||
"inviteTitle": "Open Invitations",
|
||||
"inviteDescription": "Manage your invitations to other users",
|
||||
"inviteDescription": "Manage invitations for other users to join the organization",
|
||||
"inviteSearch": "Search invitations...",
|
||||
"minutes": "Minutes",
|
||||
"hours": "Hours",
|
||||
@@ -263,13 +263,13 @@
|
||||
"apiKeysErrorCreate": "Error creating API key",
|
||||
"apiKeysErrorSetPermission": "Error setting permissions",
|
||||
"apiKeysCreate": "Generate API Key",
|
||||
"apiKeysCreateDescription": "Generate a new API key for your organization",
|
||||
"apiKeysCreateDescription": "Generate a new API key for the organization",
|
||||
"apiKeysGeneralSettings": "Permissions",
|
||||
"apiKeysGeneralSettingsDescription": "Determine what this API key can do",
|
||||
"apiKeysList": "Your API Key",
|
||||
"apiKeysSave": "Save Your API Key",
|
||||
"apiKeysList": "New API Key",
|
||||
"apiKeysSave": "Save the API Key",
|
||||
"apiKeysSaveDescription": "You will only be able to see this once. Make sure to copy it to a secure place.",
|
||||
"apiKeysInfo": "Your API key is:",
|
||||
"apiKeysInfo": "The API key is:",
|
||||
"apiKeysConfirmCopy": "I have copied the API key",
|
||||
"generate": "Generate",
|
||||
"done": "Done",
|
||||
@@ -426,7 +426,7 @@
|
||||
"userCreated": "User created",
|
||||
"userCreatedDescription": "The user has been successfully created.",
|
||||
"userTypeInternal": "Internal User",
|
||||
"userTypeInternalDescription": "Invite a user to join your organization directly.",
|
||||
"userTypeInternalDescription": "Invite a user to join the organization directly.",
|
||||
"userTypeExternal": "External User",
|
||||
"userTypeExternalDescription": "Create a user with an external identity provider.",
|
||||
"accessUserCreateDescription": "Follow the steps below to create a new user",
|
||||
@@ -460,13 +460,13 @@
|
||||
"accessControlsSubmit": "Save Access Controls",
|
||||
"roles": "Roles",
|
||||
"accessUsersRoles": "Manage Users & Roles",
|
||||
"accessUsersRolesDescription": "Invite users and add them to roles to manage access to your organization",
|
||||
"accessUsersRolesDescription": "Invite users and add them to roles to manage access to the organization",
|
||||
"key": "Key",
|
||||
"createdAt": "Created At",
|
||||
"proxyErrorInvalidHeader": "Invalid custom Host Header value. Use domain name format, or save empty to unset custom Host Header.",
|
||||
"proxyErrorTls": "Invalid TLS Server Name. Use domain name format, or save empty to remove the TLS Server Name.",
|
||||
"proxyEnableSSL": "Enable SSL",
|
||||
"proxyEnableSSLDescription": "Enable SSL/TLS encryption for secure HTTPS connections to your targets.",
|
||||
"proxyEnableSSLDescription": "Enable SSL/TLS encryption for secure HTTPS connections to the targets.",
|
||||
"target": "Target",
|
||||
"configureTarget": "Configure Targets",
|
||||
"targetErrorFetch": "Failed to fetch targets",
|
||||
@@ -482,29 +482,29 @@
|
||||
"targetsErrorUpdate": "Failed to update targets",
|
||||
"targetsErrorUpdateDescription": "An error occurred while updating targets",
|
||||
"targetTlsUpdate": "TLS settings updated",
|
||||
"targetTlsUpdateDescription": "Your TLS settings have been updated successfully",
|
||||
"targetTlsUpdateDescription": "TLS settings have been updated successfully",
|
||||
"targetErrorTlsUpdate": "Failed to update TLS settings",
|
||||
"targetErrorTlsUpdateDescription": "An error occurred while updating TLS settings",
|
||||
"proxyUpdated": "Proxy settings updated",
|
||||
"proxyUpdatedDescription": "Your proxy settings have been updated successfully",
|
||||
"proxyUpdatedDescription": "Proxy settings have been updated successfully",
|
||||
"proxyErrorUpdate": "Failed to update proxy settings",
|
||||
"proxyErrorUpdateDescription": "An error occurred while updating proxy settings",
|
||||
"targetAddr": "IP / Hostname",
|
||||
"targetPort": "Port",
|
||||
"targetProtocol": "Protocol",
|
||||
"targetTlsSettings": "Secure Connection Configuration",
|
||||
"targetTlsSettingsDescription": "Configure SSL/TLS settings for your resource",
|
||||
"targetTlsSettingsDescription": "Configure SSL/TLS settings for the resource",
|
||||
"targetTlsSettingsAdvanced": "Advanced TLS Settings",
|
||||
"targetTlsSni": "TLS Server Name",
|
||||
"targetTlsSniDescription": "The TLS Server Name to use for SNI. Leave empty to use the default.",
|
||||
"targetTlsSubmit": "Save Settings",
|
||||
"targets": "Targets Configuration",
|
||||
"targetsDescription": "Set up targets to route traffic to your backend services",
|
||||
"targetsDescription": "Set up targets to route traffic to backend services",
|
||||
"targetStickySessions": "Enable Sticky Sessions",
|
||||
"targetStickySessionsDescription": "Keep connections on the same backend target for their entire session.",
|
||||
"methodSelect": "Select method",
|
||||
"targetSubmit": "Add Target",
|
||||
"targetNoOne": "This resource doesn't have any targets. Add a target to configure where to send requests to your backend.",
|
||||
"targetNoOne": "This resource doesn't have any targets. Add a target to configure where to send requests to the backend.",
|
||||
"targetNoOneDescription": "Adding more than one target above will enable load balancing.",
|
||||
"targetsSubmit": "Save Targets",
|
||||
"addTarget": "Add Target",
|
||||
@@ -520,7 +520,7 @@
|
||||
"targetErrorCreateDescription": "An error occurred while creating the target",
|
||||
"save": "Save",
|
||||
"proxyAdditional": "Additional Proxy Settings",
|
||||
"proxyAdditionalDescription": "Configure how your resource handles proxy settings",
|
||||
"proxyAdditionalDescription": "Configure how the resource handles proxy settings",
|
||||
"proxyCustomHeader": "Custom Host Header",
|
||||
"proxyCustomHeaderDescription": "The host header to set when proxying requests. Leave empty to use the default.",
|
||||
"proxyAdditionalSubmit": "Save Proxy Settings",
|
||||
@@ -560,7 +560,7 @@
|
||||
"rulesMatchType": "Match Type",
|
||||
"value": "Value",
|
||||
"rulesAbout": "About Rules",
|
||||
"rulesAboutDescription": "Rules allow you to control access to your resource based on a set of criteria. You can create rules to allow or deny access based on IP address or URL path.",
|
||||
"rulesAboutDescription": "Rules allow you to control access to the resource based on a set of criteria. You can create rules to allow or deny access based on IP address or URL path.",
|
||||
"rulesActions": "Actions",
|
||||
"rulesActionAlwaysAllow": "Always Allow: Bypass all authentication methods",
|
||||
"rulesActionAlwaysDeny": "Always Deny: Block all requests; no authentication can be attempted",
|
||||
@@ -572,7 +572,7 @@
|
||||
"rulesEnable": "Enable Rules",
|
||||
"rulesEnableDescription": "Enable or disable rule evaluation for this resource",
|
||||
"rulesResource": "Resource Rules Configuration",
|
||||
"rulesResourceDescription": "Configure rules to control access to your resource",
|
||||
"rulesResourceDescription": "Configure rules to control access to the resource",
|
||||
"ruleSubmit": "Add Rule",
|
||||
"rulesNoOne": "No rules. Add a rule using the form.",
|
||||
"rulesOrder": "Rules are evaluated by priority in ascending order.",
|
||||
@@ -588,7 +588,7 @@
|
||||
"none": "None",
|
||||
"unknown": "Unknown",
|
||||
"resources": "Resources",
|
||||
"resourcesDescription": "Resources are proxies to applications running on your private network. Create a resource for any HTTP/HTTPS or raw TCP/UDP service on your private network. Each resource must be connected to a site to enable private, secure connectivity through an encrypted WireGuard tunnel.",
|
||||
"resourcesDescription": "Resources are proxies to applications running on the private network. Create a resource for any HTTP/HTTPS or raw TCP/UDP service on your private network. Each resource must be connected to a site to enable private, secure connectivity through an encrypted WireGuard tunnel.",
|
||||
"resourcesWireGuardConnect": "Secure connectivity with WireGuard encryption",
|
||||
"resourcesMultipleAuthenticationMethods": "Configure multiple authentication methods",
|
||||
"resourcesUsersRolesAccess": "User and role-based access control",
|
||||
@@ -599,7 +599,7 @@
|
||||
"resourceSelect": "Select resource",
|
||||
"shareLinks": "Share Links",
|
||||
"share": "Shareable Links",
|
||||
"shareDescription2": "Create shareable links to your resources. Links provide temporary or unlimited access to your resource. You can configure the expiration duration of the link when you create one.",
|
||||
"shareDescription2": "Create shareable links to resources. Links provide temporary or unlimited access to your resource. You can configure the expiration duration of the link when you create one.",
|
||||
"shareEasyCreate": "Easy to create and share",
|
||||
"shareConfigurableExpirationDuration": "Configurable expiration duration",
|
||||
"shareSecureAndRevocable": "Secure and revocable",
|
||||
@@ -614,7 +614,7 @@
|
||||
"newtSecretKey": "Secret",
|
||||
"architecture": "Architecture",
|
||||
"sites": "Sites",
|
||||
"siteWgAnyClients": "Use any WireGuard client to connect. You will have to address your internal resources using the peer IP.",
|
||||
"siteWgAnyClients": "Use any WireGuard client to connect. You will have to address internal resources using the peer IP.",
|
||||
"siteWgCompatibleAllClients": "Compatible with all WireGuard clients",
|
||||
"siteWgManualConfigurationRequired": "Manual configuration required",
|
||||
"userErrorNotAdminOrOwner": "User is not an admin or owner",
|
||||
@@ -768,15 +768,15 @@
|
||||
"idpOidcConfigure": "OAuth2/OIDC Configuration",
|
||||
"idpOidcConfigureDescription": "Configure the OAuth2/OIDC provider endpoints and credentials",
|
||||
"idpClientId": "Client ID",
|
||||
"idpClientIdDescription": "The OAuth2 client ID from your identity provider",
|
||||
"idpClientIdDescription": "The OAuth2 client ID from the identity provider",
|
||||
"idpClientSecret": "Client Secret",
|
||||
"idpClientSecretDescription": "The OAuth2 client secret from your identity provider",
|
||||
"idpClientSecretDescription": "The OAuth2 client secret from the identity provider",
|
||||
"idpAuthUrl": "Authorization URL",
|
||||
"idpAuthUrlDescription": "The OAuth2 authorization endpoint URL",
|
||||
"idpTokenUrl": "Token URL",
|
||||
"idpTokenUrlDescription": "The OAuth2 token endpoint URL",
|
||||
"idpOidcConfigureAlert": "Important Information",
|
||||
"idpOidcConfigureAlertDescription": "After creating the identity provider, you will need to configure the callback URL in your identity provider's settings. The callback URL will be provided after successful creation.",
|
||||
"idpOidcConfigureAlertDescription": "After creating the identity provider, you will need to configure the callback URL in the identity provider's settings. The callback URL will be provided after successful creation.",
|
||||
"idpToken": "Token Configuration",
|
||||
"idpTokenDescription": "Configure how to extract user information from the ID token",
|
||||
"idpJmespathAbout": "About JMESPath",
|
||||
@@ -793,7 +793,7 @@
|
||||
"idpSubmit": "Create Identity Provider",
|
||||
"orgPolicies": "Organization Policies",
|
||||
"idpSettings": "{idpName} Settings",
|
||||
"idpCreateSettingsDescription": "Configure the settings for your identity provider",
|
||||
"idpCreateSettingsDescription": "Configure the settings for the identity provider",
|
||||
"roleMapping": "Role Mapping",
|
||||
"orgMapping": "Organization Mapping",
|
||||
"orgPoliciesSearch": "Search organization policies...",
|
||||
@@ -828,7 +828,7 @@
|
||||
"idpUpdatedDescription": "Identity provider updated successfully",
|
||||
"redirectUrl": "Redirect URL",
|
||||
"redirectUrlAbout": "About Redirect URL",
|
||||
"redirectUrlAboutDescription": "This is the URL to which users will be redirected after authentication. You need to configure this URL in your identity provider settings.",
|
||||
"redirectUrlAboutDescription": "This is the URL to which users will be redirected after authentication. You need to configure this URL in the identity provider's settings.",
|
||||
"pangolinAuth": "Auth - Pangolin",
|
||||
"verificationCodeLengthRequirements": "Your verification code must be 8 characters.",
|
||||
"errorOccurred": "An error occurred",
|
||||
@@ -1182,7 +1182,7 @@
|
||||
"blueprintDetailsDescription": "See the result of the applied blueprint and any errors that occurred",
|
||||
"blueprintInfo": "Blueprint Information",
|
||||
"message": "Message",
|
||||
"blueprintContentsDescription": "Define the YAML content describing your infrastructure",
|
||||
"blueprintContentsDescription": "Define the YAML content describing the infrastructure",
|
||||
"blueprintErrorCreateDescription": "An error occurred when applying the blueprint",
|
||||
"blueprintErrorCreate": "Error creating blueprint",
|
||||
"searchBlueprintProgress": "Search blueprints...",
|
||||
@@ -1238,15 +1238,15 @@
|
||||
"loading": "Loading",
|
||||
"restart": "Restart",
|
||||
"domains": "Domains",
|
||||
"domainsDescription": "Manage domains for your organization",
|
||||
"domainsDescription": "Create and manage domains available in the organization",
|
||||
"domainsSearch": "Search domains...",
|
||||
"domainAdd": "Add Domain",
|
||||
"domainAddDescription": "Register a new domain with your organization",
|
||||
"domainAddDescription": "Register a new domain with to the organization",
|
||||
"domainCreate": "Create Domain",
|
||||
"domainCreatedDescription": "Domain created successfully",
|
||||
"domainDeletedDescription": "Domain deleted successfully",
|
||||
"domainQuestionRemove": "Are you sure you want to remove the domain from your account?",
|
||||
"domainMessageRemove": "Once removed, the domain will no longer be associated with your account.",
|
||||
"domainQuestionRemove": "Are you sure you want to remove the domain?",
|
||||
"domainMessageRemove": "Once removed, the domain will no longer be associated with the organization.",
|
||||
"domainConfirmDelete": "Confirm Delete Domain",
|
||||
"domainDelete": "Delete Domain",
|
||||
"domain": "Domain",
|
||||
@@ -1265,7 +1265,7 @@
|
||||
"pending": "Pending",
|
||||
"sidebarBilling": "Billing",
|
||||
"billing": "Billing",
|
||||
"orgBillingDescription": "Manage your billing information and subscriptions",
|
||||
"orgBillingDescription": "Manage billing information and subscriptions",
|
||||
"github": "GitHub",
|
||||
"pangolinHosted": "Pangolin Hosted",
|
||||
"fossorial": "Fossorial",
|
||||
@@ -1308,7 +1308,7 @@
|
||||
"domainPickerSortAsc": "A-Z",
|
||||
"domainPickerSortDesc": "Z-A",
|
||||
"domainPickerCheckingAvailability": "Checking availability...",
|
||||
"domainPickerNoMatchingDomains": "No matching domains found. Try a different domain or check your organization's domain settings.",
|
||||
"domainPickerNoMatchingDomains": "No matching domains found. Try a different domain or check the organization's domain settings.",
|
||||
"domainPickerOrganizationDomains": "Organization Domains",
|
||||
"domainPickerProvidedDomains": "Provided Domains",
|
||||
"domainPickerSubdomain": "Subdomain: {subdomain}",
|
||||
@@ -1342,7 +1342,7 @@
|
||||
"billingModifySubscription": "Modify Subscription",
|
||||
"billingStartSubscription": "Start Subscription",
|
||||
"billingRecurringCharge": "Recurring Charge",
|
||||
"billingManageSubscriptionSettings": "Manage your subscription settings and preferences",
|
||||
"billingManageSubscriptionSettings": "Manage subscription settings and preferences",
|
||||
"billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.",
|
||||
"billingFailedToLoadSubscription": "Failed to load subscription",
|
||||
"billingFailedToLoadUsage": "Failed to load usage",
|
||||
@@ -1353,9 +1353,9 @@
|
||||
"billingPortalError": "Portal Error",
|
||||
"billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.",
|
||||
"billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.",
|
||||
"billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.",
|
||||
"billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.",
|
||||
"billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.",
|
||||
"billingUsersInfo": "You're charged for each user in the organization. Billing is calculated daily based on the number of active user accounts in your org.",
|
||||
"billingDomainInfo": "You're charged for each domain in the organization. Billing is calculated daily based on the number of active domain accounts in your org.",
|
||||
"billingRemoteExitNodesInfo": "You're charged for each managed Node in the organization. Billing is calculated daily based on the number of active managed Nodes in your org.",
|
||||
"domainNotFound": "Domain Not Found",
|
||||
"domainNotFoundDescription": "This resource is disabled because the domain no longer exists our system. Please set a new domain for this resource.",
|
||||
"failed": "Failed",
|
||||
@@ -1463,7 +1463,7 @@
|
||||
"olmEndpoint": "Endpoint",
|
||||
"olmId": "ID",
|
||||
"olmSecretKey": "Secret",
|
||||
"clientCredentialsSave": "Save Your Credentials",
|
||||
"clientCredentialsSave": "Save the Credentials",
|
||||
"clientCredentialsSaveDescription": "You will only be able to see this once. Make sure to copy it to a secure place.",
|
||||
"generalSettingsDescription": "Configure the general settings for this client",
|
||||
"clientUpdated": "Client updated",
|
||||
@@ -1640,7 +1640,7 @@
|
||||
"autoLoginErrorNoRedirectUrl": "No redirect URL received from the identity provider.",
|
||||
"autoLoginErrorGeneratingUrl": "Failed to generate authentication URL.",
|
||||
"remoteExitNodeManageRemoteExitNodes": "Remote Nodes",
|
||||
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend your network connectivity and reduce reliance on the cloud",
|
||||
"remoteExitNodeDescription": "Self-host one or more remote nodes to extend network connectivity and reduce reliance on the cloud",
|
||||
"remoteExitNodes": "Nodes",
|
||||
"searchRemoteExitNodes": "Search nodes...",
|
||||
"remoteExitNodeAdd": "Add Node",
|
||||
@@ -1652,11 +1652,11 @@
|
||||
"sidebarRemoteExitNodes": "Remote Nodes",
|
||||
"remoteExitNodeCreate": {
|
||||
"title": "Create Node",
|
||||
"description": "Create a new node to extend your network connectivity",
|
||||
"description": "Create a new node to extend network connectivity",
|
||||
"viewAllButton": "View All Nodes",
|
||||
"strategy": {
|
||||
"title": "Creation Strategy",
|
||||
"description": "Choose this to manually configure your node or generate new credentials.",
|
||||
"description": "Choose this to manually configure the node or generate new credentials.",
|
||||
"adopt": {
|
||||
"title": "Adopt Node",
|
||||
"description": "Choose this if you already have the credentials for the node."
|
||||
@@ -1677,7 +1677,7 @@
|
||||
},
|
||||
"generate": {
|
||||
"title": "Generated Credentials",
|
||||
"description": "Use these generated credentials to configure your node",
|
||||
"description": "Use these generated credentials to configure the node",
|
||||
"nodeIdTitle": "Node ID",
|
||||
"secretTitle": "Secret",
|
||||
"saveCredentialsTitle": "Add Credentials to Config",
|
||||
@@ -1753,16 +1753,16 @@
|
||||
"idpTypeLabel": "Identity Provider Type",
|
||||
"roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'",
|
||||
"idpGoogleConfiguration": "Google Configuration",
|
||||
"idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials",
|
||||
"idpGoogleClientIdDescription": "Your Google OAuth2 Client ID",
|
||||
"idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret",
|
||||
"idpGoogleConfigurationDescription": "Configure the Google OAuth2 credentials",
|
||||
"idpGoogleClientIdDescription": "Google OAuth2 Client ID",
|
||||
"idpGoogleClientSecretDescription": "Google OAuth2 Client Secret",
|
||||
"idpAzureConfiguration": "Azure Entra ID Configuration",
|
||||
"idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials",
|
||||
"idpAzureConfigurationDescription": "Configure Azure Entra ID OAuth2 credentials",
|
||||
"idpTenantId": "Tenant ID",
|
||||
"idpTenantIdPlaceholder": "your-tenant-id",
|
||||
"idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)",
|
||||
"idpAzureClientIdDescription": "Your Azure App Registration Client ID",
|
||||
"idpAzureClientSecretDescription": "Your Azure App Registration Client Secret",
|
||||
"idpTenantIdPlaceholder": "tenant-id",
|
||||
"idpAzureTenantIdDescription": "Azure tenant ID (found in Azure Active Directory overview)",
|
||||
"idpAzureClientIdDescription": "Azure App Registration Client ID",
|
||||
"idpAzureClientSecretDescription": "Azure App Registration Client Secret",
|
||||
"idpGoogleTitle": "Google",
|
||||
"idpGoogleAlt": "Google",
|
||||
"idpAzureTitle": "Azure Entra ID",
|
||||
@@ -1770,14 +1770,14 @@
|
||||
"idpGoogleConfigurationTitle": "Google Configuration",
|
||||
"idpAzureConfigurationTitle": "Azure Entra ID Configuration",
|
||||
"idpTenantIdLabel": "Tenant ID",
|
||||
"idpAzureClientIdDescription2": "Your Azure App Registration Client ID",
|
||||
"idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret",
|
||||
"idpAzureClientIdDescription2": "Azure App Registration Client ID",
|
||||
"idpAzureClientSecretDescription2": "Azure App Registration Client Secret",
|
||||
"idpGoogleDescription": "Google OAuth2/OIDC provider",
|
||||
"idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider",
|
||||
"subnet": "Subnet",
|
||||
"subnetDescription": "The subnet for this organization's network configuration.",
|
||||
"authPage": "Auth Page",
|
||||
"authPageDescription": "Configure the auth page for your organization",
|
||||
"authPageDescription": "Configure the auth page for the organization",
|
||||
"authPageDomain": "Auth Page Domain",
|
||||
"noDomainSet": "No domain set",
|
||||
"changeDomain": "Change Domain",
|
||||
@@ -1787,7 +1787,7 @@
|
||||
"setAuthPageDomain": "Set Auth Page Domain",
|
||||
"failedToFetchCertificate": "Failed to fetch certificate",
|
||||
"failedToRestartCertificate": "Failed to restart certificate",
|
||||
"addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization",
|
||||
"addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for the organization",
|
||||
"selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page",
|
||||
"domainPickerProvidedDomain": "Provided Domain",
|
||||
"domainPickerFreeProvidedDomain": "Free Provided Domain",
|
||||
@@ -1802,7 +1802,7 @@
|
||||
"domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" could not be made valid for {domain}.",
|
||||
"domainPickerSubdomainSanitized": "Subdomain sanitized",
|
||||
"domainPickerSubdomainCorrected": "\"{sub}\" was corrected to \"{sanitized}\"",
|
||||
"orgAuthSignInTitle": "Sign in to your organization",
|
||||
"orgAuthSignInTitle": "Sign in to the organization",
|
||||
"orgAuthChooseIdpDescription": "Choose your identity provider to continue",
|
||||
"orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.",
|
||||
"orgAuthSignInWithPangolin": "Sign in with Pangolin",
|
||||
@@ -1820,7 +1820,7 @@
|
||||
"enableTwoFactorAuthentication": "Enable two-factor authentication",
|
||||
"completeSecuritySteps": "Complete Security Steps",
|
||||
"securitySettings": "Security Settings",
|
||||
"securitySettingsDescription": "Configure security policies for your organization",
|
||||
"securitySettingsDescription": "Configure security policies for the organization",
|
||||
"requireTwoFactorForAllUsers": "Require Two-Factor Authentication for All Users",
|
||||
"requireTwoFactorDescription": "When enabled, all internal users in this organization must have two-factor authentication enabled to access the organization.",
|
||||
"requireTwoFactorDisabledDescription": "This feature requires a valid license (Enterprise) or active subscription (SaaS)",
|
||||
@@ -1884,9 +1884,9 @@
|
||||
"unlicensed": "Unlicensed",
|
||||
"beta": "Beta",
|
||||
"manageUserDevices": "User Devices",
|
||||
"manageUserDevicesDescription": "View and manage personal devices that users connect with to securely access your organization’s resources",
|
||||
"manageUserDevicesDescription": "View and manage devices that users use to privately connect to resources",
|
||||
"manageMachineClients": "Manage Machine Clients",
|
||||
"manageMachineClientsDescription": "Create and manage automated clients, such as servers or services, that securely connect to your network",
|
||||
"manageMachineClientsDescription": "Create and manage clients that servers and systems use to privately connect to resources",
|
||||
"clientsTableUserClients": "User",
|
||||
"clientsTableMachineClients": "Machine",
|
||||
"licenseTableValidUntil": "Valid Until",
|
||||
@@ -2085,7 +2085,7 @@
|
||||
"preferWildcardCert": "Prefer Wildcard Certificate",
|
||||
"unverified": "Unverified",
|
||||
"domainSetting": "Domain Settings",
|
||||
"domainSettingDescription": "Configure settings for your domain",
|
||||
"domainSettingDescription": "Configure settings for the domain",
|
||||
"preferWildcardCertDescription": "Attempt to generate a wildcard certificate (require a properly configured certificate resolver).",
|
||||
"recordName": "Record Name",
|
||||
"auto": "Auto",
|
||||
@@ -2107,7 +2107,7 @@
|
||||
"version2": "Version 2",
|
||||
"versionDescription": "Version 1 is text-based and widely supported. Version 2 is binary and more efficient but less compatible. Make sure servers transport is added to dynamic config.",
|
||||
"warning": "Warning",
|
||||
"proxyProtocolWarning": "Your backend application must be configured to accept Proxy Protocol connections. If your backend doesn't support Proxy Protocol, enabling this will break all connections so only enable this if you know what you're doing. Make sure to configure your backend to trust Proxy Protocol headers from Traefik.",
|
||||
"proxyProtocolWarning": "The backend application must be configured to accept Proxy Protocol connections. If your backend doesn't support Proxy Protocol, enabling this will break all connections so only enable this if you know what you're doing. Make sure to configure your backend to trust Proxy Protocol headers from Traefik.",
|
||||
"restarting": "Restarting...",
|
||||
"manual": "Manual",
|
||||
"messageSupport": "Message Support",
|
||||
@@ -2139,10 +2139,10 @@
|
||||
"deviceCodeInvalidOrExpired": "Invalid or expired code",
|
||||
"deviceCodeVerifyFailed": "Failed to verify device code",
|
||||
"signedInAs": "Signed in as",
|
||||
"deviceCodeEnterPrompt": "Enter the code displayed on your device",
|
||||
"deviceCodeEnterPrompt": "Enter the code displayed on the device",
|
||||
"continue": "Continue",
|
||||
"deviceUnknownLocation": "Unknown location",
|
||||
"deviceAuthorizationRequested": "This authorization was requested from {location} on {date}. Make sure you trust this device as it will get access to your account.",
|
||||
"deviceAuthorizationRequested": "This authorization was requested from {location} on {date}. Make sure you trust this device as it will get access to the account.",
|
||||
"deviceLabel": "Device: {deviceName}",
|
||||
"deviceWantsAccess": "wants to access your account",
|
||||
"deviceExistingAccess": "Existing access:",
|
||||
|
||||
@@ -307,109 +307,118 @@ export function SidebarNav({
|
||||
);
|
||||
|
||||
if (isCollapsed) {
|
||||
// If item has nested items, show popover instead of tooltip
|
||||
// If item has nested items, show both tooltip and popover
|
||||
if (hasNestedItems) {
|
||||
return (
|
||||
<Popover key={item.title}>
|
||||
<PopoverTrigger asChild>
|
||||
<button
|
||||
className={cn(
|
||||
"flex items-center rounded transition-colors hover:bg-secondary/50 dark:hover:bg-secondary/20 rounded-md px-2 py-2 justify-center w-full",
|
||||
isChildActive
|
||||
? "text-primary font-medium"
|
||||
: "text-muted-foreground hover:text-foreground",
|
||||
isDisabled && "cursor-not-allowed opacity-60"
|
||||
)}
|
||||
disabled={isDisabled}
|
||||
>
|
||||
{item.icon && (
|
||||
<span className="flex-shrink-0">
|
||||
{item.icon}
|
||||
</span>
|
||||
)}
|
||||
</button>
|
||||
</PopoverTrigger>
|
||||
<PopoverContent
|
||||
side="right"
|
||||
align="start"
|
||||
className="w-56 p-1"
|
||||
>
|
||||
<div className="space-y-1">
|
||||
{item.items!.map((childItem) => {
|
||||
const childHydratedHref = hydrateHref(
|
||||
childItem.href
|
||||
);
|
||||
const childIsActive = childHydratedHref
|
||||
? pathname.startsWith(
|
||||
childHydratedHref
|
||||
)
|
||||
: false;
|
||||
const childIsEE =
|
||||
build === "enterprise" &&
|
||||
childItem.showEE &&
|
||||
!isUnlocked();
|
||||
const childIsDisabled =
|
||||
disabled || childIsEE;
|
||||
|
||||
if (!childHydratedHref) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Link
|
||||
key={childItem.title}
|
||||
href={
|
||||
childIsDisabled
|
||||
? "#"
|
||||
: childHydratedHref
|
||||
}
|
||||
<TooltipProvider key={item.title}>
|
||||
<Tooltip>
|
||||
<Popover>
|
||||
<PopoverTrigger asChild>
|
||||
<TooltipTrigger asChild>
|
||||
<button
|
||||
className={cn(
|
||||
"flex items-center rounded transition-colors px-3 py-1.5 text-sm",
|
||||
childIsActive
|
||||
? "bg-secondary text-primary font-medium"
|
||||
: "text-muted-foreground hover:bg-secondary/50 hover:text-foreground",
|
||||
childIsDisabled &&
|
||||
"cursor-not-allowed opacity-60"
|
||||
"flex items-center rounded transition-colors hover:bg-secondary/50 dark:hover:bg-secondary/20 rounded-md px-2 py-2 justify-center w-full",
|
||||
isChildActive
|
||||
? "text-primary font-medium"
|
||||
: "text-muted-foreground hover:text-foreground",
|
||||
isDisabled && "cursor-not-allowed opacity-60"
|
||||
)}
|
||||
onClick={(e) => {
|
||||
if (childIsDisabled) {
|
||||
e.preventDefault();
|
||||
} else if (onItemClick) {
|
||||
onItemClick();
|
||||
}
|
||||
}}
|
||||
disabled={isDisabled}
|
||||
>
|
||||
{childItem.icon && (
|
||||
<span className="flex-shrink-0 mr-2">
|
||||
{childItem.icon}
|
||||
{item.icon && (
|
||||
<span className="flex-shrink-0">
|
||||
{item.icon}
|
||||
</span>
|
||||
)}
|
||||
<div className="flex items-center gap-1.5 flex-1">
|
||||
<span>{t(childItem.title)}</span>
|
||||
{childItem.isBeta && (
|
||||
<Badge
|
||||
variant="outline"
|
||||
className="text-muted-foreground"
|
||||
>
|
||||
{t("beta")}
|
||||
</Badge>
|
||||
)}
|
||||
</div>
|
||||
{build === "enterprise" &&
|
||||
</button>
|
||||
</TooltipTrigger>
|
||||
</PopoverTrigger>
|
||||
<TooltipContent side="right" sideOffset={8}>
|
||||
<p>{tooltipText}</p>
|
||||
</TooltipContent>
|
||||
<PopoverContent
|
||||
side="right"
|
||||
align="start"
|
||||
className="w-56 p-1"
|
||||
>
|
||||
<div className="space-y-1">
|
||||
{item.items!.map((childItem) => {
|
||||
const childHydratedHref = hydrateHref(
|
||||
childItem.href
|
||||
);
|
||||
const childIsActive = childHydratedHref
|
||||
? pathname.startsWith(
|
||||
childHydratedHref
|
||||
)
|
||||
: false;
|
||||
const childIsEE =
|
||||
build === "enterprise" &&
|
||||
childItem.showEE &&
|
||||
!isUnlocked() && (
|
||||
<Badge
|
||||
variant="outlinePrimary"
|
||||
>
|
||||
{t("licenseBadge")}
|
||||
</Badge>
|
||||
)}
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</PopoverContent>
|
||||
</Popover>
|
||||
!isUnlocked();
|
||||
const childIsDisabled =
|
||||
disabled || childIsEE;
|
||||
|
||||
if (!childHydratedHref) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Link
|
||||
key={childItem.title}
|
||||
href={
|
||||
childIsDisabled
|
||||
? "#"
|
||||
: childHydratedHref
|
||||
}
|
||||
className={cn(
|
||||
"flex items-center rounded transition-colors px-3 py-1.5 text-sm",
|
||||
childIsActive
|
||||
? "bg-secondary text-primary font-medium"
|
||||
: "text-muted-foreground hover:bg-secondary/50 hover:text-foreground",
|
||||
childIsDisabled &&
|
||||
"cursor-not-allowed opacity-60"
|
||||
)}
|
||||
onClick={(e) => {
|
||||
if (childIsDisabled) {
|
||||
e.preventDefault();
|
||||
} else if (onItemClick) {
|
||||
onItemClick();
|
||||
}
|
||||
}}
|
||||
>
|
||||
{childItem.icon && (
|
||||
<span className="flex-shrink-0 mr-2">
|
||||
{childItem.icon}
|
||||
</span>
|
||||
)}
|
||||
<div className="flex items-center gap-1.5 flex-1">
|
||||
<span>{t(childItem.title)}</span>
|
||||
{childItem.isBeta && (
|
||||
<Badge
|
||||
variant="outline"
|
||||
className="text-muted-foreground"
|
||||
>
|
||||
{t("beta")}
|
||||
</Badge>
|
||||
)}
|
||||
</div>
|
||||
{build === "enterprise" &&
|
||||
childItem.showEE &&
|
||||
!isUnlocked() && (
|
||||
<Badge
|
||||
variant="outlinePrimary"
|
||||
>
|
||||
{t("licenseBadge")}
|
||||
</Badge>
|
||||
)}
|
||||
</Link>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</PopoverContent>
|
||||
</Popover>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user