Merge branch 'dev' of github.com:fosrl/pangolin into dev

This commit is contained in:
Owen 2025-07-17 12:26:51 -07:00
commit 417811e94f
No known key found for this signature in database
GPG key ID: 8271FDFFD9E0CCBD
13 changed files with 64 additions and 53 deletions

View file

@ -81,21 +81,23 @@ Pangolin is a self-hosted tunneled reverse proxy server with identity and access
<img src="public/auth-diagram1.png" alt="Auth and diagram"/>
#### Manage Access to Internal Apps
## Use Cases
Grant users access to your apps from anywhere using just a web browser. No client software required.
### Manage Access to Internal Apps
#### Developers and DevOps
- Grant users access to your apps from anywhere using just a web browser. No client software required.
Expose and test internal tools and dashboards like **Grafana**. Bring localhost online for easy access.
### Developers and DevOps
#### Secure API Gateway
- Expose and test internal tools and dashboards like **Grafana**. Bring localhost or private IPs online for easy access.
One application load balancer across multiple clouds and on-premises.
### Secure API Gateway
#### IoT and Edge Devices
- One application load balancer across multiple clouds and on-premises.
Easily expose **IoT devices**, **edge servers**, or **Raspberry Pi** to the internet for field equipment monitoring.
### IoT and Edge Devices
- Easily expose **IoT devices**, **edge servers**, or **Raspberry Pi** to the internet for field equipment monitoring.
<img src="public/screenshots/sites.png" alt="Sites"/>
@ -103,7 +105,7 @@ Easily expose **IoT devices**, **edge servers**, or **Raspberry Pi** to the inte
### Fully Self Hosted
Host the full application on your own server on your network our on the cloud with a VPS. Take a look at the [documentation](https://docs.fossorial.io/Getting%20Started/quick-install) to get started.
Host the full application on your own server or on the cloud with a VPS. Take a look at the [documentation](https://docs.fossorial.io/Getting%20Started/quick-install) to get started.
> Many of our users have had a great experience with [RackNerd](https://my.racknerd.com/aff.php?aff=13788). Depending on promotions, you can get a [**VPS with 1 vCPU, 1GB RAM, and ~20GB SSD for just around $12/year**](https://my.racknerd.com/aff.php?aff=13788&pid=912). That's a great deal!
@ -111,28 +113,25 @@ Host the full application on your own server on your network our on the cloud wi
Easy to use with simple pay as you go pricing. [Check it out here](https://pangolin.fossorial.io/auth/signup).
- Everything you get with self hosted Pangolin
- Managed for you
- Everything you get with self hosted Pangolin, but fully managed for you.
### Hybrid & HA
### Hybrid & High Availability
Managed control plane, your infrastructure
- We manage database and control plane
- You self-host lightweight exit-node
- Traffic flows through your infra
- We coordinate failover between your nodes or to cloud when things go bad
- We manage database and control plane.
- You self-host lightweight exit-node.
- Traffic flows through your infra.
- We coordinate failover between your nodes or to Cloud when things go bad.
If interested contact [contact us](mailto:numbat@fossorial.io).
If interested, [contact us](mailto:numbat@fossorial.io).
### Enterprise
### Full Enterprise On-Premises
[Contact us](mailto:numbat@fossorial.io) for HA distributed enterprise deployments fully controlled by your team
[Contact us](mailto:numbat@fossorial.io) for a full distributed and enterprise deployments on your infrastructure controlled by your team.
## Project Development / Roadmap
View the [project board](https://github.com/orgs/fosrl/projects/1) for more detailed info.
We want to hear your feature requests! Add them to the [discussion board](https://github.com/orgs/fosrl/discussions/categories/feature-requests).
## Licensing
@ -145,4 +144,4 @@ Looking for something to contribute? Take a look at issues marked with [help wan
Please see [CONTRIBUTING](./CONTRIBUTING.md) in the repository for guidelines and best practices.
Please post bug reports and other functional issues in the [Issues](https://github.com/fosrl/pangolin/issues) section of the repository.
Please post bug reports and other functional issues in the [Issues](https://github.com/fosrl/pangolin/issues) section of the repository.

View file

@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "A new version of Newt is available. Please update to the latest version for the best experience.",
"domainPickerEnterDomain": "Enter your domain",
"domainPickerPlaceholder": "myapp.example.com, api.v1.mydomain.com, or just myapp",
"domainPickerDescription": "Enter a full domain, subdomain, or just a name to see available options",
"domainPickerDescription": "Enter the full domain of the resource to see available options.",
"domainPickerDescriptionSaas": "Enter a full domain, subdomain, or just a name to see available options",
"domainPickerTabAll": "All",
"domainPickerTabOrganization": "Organization",
"domainPickerTabProvided": "Provided",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Security key removed successfully",
"securityKeyRemoveError": "Failed to remove security key",
"securityKeyLoadError": "Failed to load security keys",
"securityKeyLogin": "Sign in with security key",
"securityKeyLogin": "Continue with security key",
"securityKeyAuthError": "Failed to authenticate with security key",
"securityKeyRecommendation": "Register a backup security key on another device to ensure you always have access to your account.",
"registering": "Registering...",

View file

@ -13,7 +13,7 @@
"welcome": "Willkommen zu Pangolin",
"welcomeTo": "Willkommen bei",
"componentsCreateOrg": "Erstelle eine Organisation",
"componentsMember": "You're a member of {count, plural, =0 {no organization} one {one organization} other {# organizations}}.",
"componentsMember": "Du bist Mitglied von {count, plural, =0 {keiner Organisation} one {einer Organisation} other {# Organisationen}}.",
"componentsInvalidKey": "Ungültige oder abgelaufene Lizenzschlüssel erkannt. Beachte die Lizenzbedingungen, um alle Funktionen weiterhin zu nutzen.",
"dismiss": "Verwerfen",
"componentsLicenseViolation": "Lizenzverstoß: Dieser Server benutzt {usedSites} Sites, die das Lizenzlimit der {maxSites} Sites überschreiten. Beachte die Lizenzbedingungen, um alle Funktionen weiterhin zu nutzen.",
@ -349,7 +349,7 @@
"licensePurchase": "Lizenz kaufen",
"licensePurchaseSites": "Zusätzliche Seiten kaufen",
"licenseSitesUsedMax": "{usedSites} der {maxSites} Seiten verwendet",
"licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}} in system.",
"licenseSitesUsed": "{count, plural, =0 {# Seiten} one {# Seite} other {# Seiten}} im System.",
"licensePurchaseDescription": "Wähle aus, für wieviele Seiten du möchtest {selectedMode, select, license {kaufe eine Lizenz. Du kannst später immer weitere Seiten hinzufügen.} other {Füge zu deiner bestehenden Lizenz hinzu.}}",
"licenseFee": "Lizenzgebühr",
"licensePriceSite": "Preis pro Seite",
@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "Eine neue Version von Newt ist verfügbar. Bitte aktualisieren Sie auf die neueste Version für das beste Erlebnis.",
"domainPickerEnterDomain": "Geben Sie Ihre Domain ein",
"domainPickerPlaceholder": "myapp.example.com, api.v1.mydomain.com, oder einfach myapp",
"domainPickerDescription": "Geben Sie eine vollständige Domain, Subdomain oder einfach einen Namen ein, um verfügbare Optionen zu sehen",
"domainPickerDescription": "Geben Sie die vollständige Domäne der Ressource ein, um verfügbare Optionen zu sehen.",
"domainPickerDescriptionSaas": "Geben Sie eine vollständige Domäne, Subdomäne oder einfach einen Namen ein, um verfügbare Optionen zu sehen",
"domainPickerTabAll": "Alle",
"domainPickerTabOrganization": "Organisation",
"domainPickerTabProvided": "Bereitgestellt",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Sicherheitsschlüssel erfolgreich entfernt",
"securityKeyRemoveError": "Fehler beim Entfernen des Sicherheitsschlüssels",
"securityKeyLoadError": "Fehler beim Laden der Sicherheitsschlüssel",
"securityKeyLogin": "Mit Sicherheitsschlüssel anmelden",
"securityKeyLogin": "Mit dem Sicherheitsschlüssel fortfahren",
"securityKeyAuthError": "Fehler bei der Authentifizierung mit Sicherheitsschlüssel",
"securityKeyRecommendation": "Erwägen Sie die Registrierung eines weiteren Sicherheitsschlüssels auf einem anderen Gerät, um sicherzustellen, dass Sie sich nicht aus Ihrem Konto aussperren.",
"registering": "Registrierung...",

View file

@ -13,7 +13,7 @@
"welcome": "Bienvenido a Pangolin",
"welcomeTo": "Bienvenido a",
"componentsCreateOrg": "Crear una organización",
"componentsMember": "You're a member of {count, plural, =0 {no organization} one {one organization} other {# organizations}}.",
"componentsMember": "Eres un miembro de {count, plural, =0 {ninguna organización} one {una organización} other {# organizaciones}}.",
"componentsInvalidKey": "Se han detectado claves de licencia inválidas o caducadas. Siga los términos de licencia para seguir usando todas las características.",
"dismiss": "Descartar",
"componentsLicenseViolation": "Violación de la Licencia: Este servidor está usando sitios {usedSites} que exceden su límite de licencias de sitios {maxSites} . Siga los términos de licencia para seguir usando todas las características.",
@ -349,7 +349,7 @@
"licensePurchase": "Comprar Licencia",
"licensePurchaseSites": "Comprar sitios adicionales",
"licenseSitesUsedMax": "{usedSites} de {maxSites} sitios usados",
"licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}} in system.",
"licenseSitesUsed": "{count, plural, =0 {# sitios} one {# sitio} other {# sitios}} en el sistema.",
"licensePurchaseDescription": "Elige cuántos sitios quieres {selectedMode, select, license {compra una licencia para. Siempre puedes añadir más sitios más tarde.} other {añadir a tu licencia existente.}}",
"licenseFee": "Tarifa de licencia",
"licensePriceSite": "Precio por sitio",
@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "Hay una nueva versión de Newt disponible. Actualice a la última versión para la mejor experiencia.",
"domainPickerEnterDomain": "Ingresa tu dominio",
"domainPickerPlaceholder": "myapp.example.com, api.v1.miDominio.com, o solo myapp",
"domainPickerDescription": "Ingresa un dominio completo, subdominio, o solo un nombre para ver las opciones disponibles",
"domainPickerDescription": "Ingresa el dominio completo del recurso para ver las opciones disponibles.",
"domainPickerDescriptionSaas": "Ingresa un dominio completo, subdominio o simplemente un nombre para ver las opciones disponibles",
"domainPickerTabAll": "Todo",
"domainPickerTabOrganization": "Organización",
"domainPickerTabProvided": "Proporcionado",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Llave de seguridad eliminada exitosamente",
"securityKeyRemoveError": "Error al eliminar la llave de seguridad",
"securityKeyLoadError": "Error al cargar las llaves de seguridad",
"securityKeyLogin": "Iniciar sesión con llave de seguridad",
"securityKeyLogin": "Continuar con clave de seguridad",
"securityKeyAuthError": "Error al autenticar con llave de seguridad",
"securityKeyRecommendation": "Considere registrar otra llave de seguridad en un dispositivo diferente para asegurarse de no quedar bloqueado de su cuenta.",
"registering": "Registrando...",

View file

@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "Une nouvelle version de Newt est disponible. Veuillez mettre à jour vers la dernière version pour une meilleure expérience.",
"domainPickerEnterDomain": "Entrez votre domaine",
"domainPickerPlaceholder": "myapp.example.com, api.v1.mydomain.com, ou simplement myapp",
"domainPickerDescription": "Entrez un domaine complet, un sous-domaine, ou simplement un nom pour voir les options disponibles",
"domainPickerDescription": "Entrez le domaine complet de la ressource pour voir les options disponibles.",
"domainPickerDescriptionSaas": "Entrez un domaine complet, un sous-domaine ou juste un nom pour voir les options disponibles",
"domainPickerTabAll": "Tous",
"domainPickerTabOrganization": "Organisation",
"domainPickerTabProvided": "Fournis",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Clé de sécurité supprimée avec succès",
"securityKeyRemoveError": "Échec de la suppression de la clé de sécurité",
"securityKeyLoadError": "Échec du chargement des clés de sécurité",
"securityKeyLogin": "Se connecter avec une clé de sécurité",
"securityKeyLogin": "Continuer avec une clé de sécurité",
"securityKeyAuthError": "Échec de l'authentification avec la clé de sécurité",
"securityKeyRecommendation": "Envisagez d'enregistrer une autre clé de sécurité sur un appareil différent pour vous assurer de ne pas être bloqué de votre compte.",
"registering": "Enregistrement...",

View file

@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "È disponibile una nuova versione di Newt. Si prega di aggiornare all'ultima versione per la migliore esperienza.",
"domainPickerEnterDomain": "Inserisci il tuo dominio",
"domainPickerPlaceholder": "myapp.example.com, api.v1.mydomain.com, o semplicemente myapp",
"domainPickerDescription": "Inserisci un dominio completo, sottodominio o solo un nome per vedere le opzioni disponibili",
"domainPickerDescription": "Inserisci il dominio completo della risorsa per vedere le opzioni disponibili.",
"domainPickerDescriptionSaas": "Inserisci un dominio completo, un sottodominio o semplicemente un nome per vedere le opzioni disponibili",
"domainPickerTabAll": "Tutti",
"domainPickerTabOrganization": "Organizzazione",
"domainPickerTabProvided": "Fornito",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Chiave di sicurezza rimossa con successo",
"securityKeyRemoveError": "Errore durante la rimozione della chiave di sicurezza",
"securityKeyLoadError": "Errore durante il caricamento delle chiavi di sicurezza",
"securityKeyLogin": "Accedi con chiave di sicurezza",
"securityKeyLogin": "Continua con la chiave di sicurezza",
"securityKeyAuthError": "Errore durante l'autenticazione con chiave di sicurezza",
"securityKeyRecommendation": "Considera di registrare un'altra chiave di sicurezza su un dispositivo diverso per assicurarti di non rimanere bloccato fuori dal tuo account.",
"registering": "Registrazione in corso...",

View file

@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "뉴트의 새 버전이 출시되었습니다. 최상의 경험을 위해 최신 버전으로 업데이트하세요.",
"domainPickerEnterDomain": "도메인 입력",
"domainPickerPlaceholder": "myapp.example.com, api.v1.mydomain.com, 또는 그냥 myapp",
"domainPickerDescription": "도메인, 서브도메인, 또는 이름을 입력하여 사용 가능한 옵션을 확인하세요",
"domainPickerDescription": "Enter the full domain of the resource to see available options.",
"domainPickerDescriptionSaas": "Enter a full domain, subdomain, or just a name to see available options",
"domainPickerTabAll": "모두",
"domainPickerTabOrganization": "조직",
"domainPickerTabProvided": "제공 됨",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "보안 키가 성공적으로 제거되었습니다",
"securityKeyRemoveError": "보안 키 제거 실패",
"securityKeyLoadError": "보안 키를 불러오는 데 실패했습니다",
"securityKeyLogin": "보안 키로 로그인",
"securityKeyLogin": "Continue with security key",
"securityKeyAuthError": "보안 키를 사용한 인증 실패",
"securityKeyRecommendation": "항상 계정에 액세스할 수 있도록 다른 장치에 백업 보안 키를 등록하세요.",
"registering": "등록 중...",

View file

@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "Er is een nieuwe versie van Newt beschikbaar. Update naar de nieuwste versie voor de beste ervaring.",
"domainPickerEnterDomain": "Voer je domein in",
"domainPickerPlaceholder": "mijnapp.voorbeeld.com, api.v1.mijndomein.com, of gewoon mijnapp",
"domainPickerDescription": "Voer een volledig domein, subdomein of alleen een naam in om beschikbare opties te zien",
"domainPickerDescription": "Voer de volledige domein van de bron in om beschikbare opties te zien.",
"domainPickerDescriptionSaas": "Voer een volledig domein, subdomein of gewoon een naam in om beschikbare opties te zien",
"domainPickerTabAll": "Alles",
"domainPickerTabOrganization": "Organisatie",
"domainPickerTabProvided": "Aangeboden",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Beveiligingssleutel succesvol verwijderd",
"securityKeyRemoveError": "Fout bij verwijderen van beveiligingssleutel",
"securityKeyLoadError": "Fout bij laden van beveiligingssleutels",
"securityKeyLogin": "Inloggen met beveiligingssleutel",
"securityKeyLogin": "Doorgaan met beveiligingssleutel",
"securityKeyAuthError": "Fout bij authenticatie met beveiligingssleutel",
"securityKeyRecommendation": "Overweeg om een andere beveiligingssleutel te registreren op een ander apparaat om ervoor te zorgen dat u niet buitengesloten raakt van uw account.",
"registering": "Registreren...",

View file

@ -1174,7 +1174,7 @@
"billing": "Fakturowanie",
"orgBillingDescription": "Zarządzaj swoimi informacjami rozliczeniowymi i subskrypcjami",
"github": "GitHub",
"pangolinHosted": "Pangolin Hosted",
"pangolinHosted": "Logo Pangolin",
"fossorial": "Fossorial",
"completeAccountSetup": "Zakończ konfigurację konta",
"completeAccountSetupDescription": "Ustaw swoje hasło, aby rozpocząć",
@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "Nowa wersja Newt jest dostępna. Prosimy o aktualizację do najnowszej wersji dla najlepszej pracy.",
"domainPickerEnterDomain": "Wprowadź swoją domenę",
"domainPickerPlaceholder": "myapp.example.com, api.v1.mydomain.com lub po prostu myapp",
"domainPickerDescription": "Wprowadź pełną domenę, subdomenę, lub po prostu nazwę, aby zobaczyć dostępne opcje",
"domainPickerDescription": "Wpisz pełną domenę zasobu, aby zobaczyć dostępne opcje.",
"domainPickerDescriptionSaas": "Wprowadź pełną domenę, subdomenę lub po prostu nazwę, aby zobaczyć dostępne opcje",
"domainPickerTabAll": "Wszystko",
"domainPickerTabOrganization": "Organizacja",
"domainPickerTabProvided": "Dostarczona",
@ -1265,7 +1266,7 @@
"createDomainName": "Nazwa:",
"createDomainValue": "Wartość:",
"createDomainCnameRecords": "Rekordy CNAME",
"createDomainRecordNumber": "Record {number}",
"createDomainRecordNumber": "Rekord {number}",
"createDomainTxtRecords": "Rekordy TXT",
"createDomainSaveTheseRecords": "Zapisz te rekordy",
"createDomainSaveTheseRecordsDescription": "Upewnij się, że zapiszesz te rekordy DNS, ponieważ nie będziesz mieć ich ponownie na ekranie.",

View file

@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "Uma nova versão do Newt está disponível. Atualize para a versão mais recente para uma melhor experiência.",
"domainPickerEnterDomain": "Insira seu domínio",
"domainPickerPlaceholder": "meuapp.exemplo.com, api.v1.meudominio.com, ou apenas meuapp",
"domainPickerDescription": "Digite um domínio completo, subdomínio, ou apenas um nome para ver opções disponíveis",
"domainPickerDescription": "Insira o domínio completo do recurso para ver as opções disponíveis.",
"domainPickerDescriptionSaas": "Insira um domínio completo, subdomínio ou apenas um nome para ver as opções disponíveis",
"domainPickerTabAll": "Todos",
"domainPickerTabOrganization": "Organização",
"domainPickerTabProvided": "Fornecido",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Chave de segurança removida com sucesso",
"securityKeyRemoveError": "Erro ao remover chave de segurança",
"securityKeyLoadError": "Erro ao carregar chaves de segurança",
"securityKeyLogin": "Entrar com chave de segurança",
"securityKeyLogin": "Continuar com a chave de segurança",
"securityKeyAuthError": "Erro ao autenticar com chave de segurança",
"securityKeyRecommendation": "Considere registrar outra chave de segurança em um dispositivo diferente para garantir que você não fique bloqueado da sua conta.",
"registering": "Registrando...",

View file

@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "A new version of Newt is available. Please update to the latest version for the best experience.",
"domainPickerEnterDomain": "Enter your domain",
"domainPickerPlaceholder": "myapp.example.com, api.v1.mydomain.com, or just myapp",
"domainPickerDescription": "Enter a full domain, subdomain, or just a name to see available options",
"domainPickerDescription": "Enter the full domain of the resource to see available options.",
"domainPickerDescriptionSaas": "Enter a full domain, subdomain, or just a name to see available options",
"domainPickerTabAll": "All",
"domainPickerTabOrganization": "Organization",
"domainPickerTabProvided": "Provided",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Security key removed successfully",
"securityKeyRemoveError": "Failed to remove security key",
"securityKeyLoadError": "Failed to load security keys",
"securityKeyLogin": "Sign in with security key",
"securityKeyLogin": "Continue with security key",
"securityKeyAuthError": "Failed to authenticate with security key",
"securityKeyRecommendation": "Register a backup security key on another device to ensure you always have access to your account.",
"registering": "Registering...",

View file

@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "Newt'in yeni bir versiyonu mevcut. En iyi deneyim için lütfen en son sürüme güncelleyin.",
"domainPickerEnterDomain": "Alan adınızı girin",
"domainPickerPlaceholder": "myapp.example.com, api.v1.mydomain.com veya sadece myapp",
"domainPickerDescription": "Mevcut seçenekleri görmek için tam bir alan adı, alt alan adı veya sadece bir isim girin.",
"domainPickerDescription": "Mevcut seçenekleri görmek için kaynağın tam etki alanını girin.",
"domainPickerDescriptionSaas": "Mevcut seçenekleri görmek için tam etki alanı, alt etki alanı veya sadece bir isim girin",
"domainPickerTabAll": "Tümü",
"domainPickerTabOrganization": "Organizasyon",
"domainPickerTabProvided": "Sağlanan",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "Güvenlik anahtarı başarıyla kaldırıldı",
"securityKeyRemoveError": "Güvenlik anahtarı kaldırılırken hata oluştu",
"securityKeyLoadError": "Güvenlik anahtarları yüklenirken hata oluştu",
"securityKeyLogin": "Güvenlik anahtarı ile giriş yap",
"securityKeyLogin": "Güvenlik anahtarı ile devam edin",
"securityKeyAuthError": "Güvenlik anahtarı ile kimlik doğrulama başarısız oldu",
"securityKeyRecommendation": "Hesabınızdan kilitlenmediğinizden emin olmak için farklı bir cihazda başka bir güvenlik anahtarı kaydetmeyi düşünün.",
"registering": "Kaydediliyor...",

View file

@ -13,7 +13,7 @@
"welcome": "欢迎使用 Pangolin",
"welcomeTo": "欢迎来到",
"componentsCreateOrg": "创建组织",
"componentsMember": "You're a member of {count, plural, =0 {no organization} one {one organization} other {# organizations}}.",
"componentsMember": "您属于{count, plural, =0 {没有组织} one {一个组织} other {# 个组织}}。",
"componentsInvalidKey": "检测到无效或过期的许可证密钥。按照许可证条款操作以继续使用所有功能。",
"dismiss": "忽略",
"componentsLicenseViolation": "许可证超限:该服务器使用了 {usedSites} 个站点,已超过授权的 {maxSites} 个。请遵守许可证条款以继续使用全部功能。",
@ -349,7 +349,7 @@
"licensePurchase": "购买许可证",
"licensePurchaseSites": "购买更多站点",
"licenseSitesUsedMax": "使用了 {usedSites}/{maxSites} 个站点",
"licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}} in system.",
"licenseSitesUsed": "{count, plural, =0 {# 站点} one {# 站点} other {# 站点}}",
"licensePurchaseDescription": "请选择您希望 {selectedMode, select, license {直接购买许可证,您可以随时增加更多站点。} other {为现有许可证购买更多站点}}",
"licenseFee": "许可证费用",
"licensePriceSite": "每个站点的价格",
@ -1198,7 +1198,8 @@
"newtUpdateAvailableInfo": "新版本的 Newt 已可用。请更新到最新版本以获得最佳体验。",
"domainPickerEnterDomain": "输入您的域",
"domainPickerPlaceholder": "myapp.example.com、api.v1.mydomain.com 或仅 myapp",
"domainPickerDescription": "输入完整域名、子域或仅输入名称以查看可用选项",
"domainPickerDescription": "输入资源的完整域名以查看可用选项。",
"domainPickerDescriptionSaas": "输入完整域名、子域或名称以查看可用选项。",
"domainPickerTabAll": "所有",
"domainPickerTabOrganization": "组织",
"domainPickerTabProvided": "提供的",
@ -1231,7 +1232,7 @@
"securityKeyRemoveSuccess": "安全密钥删除成功",
"securityKeyRemoveError": "删除安全密钥失败",
"securityKeyLoadError": "加载安全密钥失败",
"securityKeyLogin": "使用安全密钥登录",
"securityKeyLogin": "使用安全密钥继续",
"securityKeyAuthError": "使用安全密钥认证失败",
"securityKeyRecommendation": "考虑在其他设备上注册另一个安全密钥,以确保不会被锁定在您的账户之外。",
"registering": "注册中...",