diff --git a/messages/bg-BG.json b/messages/bg-BG.json index 63358e2e3..296715a4c 100644 --- a/messages/bg-BG.json +++ b/messages/bg-BG.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Пробният Ви период изтича след {countdown}. Актуализирайте за запазване на достъпа.", "trialBannerExpired": "Пробният Ви период е изтекъл. Актуализирайте сега, за да възстановите достъпа.", "billingTrialBannerTitle": "Пробният период е активен", - "billingTrialBannerDescription": "В момента сте в пробен период на бизнес ниво. След края на пробния период, вашият акаунт автоматично ще бъде върнат към функциите и ограниченията на основното ниво. Надградете по всяко време, за да запазите достъпа до текущите функции на плана.", + "billingTrialBannerDescription": "В момента сте на безплатен пробен период на {tier} ниво. Когато пробният период приключи, вашият акаунт автоматично ще се върне към функциите и ограниченията на основното ниво. Надградете по всяко време, за да запазите достъпа до настоящите функции на плана си.", "billingTrialBannerUpgrade": "Надградете сега", "billingTrialBadge": "Пробен период", "trialActive": "Активен пробен период", @@ -110,7 +110,7 @@ "siteInstallNewt": "Инсталирайте Newt", "siteInstallNewtDescription": "Пуснете Newt на вашата система", "siteInstallKubernetesDocsDescription": "За повече и актуална информация относно инсталацията на Kubernetes, вижте docs.pangolin.net/manage/sites/install-kubernetes.", - "siteInstallAdvantechDocsDescription": "За инструкции за инсталиране на Advantech модем, вижте docs.pangolin.net/manage/sites/install-newt#advantech-router-app.", + "siteInstallAdvantechDocsDescription": "За инструкции за инсталиране на Advantech модем вижте docs.pangolin.net/manage/sites/install-newt#advantech-router-app.", "WgConfiguration": "WireGuard конфигурация", "WgConfigurationDescription": "Използвайте следната конфигурация, за да се свържете с мрежата", "operatingSystem": "Операционна система", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Сигурни ли сте, че искате да рестартирате WireGuard тунела за {name}? Сайтът ще изгуби връзка за кратко.", "siteRestartWarning": "Сайтът ще се изключи за кратко, докато тунелът се рестартира.", "siteRestarted": "Сайтът е рестартиран", - "siteRestartedDescription": "WireGuard тунелът е рестартиран.", + "siteRestartedDescription": "Сайтът беше рестартиран.", "siteErrorRestart": "Неуспешно рестартиране на сайта", "siteErrorRestartDescription": "Възникна грешка при рестартирането на сайта.", "siteSettingDescription": "Конфигурирайте настройките на сайта", @@ -234,6 +234,9 @@ "clientResourceDescription": "Създайте и управлявайте ресурси, които са достъпни само чрез свързан клиент.", "privateResourcesBannerTitle": "Достъп до частни ресурси с нулево доверие.", "privateResourcesBannerDescription": "Частните ресурси използват сигурност с нулево доверие, осигурявайки че потребителите и машините могат да имат само достъп до ресурси, които вие изрично предоставяте. Свържете потребителските устройства или машинните клиенти, за да получите достъп до тези ресурси чрез сигурна виртуална частна мрежа.", + "licenseBillingBannerTitle": "Управление на фактуриране за лиценза", + "licenseBillingBannerDescription": "За да управлявате фактурирането за вашите лицензионни ключове, включително методи на плащане и фактури, посетете страницата за фактуриране. Можете да генерирате допълнителни лицензи, за да увеличите сървърната си мощност или да разклоните повече инстанции.", + "licenseBillingBannerButton": "Отидете към фактурирането", "resourcesSearch": "Търсене на ресурси...", "resourceAdd": "Добавете ресурс", "resourceErrorDelte": "Грешка при изтриване на ресурс", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Излагане на CIDR обхват в мрежата на сайта към свързани клиенти", "privateResourceTypeHttpDescription": "Достъп до HTTP или HTTPS услуга чрез домейн", "privateResourceTypeSshDescription": "Достъп до SSH сървър от свързани клиенти", + "privateResourceTypeGatewayDescription": "Изпратете целия интернет трафик да излезе през мрежата на сайта.", + "resourceTypeGatewayDescription": "Изпратете целия интернет трафик да излезе през мрежата на сайта.", "resourceDomainDescription": "Ресурсът ще се обслужва на това напълно квалифицирано име на домейн.", "resourceHTTPSSettings": "HTTPS настройки", "resourceHTTPSSettingsDescription": "Конфигурирайте как ресурсът ще бъде достъпен по HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Отключете корпоративните функции за вашият хостинг на Pangolin. Закупете лицензионен ключ, за да активирате премиум възможности, след това го добавете по-долу.", "licenseBannerGetLicense": "Вземете лиценз", "licenseBannerViewDocs": "Преглед на документацията", + "licenseUpgradeBannerTitle": "Нуждаете се от повече капацитет?", + "licenseUpgradeBannerDescription": "Ако трябва да увеличите капацитета на сайт или потребител, можете да закупите повече лицензи от портала app.pangolin.net и да ги добавите по-долу за да надградите вашата инстанция.", + "licenseUpgradeBannerButton": "Закупете повече лицензи", + "licenseMultipleKeysDescription": "Имате активирани множество лицензи на този сървър. Използва се най-високият наличен.", "communityEdition": "Комюнити издание", "licenseAboutDescription": "Това е за бизнес и корпоративни потребители, които използват Pangolin в търговска среда. Ако използвате Pangolin за лична употреба, можете да игнорирате този раздел.", "licenseKeyActivated": "Лицензионният ключ е активиран", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Сигурни ли сте, че искате да премахнете лицензионния ключ?", "licenseKeyDelete": "Изтриване на лицензионен ключ", "licenseKeyDeleteConfirm": "Потвърдете изтриването на лицензионен ключ", - "licenseTitle": "Управление на лицензионния статус", + "licenseTitle": "Управление на лицензи", "licenseTitleDescription": "Преглед и управление на лицензионни ключове в системата", - "licenseHost": "Лиценз за хост", - "licenseHostDescription": "Управление на главния лицензионен ключ за хоста.", + "licenseHost": "Лиценз", + "licenseHostDescription": "Вижте нивото на лиценза и информацията за хоста", "licensedNot": "Не е лицензиран", "hostId": "Идентификатор на хост", "licenseReckeckAll": "Повторно проверяване на всички ключове", @@ -586,7 +595,16 @@ "licensePurchase": "Закупуване на лиценз", "licensePurchaseSites": "Закупуване на допълнителни сайтове", "licenseSitesUsedMax": "{usedSites} от {maxSites} сайтове използвани", - "licenseSitesUsed": "{count, plural, =0 {# сайта} one {# сайт} other {# сайта}} в системата.", + "licenseSitesUsed": "{count, plural, =0 {# сайта} one {# сайт} other {# сайта}}", + "licenseUsage": "Използване", + "licenseUsageDescription": "Вижте броя на потребителите и сайтовете, лицензирани за този хост", + "licenseUsageSites": "Сайтове", + "licenseUsageUsers": "Потребители", + "licenseNoUserLimit": "Няма лимит за броя на потребителите използващи нелицензиран хост", + "licenseUsersUsedMax": "{usedUsers} от {maxUsers} използвани потребители", + "licenseUsersUsed": "{count, plural, =0 {# потребители} one {# потребител} other {# потребители}}", + "licenseUnlimited": "Неограничено", + "licenseTierLabel": "Ниво", "licensePurchaseDescription": "Изберете колко сайтове искате да {selectedMode, select, license {закупите лиценз за. Можете винаги да добавите повече сайтове по-късно.} other {добавите към съществуващия си лиценз.}}", "licenseFee": "Такса за лиценз", "licensePriceSite": "Цена на сайт", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Всяко правило трябва да има уникален номер на приоритет.", "rulesErrorValidation": "Невалидни правила", "rulesErrorValidationRuleDescription": "Правило {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Изберете валиден тип съвпадение (път, IP, CIDR, държава, регион или ASN).", + "rulesErrorInvalidMatchTypeDescription": "Изберете валиден тип съвпадение (път, IP, CIDR, държава, регион, ASN или метод).", "rulesErrorValueRequired": "Въведете стойност за това правило.", "rulesErrorInvalidCountry": "Невалидна държава", "rulesErrorInvalidCountryDescription": "Изберете валидна държава.", @@ -2826,10 +2844,10 @@ "retryAttempts": "Опити за повторно", "expectedResponseCodes": "Очаквани кодове за отговор", "expectedResponseCodesDescription": "HTTP статус код, указващ здравословно състояние. Ако бъде оставено празно, между 200-300 се счита за здравословно.", - "customRequestHeaders": "Персонализирани заглавия на заявката", - "customRequestHeadersDescription": "Заглавия на заявката, изпратени до целевите сървъри. По едно на ред: Заглавие-Име: стойност", - "customResponseHeaders": "Персонализирани заглавия на отговора", - "customResponseHeadersDescription": "Заглавия на отговора, върнати на клиента. По едно на ред: Заглавие-Име: стойност", + "customRequestHeaders": "Персонализирани заглавия на заявки", + "customRequestHeadersDescription": "Заявете заглавия, изпратени към целите в долната част на линията. По една на ред: Име на заглавието: стойност", + "customResponseHeaders": "Персонализирани заглавия на отговори", + "customResponseHeadersDescription": "Отговорните заглавия, изпратени обратно към клиента. По една на ред: Име на заглавието: стойност", "headersValidationError": "Заглавията трябва да бъдат във формат: Име на заглавието: стойност.", "saveHealthCheck": "Запазване на проверка на здравето", "healthCheckSaved": "Проверка на здравето е запазена", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Порт", "editInternalResourceDialogModeHost": "Хост", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Изходен възел", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI Портал", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.", "editInternalResourceDialogDestinationIPDescription": "IP адресът или името на хоста на ресурса в мрежата на сайта.", "editInternalResourceDialogDestinationCidrDescription": "CIDR диапазонът на ресурса в мрежата на сайта.", + "editInternalResourceDialogDestinationGatewayDescription": "Избраните сайтове да се използват като изходни възли за този ресурс", "editInternalResourceDialogAlias": "Псевдоним", "editInternalResourceDialogAliasDescription": "По избор вътрешен DNS псевдоним за този ресурс.", "createInternalResourceDialogNoSitesAvailable": "Няма достъпни сайтове", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Контролирайте достъпа до TCP/UDP портовете и дали ICMP пинг е разрешен за този ресурс.", "hostSettings": "Хост", "cidrSettings": "CIDR", + "gatewaySettings": "Изходен възел", "createInternalResourceDialogResourceProperties": "Свойства на ресурса", "createInternalResourceDialogName": "Име", "createInternalResourceDialogSite": "Сайт", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI Портал", + "createInternalResourceDialogModeGateway": "Изходен възел", "scheme": "Метод", "createInternalResourceDialogScheme": "Метод", "createInternalResourceDialogEnableSsl": "Активиране на TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Запомнете този идентификатор на организацията.", "orgAuthBackToSignIn": "Назад към стандартния вход.", "orgAuthNoAccount": "Нямате профил?", - "subscriptionRequiredToUse": "Необходим е абонамент, за да използвате тази функция.", - "mustUpgradeToUse": "Трябва да повишите своя абонамент, за да използвате тази функция.", + "subscriptionRequiredToUse": "За да използвате тази функция е необходим абонамент. Запазете демо", + "mustUpgradeToUse": "Трябва да повишите своя абонамент, за да използвате тази функция. Запазете демо", "subscriptionRequiredTierToUse": "Тази функция изисква {tier} или по-висок план.", - "upgradeToTierToUse": "Повишете до {tier} или по-висок план, за да използвате тази функция.", + "upgradeToTierToUse": "Повишете до {tier} за да използвате тази функция. Запазете демо", "subscriptionTierTier1": "Домашен", "subscriptionTierTier2": "Екип", "subscriptionTierTier3": "Бизнес", @@ -3651,8 +3673,8 @@ "sourceAddress": "Източен адрес", "destinationAddress": "Адрес на дестинация", "duration": "Продължителност", - "licenseRequiredToUse": "Ентерпрайз Едишън лиценз е необходим. Резервирайте демо или проба", - "ossEnterpriseEditionRequired": "Ентерпрайз Едишън лиценз е необходим. Резервирайте демо или проба", + "licenseRequiredToUse": "Необходим е лизенз за Enterprise Edition. Запазете демо", + "ossEnterpriseEditionRequired": "Необходим е лизенз за Enterprise Edition. Запазете демо", "certResolver": "Решавач на сертификати", "certResolverDescription": "Изберете решавач на сертификати за използване за този ресурс.", "selectCertResolver": "Изберете решавач на сертификати", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Проверка на оторизацията на устройството...", "signedInAs": "Вписан като", "deviceCodeEnterPrompt": "Въведете кода, показан на устройството", + "deviceCodeConfirmPrompt": "Потвърдете, че това съвпада с кода на вашето устройство", "continue": "Продължете", "deviceUnknownLocation": "Неизвестно местоположение", "deviceAuthorizationRequested": "Това разрешение беше заявено от {location} на {date}. Уверете се, че се доверявате на това устройство, тъй като то ще получи достъп до акаунта.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Методи на автентикация, активирани за този ресурс.", "resourceLauncherPrivateClientRequired": "Свържете се с клиент на вашето устройство, за да получите частен достъп до този ресурс.", "resourceLauncherPrivateClientRequiredTitle": "Изисква се връзка с клиента", + "resourceLauncherExitNodeTitle": "Рутиранe на изходния възел", + "resourceLauncherExitNodeDescription": "След като свържете своя клиент, изберете този изходен възел в менюто на клиента, за да насочите целия трафик през прикрепените сайтове.", "resourceLauncherDownloadClient": "Изтеглете клиент", "resourceLauncherFailedToLoadDetails": "Не може да се зареди информацията за ресурса. Може вече да нямате достъп до този ресурс.", "resourceLauncherNoPortRestrictions": "Няма ограничения за порт", + "resourceLauncherAllInternetTraffic": "Целия интернет трафик", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Без Етикет", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Показване на лентата с инструменти", "sessionToolbarHide": "Скриване на лентата с инструменти", "actionUpdateSiteApprovals": "Обновяване на одобренията на сайта", - "check": "Проверка" + "check": "Проверка", + "rulesErrorInvalidMethod": "Невалиден HTTP метод", + "rulesErrorInvalidMethodDescription": "Изберете поне един HTTP метод.", + "rulesSelectMethods": "Изберете методи" } diff --git a/messages/cs-CZ.json b/messages/cs-CZ.json index 22f34ceb9..8d71372b2 100644 --- a/messages/cs-CZ.json +++ b/messages/cs-CZ.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Vaše zkušební verze vyprší za {countdown}. Pro udržení přístupu upgraduje.", "trialBannerExpired": "Vaše zkušební verze vypršela. Upgradujte nyní pro obnovu přístupu.", "billingTrialBannerTitle": "Aktivní zkušební verze", - "billingTrialBannerDescription": "Právě používáte zkušební verzi na úrovni business. Po skončení zkušební verze se váš účet automaticky vrátí k funkcím a limitům úrovně Basic. Upgradujte kdykoli pro zachování přístupu k funkcím vašeho aktuálního plánu.", + "billingTrialBannerDescription": "Právě používáte zkušební verzi na úrovni {tier}. Po skončení zkušební verze se váš účet automaticky vrátí k funkcím a limitům úrovně Basic. Upgradujte kdykoli pro zachování přístupu k funkcím vašeho aktuálního plánu.", "billingTrialBannerUpgrade": "Upgradovat nyní", "billingTrialBadge": "Zkušební verze", "trialActive": "Zkušební verze je aktivní", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Opravdu chcete restartovat WireGuard tunel pro {name}? Lokalita krátce ztratí konektivitu.", "siteRestartWarning": "Lokalita bude krátce odpojena, zatímco se tunel restartuje.", "siteRestarted": "Lokalita restartována", - "siteRestartedDescription": "Tunel WireGuard byl restartován.", + "siteRestartedDescription": "Stránka byla restartována.", "siteErrorRestart": "Nepodařilo se restartovat lokalitu", "siteErrorRestartDescription": "Při restartování lokality došlo k chybě.", "siteSettingDescription": "Konfigurace nastavení na webu", @@ -234,6 +234,9 @@ "clientResourceDescription": "Vytváření a správa zdrojů, které jsou přístupné pouze prostřednictvím připojeného klienta", "privateResourcesBannerTitle": "Zero-Trust soukromý přístup", "privateResourcesBannerDescription": "Soukromé prostředky používají zero-trust zabezpečení, což zajišťuje, že uživatelé a zařízení mohou získat přístup pouze k prostředkům, k nimž máte explicitní práva. Připojte zařízení uživatele nebo klientské stroje, abyste získali přístup k těmto prostředkům přes zabezpečenou virtuální soukromou síť.", + "licenseBillingBannerTitle": "Správa fakturace licence", + "licenseBillingBannerDescription": "Pokud chcete spravovat fakturaci klíčů licence, včetně platebních metod a faktur, navštivte fakturační stránku. Níže můžete generovat další licence pro zvýšení kapacity serveru nebo nasazení více instancí.", + "licenseBillingBannerButton": "Přejít na fakturaci", "resourcesSearch": "Prohledat zdroje...", "resourceAdd": "Přidat zdroj", "resourceErrorDelte": "Chyba při odstraňování zdroje", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Vystavit CIDR rozsah na síti stránky propojeným klientům", "privateResourceTypeHttpDescription": "Přístup ke službě HTTP nebo HTTPS pomocí domény", "privateResourceTypeSshDescription": "Přístup k SSH serveru připojenými klienty", + "privateResourceTypeGatewayDescription": "Odesílejte veškerý internetový provoz k výstupu přes síť lokality.", + "resourceTypeGatewayDescription": "Odesílejte veškerý internetový provoz k výstupu přes síť lokality.", "resourceDomainDescription": "Zdroji bude obsluhován tento plně kvalifikovaný doménový název.", "resourceHTTPSSettings": "Nastavení HTTPS", "resourceHTTPSSettingsDescription": "Nakonfigurujte, jak bude dokument přístupný přes HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Odemkněte firemní funkce pro vaši samohostovanou instanci Pangolin. Zakupte si licenční klíč pro aktivaci prémiových možností a poté jej přidejte níže.", "licenseBannerGetLicense": "Zakoupit licenci", "licenseBannerViewDocs": "Zobrazit dokumentaci", + "licenseUpgradeBannerTitle": "Potřebujete více kapacity?", + "licenseUpgradeBannerDescription": "Pokud potřebujete zvýšit kapacitu webu nebo uživatele, můžete zakoupit více licencí na portálu app.pangolin.net a přidat je níže pro upgrade vaší instance.", + "licenseUpgradeBannerButton": "Koupit více licencí", + "licenseMultipleKeysDescription": "Na tomto serveru máte aktivováno více licencí. Použita je nejvyšší úroveň.", "communityEdition": "Komunitní edice", "licenseAboutDescription": "To je pro obchodní a podnikové uživatele, kteří používají Pangolin v komerčním prostředí. Pokud používáte Pangolin pro osobní použití, můžete tuto sekci ignorovat.", "licenseKeyActivated": "Licenční klíč aktivován", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Jste si jisti, že chcete odstranit licenční klíč?", "licenseKeyDelete": "Odstranit licenční klíč", "licenseKeyDeleteConfirm": "Potvrdit odstranění licenčního klíče", - "licenseTitle": "Správa stavu licence", + "licenseTitle": "Správa licencí", "licenseTitleDescription": "Zobrazit a spravovat licenční klíče v systému", - "licenseHost": "Licence hostitele", - "licenseHostDescription": "Správa hlavního licenčního klíče pro hostitele.", + "licenseHost": "Licence", + "licenseHostDescription": "Prohlédněte si úroveň licence a informace o hostiteli", "licensedNot": "Bez licence", "hostId": "ID hostitele", "licenseReckeckAll": "Znovu zobrazit všechny klíče", @@ -586,7 +595,16 @@ "licensePurchase": "Zakoupit licenci", "licensePurchaseSites": "Zakoupit další stránky", "licenseSitesUsedMax": "{usedSites} použitých stránek {maxSites}", - "licenseSitesUsed": "{count, plural, =0 {# stránek} one {# stránky} other {# stránek}}", + "licenseSitesUsed": "{count, plural, =0 {# stránek} one {# stránka} few {# stránky} many {# stránek} other {# stránek}}", + "licenseUsage": "Využití", + "licenseUsageDescription": "Zobrazit počet uživatelů a lokalit licencovaných pro tohoto hostitele", + "licenseUsageSites": "Lokality", + "licenseUsageUsers": "Uživatelé", + "licenseNoUserLimit": "Počet uživatelů používajících nelicencovaného hostitele není omezen", + "licenseUsersUsedMax": "{usedUsers} z {maxUsers} použitých uživatelů", + "licenseUsersUsed": "{count, plural, =0 {# uživatelů} one {# uživatel} few {# uživatelé} many {# uživatelů} other {# uživatelů}}", + "licenseUnlimited": "Bez omezení", + "licenseTierLabel": "Úroveň", "licensePurchaseDescription": "Vyberte kolik stránek chcete {selectedMode, select, license {Zakupte si licenci. Vždy můžete přidat více webů později.} other {Přidejte k vaší existující licenci.}}", "licenseFee": "Licenční poplatek", "licensePriceSite": "Cena za stránku", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Každé pravidlo musí mít unikátní číslo priority.", "rulesErrorValidation": "Neplatná pravidla", "rulesErrorValidationRuleDescription": "Pravidlo {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Vyberte platný typ shody (cesta, IP, CIDR, země, oblast nebo ASN).", + "rulesErrorInvalidMatchTypeDescription": "Vyberte platný typ shody (cesta, IP, CIDR, země, oblast, ASN nebo metoda).", "rulesErrorValueRequired": "Zadejte hodnotu pro toto pravidlo.", "rulesErrorInvalidCountry": "Neplatná země", "rulesErrorInvalidCountryDescription": "Vyberte platnou zemi.", @@ -2826,10 +2844,10 @@ "retryAttempts": "Opakovat pokusy", "expectedResponseCodes": "Očekávané kódy odezvy", "expectedResponseCodesDescription": "HTTP kód stavu, který označuje zdravý stav. Ponecháte-li prázdné, 200-300 je považováno za zdravé.", - "customRequestHeaders": "Vlastní záhlaví požadavku", - "customRequestHeadersDescription": "Záhlaví požadavku odeslaná do cílů. Jedno na řádek: Název-záhlaví: hodnota", + "customRequestHeaders": "Vlastní záhlaví žádosti", + "customRequestHeadersDescription": "Žádost odesílající záhlaví cíli dolů. Jedno na řádku: Název záhlaví: hodnota", "customResponseHeaders": "Vlastní záhlaví odpovědi", - "customResponseHeadersDescription": "Záhlaví odpovědi vrácená klientovi. Jedno na řádek: Název-záhlaví: hodnota", + "customResponseHeadersDescription": "Odezvová záhlaví odeslaná klientovi. Jedno na řádku: Název záhlaví: hodnota", "headersValidationError": "Headers must be in the format: Header-Name: value.", "saveHealthCheck": "Uložit kontrolu stavu", "healthCheckSaved": "Kontrola stavu uložena", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Přístav", "editInternalResourceDialogModeHost": "Hostitel", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Ukončit uzel", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI brána", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "IP adresa nebo název hostitele zdroje v síti webu.", "editInternalResourceDialogDestinationIPDescription": "IP nebo název hostitele zdroje v síti webu.", "editInternalResourceDialogDestinationCidrDescription": "Rozsah zdrojů CIDR v síti webu.", + "editInternalResourceDialogDestinationGatewayDescription": "Lokality, které používají ukončovací uzly pro tento zdroj", "editInternalResourceDialogAlias": "Přezdívka", "editInternalResourceDialogAliasDescription": "Volitelný interní DNS alias pro tento dokument.", "createInternalResourceDialogNoSitesAvailable": "Nejsou k dispozici žádné weby", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Ovládejte přístup k TCP/UDP portům a zda je pro tento zdroj povolen ICMP ping.", "hostSettings": "Hostitel", "cidrSettings": "CIDR", + "gatewaySettings": "Ukončit uzel", "createInternalResourceDialogResourceProperties": "Vlastnosti zdroje", "createInternalResourceDialogName": "Jméno", "createInternalResourceDialogSite": "Lokalita", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI brána", + "createInternalResourceDialogModeGateway": "Ukončit uzel", "scheme": "Schéma", "createInternalResourceDialogScheme": "Schéma", "createInternalResourceDialogEnableSsl": "Povolit TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Zapamatujte si toto ID organizace", "orgAuthBackToSignIn": "Zpět ke standardnímu přihlášení", "orgAuthNoAccount": "Nemáte účet?", - "subscriptionRequiredToUse": "Pro použití této funkce je vyžadováno předplatné.", - "mustUpgradeToUse": "Pro použití této funkce musíte aktualizovat své předplatné.", + "subscriptionRequiredToUse": "Pro použití této funkce je vyžadováno předplatné. Zarezervujte si demo", + "mustUpgradeToUse": "Pro použití této funkce musíte aktualizovat své předplatné. Zarezervujte si demo", "subscriptionRequiredTierToUse": "Tato funkce vyžaduje {tier} nebo vyšší.", - "upgradeToTierToUse": "Pro použití této funkce upgradujte na {tier} nebo vyšší.", + "upgradeToTierToUse": "Pro použití této funkce upgradujte na {tier}. Zarezervujte si demo", "subscriptionTierTier1": "Domů", "subscriptionTierTier2": "Tým", "subscriptionTierTier3": "Podniky", @@ -3651,8 +3673,8 @@ "sourceAddress": "Zdrojová adresa", "destinationAddress": "Cílová adresa", "duration": "Doba trvání", - "licenseRequiredToUse": "Licence Enterprise Edition je nutná. Zarezervujte si ukázku nebo vyzkoušení", - "ossEnterpriseEditionRequired": "Licence Enterprise Edition je nutná. Zarezervujte si ukázku nebo vyzkoušení", + "licenseRequiredToUse": "Licence Enterprise Edition je nutná. Zarezervujte si demo", + "ossEnterpriseEditionRequired": "Licence Enterprise Edition je nutná. Zarezervujte si demo", "certResolver": "Oddělovač certifikátů", "certResolverDescription": "Vyberte řešitele certifikátů pro tento dokument.", "selectCertResolver": "Vyberte řešič certifikátů", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Ověřování autorizace zařízení...", "signedInAs": "Přihlášen jako", "deviceCodeEnterPrompt": "Zadejte kód zobrazený na zařízení", + "deviceCodeConfirmPrompt": "Potvrďte, že se shoduje kód na vašem zařízení", "continue": "Pokračovat", "deviceUnknownLocation": "Neznámá poloha", "deviceAuthorizationRequested": "Tato autorizace byla vyžádána od {location} na {date}. Ujistěte se, že tomuto zařízení věříte, protože získá přístup k účtu.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Povolené metody autentizace pro tento zdroj.", "resourceLauncherPrivateClientRequired": "Připojte se s klientem na vašem zařízení, abyste měli k tomuto zdroji soukromý přístup.", "resourceLauncherPrivateClientRequiredTitle": "K připojení klienta vyžadováno", + "resourceLauncherExitNodeTitle": "Trasa ukončovacího uzlu", + "resourceLauncherExitNodeDescription": "Po připojení klienta vyberte tento ukončovací uzel v menu klienta, aby všechen provoz šel přes připojené lokality.", "resourceLauncherDownloadClient": "Stáhnout klienta", "resourceLauncherFailedToLoadDetails": "Nemohu načíst podrobnosti o zdroji. K tomuto zdroji možná již nemáte přístup.", "resourceLauncherNoPortRestrictions": "Žádná omezení portu", + "resourceLauncherAllInternetTraffic": "Veškerý internetový provoz", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Bez nálepky", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Zobrazit panel nástrojů", "sessionToolbarHide": "Skrýt panel nástrojů", "actionUpdateSiteApprovals": "Aktualizovat schválení webu", - "check": "Zkontrolovat" + "check": "Zkontrolovat", + "rulesErrorInvalidMethod": "Neplatná HTTP metoda", + "rulesErrorInvalidMethodDescription": "Vyberte alespoň jednu HTTP metodu.", + "rulesSelectMethods": "Vyberte metody" } diff --git a/messages/da-DK.json b/messages/da-DK.json index 866853040..9c21d5e37 100644 --- a/messages/da-DK.json +++ b/messages/da-DK.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Din prøveperiode udløber om {countdown}. Opgrader for at bevare adgangen.", "trialBannerExpired": "Din prøveperiode er udløbet. Opgrader nu for at gendanne adgangen.", "billingTrialBannerTitle": "Prøveversion aktiv", - "billingTrialBannerDescription": "Du har i øjeblikket en gratis prøveversion på Business-niveauet. Når prøveperioden slutter, vil din konto automatisk gå tilbage til funktioner og begrænsninger på Basis-niveauet. Opgrader når som helst for at beholde adgang til de den nuværende plans funktioner.", + "billingTrialBannerDescription": "Du har i øjeblikket en gratis prøveversion på {tier} niveauet. Når prøveperioden slutter, vil din konto automatisk gå tilbage til funktioner og begrænsninger på Basis-niveauet. Opgrader når som helst for at beholde adgang til de nuværende plans funktioner.", "billingTrialBannerUpgrade": "Opgrader nu", "billingTrialBadge": "Prøveversion", "trialActive": "Gratis prøveversion aktiv", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Er du sikker på, at du vil genstarte WireGuard-tunnelen for {name}? Sitet vil kortvarigt miste forbindelsen.", "siteRestartWarning": "Sitet vil kortvarigt afbryde forbindelse, mens tunnelen genstarter.", "siteRestarted": "Site genstartet", - "siteRestartedDescription": "WireGuard-tunnelen er blevet genstartet.", + "siteRestartedDescription": "Sitet er blevet genstartet.", "siteErrorRestart": "Kunne ikke genstarte site", "siteErrorRestartDescription": "En fejl opstod, mens sitet blev genstartet.", "siteSettingDescription": "Konfigurer indstillingerne for sitet", @@ -234,6 +234,9 @@ "clientResourceDescription": "Oprette og administrer ressourcer som kun er tilgængelige via en tilsluttet klient", "privateResourcesBannerTitle": "Zero-Trust privat adgang", "privateResourcesBannerDescription": "Private ressourcer bruger Zero-Trust-sikkerhed og sikrer, at brugere og maskiner kun kan få adgang til ressourcer, du eksplicit giver tilladelse til. Tilslut brugerenheder eller maskinklienter for at få adgang til disse ressourcer via et sikkert virtuelt privat netværk.", + "licenseBillingBannerTitle": "Administrer fakturering til licens", + "licenseBillingBannerDescription": "For at administrere fakturering for dine licensnøgler, herunder betalingsmetoder og fakturaer, besøg faktureringssiden. Du kan generere ekstra licenser nedenfor for at øge serverkapacitet eller implementere flere instanser.", + "licenseBillingBannerButton": "Gå til fakturering", "resourcesSearch": "Søg i ressourcer...", "resourceAdd": "Tilføj ressource", "resourceErrorDelte": "Fejl ved sletning af ressource", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Eksponer et CIDR-område på sitenettet mod tilkoblede klienter", "privateResourceTypeHttpDescription": "Adgang til en HTTP eller HTTPS service gennem et domæne", "privateResourceTypeSshDescription": "Adgang til en SSH-server fra tilkoblede klienter", + "privateResourceTypeGatewayDescription": "Send al internettrafik for at gå ud igennem site-netværket.", + "resourceTypeGatewayDescription": "Send al internettrafik for at gå ud igennem site-netværket.", "resourceDomainDescription": "Ressourcen vil blive serveret på dette fuldstændigt kvalificerede domænenavnet.", "resourceHTTPSSettings": "HTTPS-indstillinger", "resourceHTTPSSettingsDescription": "Konfigurer hvordan ressourcen skal nås over HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Lås op for virksomhedsfunktioner på din selvhostede Pangolin-instans. Køb en licensnøgle for at aktivere premium-funktioner, og indtast den nedenfor.", "licenseBannerGetLicense": "Få en licens", "licenseBannerViewDocs": "Vis dokumentation", + "licenseUpgradeBannerTitle": "Behov for mere kapacitet?", + "licenseUpgradeBannerDescription": "Hvis du har behov for at øge din site- eller bruger kapacitet, kan du købe flere licenser fra app.pangolin.net portalen og tilføje dem nedenfor for at opgradere din instans.", + "licenseUpgradeBannerButton": "Køb flere licenser", + "licenseMultipleKeysDescription": "Du har flere licenser aktiveret på denne server. Den højeste niveau bruges.", "communityEdition": "Community-udgave", "licenseAboutDescription": "Dette er for virksomheds- og enterprise-brugere som bruger Pangolin i et kommercielt miljø. Hvis du bruger Pangolin til personlig brug, kan du ignorere denne sektionen.", "licenseKeyActivated": "Licensnøgle aktiveret", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Er du sikker på at du vil slette licensnøglen?", "licenseKeyDelete": "Slet Licensnøgle", "licenseKeyDeleteConfirm": "Bekræft sletning af licensnøgle", - "licenseTitle": "Administrer licensstatus", + "licenseTitle": "Administrer licenser", "licenseTitleDescription": "Se og administrer licensnøgler i systemet", - "licenseHost": "Hostlicens", - "licenseHostDescription": "Administrer hovedlicensnøglen for verten.", + "licenseHost": "Licens", + "licenseHostDescription": "Se licensniveauet og værtinformationer", "licensedNot": "Ikke licenseret", "hostId": "Host-ID", "licenseReckeckAll": "Bekræft alle nøgler", @@ -586,7 +595,16 @@ "licensePurchase": "Køb licens", "licensePurchaseSites": "Køb flere sites", "licenseSitesUsedMax": "{usedSites} af {maxSites} sites brugt", - "licenseSitesUsed": "{count, plural, =0 {ingen sites} one {ét site} other {# sites}} i systemet.", + "licenseSitesUsed": "{count, plural, =0 {ingen sites} one {ét site} other {# sites}}", + "licenseUsage": "Brug", + "licenseUsageDescription": "Se antallet af brugere og sites licenseret til denne vært", + "licenseUsageSites": "Steder", + "licenseUsageUsers": "Brugere", + "licenseNoUserLimit": "Der er ingen grænse for antallet af brugere, der bruger en ulicenseret vært", + "licenseUsersUsedMax": "{usedUsers} af {maxUsers} brugere brugt", + "licenseUsersUsed": "{count, plural, =0 {ingen brugere} one {én bruger} other {# brugere}}", + "licenseUnlimited": "Ubegrænset", + "licenseTierLabel": "Niveau", "licensePurchaseDescription": "Vælg hvor mange sites du vil {selectedMode, select, license {købe en licens for. Du kan altid tilføje flere sites senere.} other {tilføje din eksisterende licens.}}", "licenseFee": "Licensafgift", "licensePriceSite": "Pris per site", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Hver regel skal have et unikt prioritetstall.", "rulesErrorValidation": "Ugyldige regler", "rulesErrorValidationRuleDescription": "Regel {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Vælg en gyldig matchtype (sti, IP, CIDR, land, region eller ASN).", + "rulesErrorInvalidMatchTypeDescription": "Vælg en gyldig matchtype (sti, IP, CIDR, land, region, ASN eller metode).", "rulesErrorValueRequired": "Indtast en værdi for denne reglen.", "rulesErrorInvalidCountry": "Ugyldig land", "rulesErrorInvalidCountryDescription": "Vælg et gyldig land.", @@ -2826,10 +2844,10 @@ "retryAttempts": "Forsøg igen", "expectedResponseCodes": "Forventede svarkoder", "expectedResponseCodesDescription": "HTTP-statuskode som indikerer sund status. Hvis den bliver stående tom, regnes 200-300 som sund.", - "customRequestHeaders": "Brugerdefinerede anmodnings-headers", - "customRequestHeadersDescription": "Anmodnings-headers som sendes til destinationerne. Én pr. linje: Header-navn: værdi", - "customResponseHeaders": "Brugerdefinerede svar-headers", - "customResponseHeadersDescription": "Svar-headers som sendes tilbage til klienten. Én pr. linje: Header-navn: værdi", + "customRequestHeaders": "Brugerdefinerede anmodningsoverskrifter", + "customRequestHeadersDescription": "Anmodningsoverskrifter sendt til downstream mål. En pr. linje: Header-Name: værdi", + "customResponseHeaders": "Brugerdefinerede svaroverskrifter", + "customResponseHeadersDescription": "Svaroverskrifter sendt tilbage til klienten. En pr. linje: Header-Name: værdi", "headersValidationError": "Header skal være i formatet: header-navn: værdi.", "saveHealthCheck": "Gem Sundhedstjek", "healthCheckSaved": "Sundhedstjek Gemt", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Port", "editInternalResourceDialogModeHost": "Vært", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Exitnode", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI-gateway", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "IP-adressen eller værtsnavnet til ressourcen på sitets netværk.", "editInternalResourceDialogDestinationIPDescription": "IP eller hostnavn til ressourcen på sitets netværk.", "editInternalResourceDialogDestinationCidrDescription": "CIDR-området til ressourcen på sitets netværk.", + "editInternalResourceDialogDestinationGatewayDescription": "De sites, der skal bruges som exit noder for denne ressource", "editInternalResourceDialogAlias": "Navn", "editInternalResourceDialogAliasDescription": "Et valgfrit internt DNS-alias for denne ressource.", "createInternalResourceDialogNoSitesAvailable": "Ingen tilgængelige steder", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Styr TCP/UDP-portadgang og om ICMP-ping er tilladt for denne ressource.", "hostSettings": "Vært", "cidrSettings": "CIDR", + "gatewaySettings": "Exitnode", "createInternalResourceDialogResourceProperties": "Ressourceegenskaber", "createInternalResourceDialogName": "Navn", "createInternalResourceDialogSite": "Websted", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI-gateway", + "createInternalResourceDialogModeGateway": "Exitnode", "scheme": "Skema", "createInternalResourceDialogScheme": "Skema", "createInternalResourceDialogEnableSsl": "Aktivér TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Husk denne organisations-ID-en", "orgAuthBackToSignIn": "Tilbage til standard login", "orgAuthNoAccount": "Har du ikke en konto?", - "subscriptionRequiredToUse": "Et abonnement er påkrævet for at bruge denne funktion.", - "mustUpgradeToUse": "Du skal opgradere dit abonnement for at bruge denne funktion.", + "subscriptionRequiredToUse": "Et abonnement er nødvendigt for at bruge denne funktion. Book en demo", + "mustUpgradeToUse": "Du skal opgradere dit abonnement for at bruge denne funktion. Book en demo", "subscriptionRequiredTierToUse": "Denne funktion kræver {tier} eller højere.", - "upgradeToTierToUse": "Opgrader til {tier} eller højere for at bruge denne funktion.", + "upgradeToTierToUse": "Opgrader til {tier} for at bruge denne funktion. Book en demo", "subscriptionTierTier1": "Hjem", "subscriptionTierTier2": "Lag", "subscriptionTierTier3": "Forretninger", @@ -3651,8 +3673,8 @@ "sourceAddress": "Kildeadresse", "destinationAddress": "Måladresse ", "duration": "Varighed", - "licenseRequiredToUse": "Enterprise Edition licens er krævet. Book en demo eller prøve", - "ossEnterpriseEditionRequired": "Enterprise Edition licens er krævet. Book en demo eller prøve", + "licenseRequiredToUse": "Enterprise Edition-licens er påkrævet. Book en demo", + "ossEnterpriseEditionRequired": "Enterprise Edition-licens er påkrævet. Book en demo", "certResolver": "Certifikatløser", "certResolverDescription": "Vælg certifikatløser som skal bruges for denne ressource.", "selectCertResolver": "Vælg certifikatløser", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Bekræfter enhedens godkendelse...", "signedInAs": "Logget ind som", "deviceCodeEnterPrompt": "Indtast koden, der vises på enheden", + "deviceCodeConfirmPrompt": "Bekræft at dette matcher koden på din enhed", "continue": "Fortsæt", "deviceUnknownLocation": "Ukjent plassering", "deviceAuthorizationRequested": "Denne godkendelse blev anmodet fra {location} den {date}. Sørg for, at du stoler på denne enhed, da den får adgang til kontoen.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Autentificeringsmetoder aktiveret for denne ressource.", "resourceLauncherPrivateClientRequired": "Forbind med en klient på din enhed for at få privat adgang til denne ressource.", "resourceLauncherPrivateClientRequiredTitle": "Klientforbindelse påkrævet", + "resourceLauncherExitNodeTitle": "Exitnode Routing", + "resourceLauncherExitNodeDescription": "Efter forbindelsen til din klient skal du vælge denne exitnode i klientmenuen for at rute al trafik gennem de vedhæftede sites.", "resourceLauncherDownloadClient": "Download klient", "resourceLauncherFailedToLoadDetails": "Kunne ikke indlæse ressourcedetaljer. Du har muligvis ikke længere adgang til denne ressource.", "resourceLauncherNoPortRestrictions": "Ingen portbegrænsninger", + "resourceLauncherAllInternetTraffic": "Al internettrafik", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Uden Etiket", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Vis værktøjslinje", "sessionToolbarHide": "Skjul værktøjslinje", "actionUpdateSiteApprovals": "Opdater godkendelser på site", - "check": "Tjek" + "check": "Tjek", + "rulesErrorInvalidMethod": "Ugyldig HTTP-metode", + "rulesErrorInvalidMethodDescription": "Vælg mindst én HTTP-metode.", + "rulesSelectMethods": "Vælg metoder" } diff --git a/messages/de-DE.json b/messages/de-DE.json index cf7c2ae6b..dba3bc5bf 100644 --- a/messages/de-DE.json +++ b/messages/de-DE.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Ihre Testversion läuft in {countdown} ab. Upgraden, um den Zugriff zu behalten.", "trialBannerExpired": "Ihre Testversion ist abgelaufen. Jetzt upgraden, um den Zugriff wiederherzustellen.", "billingTrialBannerTitle": "Kostenlose Testversion aktiv", - "billingTrialBannerDescription": "Sie nutzen derzeit eine kostenlose Testversion auf der Business-Tarif. Wenn die Testversion endet, wird Ihr Konto automatisch auf die Funktionen und Beschränkungen der Basis-Tarif zurückgesetzt. Upgraden Sie jederzeit, um weiterhin Zugriff auf die Funktionen Ihres aktuellen Plans zu behalten.", + "billingTrialBannerDescription": "Sie nutzen derzeit eine kostenlose Testversion auf dem {tier}-Tarif. Wenn die Testversion endet, wird Ihr Konto automatisch auf die Funktionen und Beschränkungen des Basis-Tarifs zurückgesetzt. Upgraden Sie jederzeit, um weiterhin Zugriff auf die Funktionen Ihres aktuellen Plans zu behalten.", "billingTrialBannerUpgrade": "Jetzt upgraden", "billingTrialBadge": "Kostenlose Testversion", "trialActive": "Kostenlose Testversion aktiv", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Sind Sie sicher, dass Sie den WireGuard-Tunnel für {name} neu starten möchten? Der Standort wird kurzzeitig die Konnektivität verlieren.", "siteRestartWarning": "Der Standort wird kurzzeitig getrennt, während der Tunnel neu gestartet wird.", "siteRestarted": "Standort neu gestartet", - "siteRestartedDescription": "Der WireGuard-Tunnel wurde neu gestartet.", + "siteRestartedDescription": "Die Seite wurde neu gestartet.", "siteErrorRestart": "Fehler beim Neustart des Standorts", "siteErrorRestartDescription": "Ein Fehler ist aufgetreten, während der Standort neu gestartet wurde.", "siteSettingDescription": "Standorteinstellungen konfigurieren", @@ -234,6 +234,9 @@ "clientResourceDescription": "Erstelle und verwalte Ressourcen, die nur über einen verbundenen Client zugänglich sind", "privateResourcesBannerTitle": "Zero-Trust-Zugriff auf private Ressourcen", "privateResourcesBannerDescription": "Private Ressourcen nutzen Zero-Trust und stellen sicher, dass Benutzer und Maschinen nur auf Ressourcen zugreifen können, die Sie explizit gewähren. Verbinden Sie Benutzergeräte oder Maschinen-Clients, um auf diese Ressourcen über ein sicheres virtuelles privates Netzwerk zuzugreifen.", + "licenseBillingBannerTitle": "Lizenzabrechnung verwalten", + "licenseBillingBannerDescription": "Um die Abrechnung für Ihre Lizenzschlüssel zu verwalten, einschließlich Zahlungsmethoden und Rechnungen, besuchen Sie die Abrechnungsseite. Sie können unten zusätzliche Lizenzen generieren, um die Serverkapazität zu erhöhen oder mehr Instanzen bereitzustellen.", + "licenseBillingBannerButton": "Zur Abrechnung gehen", "resourcesSearch": "Suche Ressourcen...", "resourceAdd": "Ressource hinzufügen", "resourceErrorDelte": "Fehler beim Löschen der Ressource", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Einen CIDR-Bereich im Netzwerk der Seite für angeschlossene Clients verfügbar machen", "privateResourceTypeHttpDescription": "Auf einen HTTP- oder HTTPS-Dienst über eine Domain zugreifen", "privateResourceTypeSshDescription": "Auf einen SSH-Server von verbundenen Clients aus zugreifen", + "privateResourceTypeGatewayDescription": "Senden Sie den gesamten Internetverkehr über das Seitennetzwerk.", + "resourceTypeGatewayDescription": "Senden Sie den gesamten Internetverkehr über das Seitennetzwerk.", "resourceDomainDescription": "Die Ressource wird unter diesem vollständig qualifizierten Domainnamen bereitgestellt.", "resourceHTTPSSettings": "HTTPS-Einstellungen", "resourceHTTPSSettingsDescription": "Konfigurieren Sie den Zugriff auf die Ressource über HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Schalten Sie Unternehmensfunktionen für Ihre selbstgehostete Pangolin-Instanz frei. Kaufen Sie einen Lizenzschlüssel, um Premium-Funktionen zu aktivieren, und fügen Sie ihn dann unten hinzu.", "licenseBannerGetLicense": "Lizenz erhalten", "licenseBannerViewDocs": "Dokumentation anzeigen", + "licenseUpgradeBannerTitle": "Mehr Kapazität benötigt?", + "licenseUpgradeBannerDescription": "Wenn Sie die Kapazität Ihrer Seite oder Benutzer erhöhen müssen, können Sie im Portal app.pangolin.net mehr Lizenzen kaufen und diese unten hinzufügen, um Ihre Instanz zu aktualisieren.", + "licenseUpgradeBannerButton": "Mehr Lizenzen kaufen", + "licenseMultipleKeysDescription": "Sie haben mehrere Lizenzen auf diesem Server aktiviert. Der höchste Tarif wird verwendet.", "communityEdition": "Community-Edition", "licenseAboutDescription": "Dies ist für Geschäfts- und Unternehmensanwender, die Pangolin in einem kommerziellen Umfeld einsetzen. Wenn Sie Pangolin für den persönlichen Gebrauch verwenden, können Sie diesen Abschnitt ignorieren.", "licenseKeyActivated": "Lizenzschlüssel aktiviert", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Sind Sie sicher, dass Sie den Lizenzschlüssel löschen möchten?", "licenseKeyDelete": "Lizenzschlüssel löschen", "licenseKeyDeleteConfirm": "Lizenzschlüssel löschen bestätigen", - "licenseTitle": "Lizenzstatus verwalten", + "licenseTitle": "Lizenzen verwalten", "licenseTitleDescription": "Lizenzschlüssel im System anzeigen und verwalten", - "licenseHost": "Hostlizenz", - "licenseHostDescription": "Verwalten Sie den Haupt-Lizenzschlüssel für den Host.", + "licenseHost": "Lizenz", + "licenseHostDescription": "Sehen Sie sich den Lizenztyp und die Hostinformationen an", "licensedNot": "Nicht lizenziert", "hostId": "Host-ID", "licenseReckeckAll": "Überprüfe alle Schlüssel", @@ -586,7 +595,16 @@ "licensePurchase": "Lizenz kaufen", "licensePurchaseSites": "Zusätzliche Standorte kaufen\n", "licenseSitesUsedMax": "{usedSites} von {maxSites} Standorten verwendet", - "licenseSitesUsed": "{count, plural, =0 {# Standorte} one {# Standort} other {# Standorte}} im System.", + "licenseSitesUsed": "{count, plural, =0 {# Standorte} one {# Standort} other {# Standorte}}", + "licenseUsage": "Nutzung", + "licenseUsageDescription": "Siehe die Anzahl der lizenzierten Benutzer und Seiten für diesen Host", + "licenseUsageSites": "Seiten", + "licenseUsageUsers": "Benutzer", + "licenseNoUserLimit": "Die Anzahl der Benutzer, die einen nicht lizenzierten Host verwenden, ist unbegrenzt", + "licenseUsersUsedMax": "{usedUsers} von {maxUsers} Benutzern verwendet", + "licenseUsersUsed": "{count, plural, =0 {# Benutzer} one {# Benutzer} other {# Benutzer}}", + "licenseUnlimited": "Unbegrenzt", + "licenseTierLabel": "Stufe", "licensePurchaseDescription": "Wähle aus, für wie viele Standorte du möchtest {selectedMode, select, license {kaufe eine Lizenz. Du kannst später immer weitere Standorte hinzufügen.} other {Füge zu deiner bestehenden Lizenz hinzu.}}", "licenseFee": "Lizenzgebühr", "licensePriceSite": "Preis pro Standort", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Jede Regel muss eine eindeutige Prioritätsnummer haben.", "rulesErrorValidation": "Ungültige Regeln", "rulesErrorValidationRuleDescription": "Regel {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Wählen Sie einen gültigen Vergleichstyp (Pfad, IP, CIDR, Land, Region oder ASN).", + "rulesErrorInvalidMatchTypeDescription": "Wählen Sie einen gültigen Vergleichstyp (Pfad, IP, CIDR, Land, Region, ASN oder Methode).", "rulesErrorValueRequired": "Geben Sie einen Wert für diese Regel ein.", "rulesErrorInvalidCountry": "Ungültiges Land", "rulesErrorInvalidCountryDescription": "Wählen Sie ein gültiges Land aus.", @@ -2826,10 +2844,10 @@ "retryAttempts": "Wiederholungsversuche", "expectedResponseCodes": "Erwartete Antwortcodes", "expectedResponseCodesDescription": "HTTP-Statuscode, der einen gesunden Zustand anzeigt. Wenn leer gelassen, wird 200-300 als gesund angesehen.", - "customRequestHeaders": "Eigene Anfrage-Header", - "customRequestHeadersDescription": "Anfrage-Header, die an die Ziele gesendet werden. Eine pro Zeile: Header-Name: Wert", - "customResponseHeaders": "Eigene Antwort-Header", - "customResponseHeadersDescription": "Antwort-Header, die an den Client zurückgesendet werden. Eine pro Zeile: Header-Name: Wert", + "customRequestHeaders": "Eigene Anforderungsheader", + "customRequestHeadersDescription": "Anforderungsheader, die an die nachgelagerten Ziele gesendet werden. Einer pro Zeile: Header-Name: Wert", + "customResponseHeaders": "Eigene Antwortheader", + "customResponseHeadersDescription": "Antwortheader, die an den Client zurückgesendet werden. Einer pro Zeile: Header-Name: Wert", "headersValidationError": "Header müssen im Format Header-Name: Wert sein.", "saveHealthCheck": "Gesundheits-Check speichern", "healthCheckSaved": "Gesundheits-Check gespeichert", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Port", "editInternalResourceDialogModeHost": "Host", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Exit-Node", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "KI-Gateway", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "Die IP-Adresse oder der Hostname der Ressource im Netzwerk der Website.", "editInternalResourceDialogDestinationIPDescription": "Die IP-Adresse oder Hostname Adresse der Ressource im Netzwerk der Website.", "editInternalResourceDialogDestinationCidrDescription": "Der CIDR-Bereich der Ressource im Netzwerk der Website.", + "editInternalResourceDialogDestinationGatewayDescription": "The sites to uses as exit nodes for this resource", "editInternalResourceDialogAlias": "Alias", "editInternalResourceDialogAliasDescription": "Ein optionaler interner DNS-Alias für diese Ressource.", "createInternalResourceDialogNoSitesAvailable": "Kein Standort verfügbar", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "TCP/UDP-Portzugriff kontrollieren und ICMP-Ping für diese Ressource zulassen.", "hostSettings": "Host", "cidrSettings": "CIDR", + "gatewaySettings": "Exit-Node", "createInternalResourceDialogResourceProperties": "Ressourceneigenschaften", "createInternalResourceDialogName": "Name", "createInternalResourceDialogSite": "Standort", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "KI-Gateway", + "createInternalResourceDialogModeGateway": "Exit-Node", "scheme": "Schema", "createInternalResourceDialogScheme": "Schema", "createInternalResourceDialogEnableSsl": "TLS aktivieren", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Diese Organisations-ID merken", "orgAuthBackToSignIn": "Zurück zum Standard Login", "orgAuthNoAccount": "Sie haben noch kein Konto?", - "subscriptionRequiredToUse": "Um diese Funktion nutzen zu können, ist ein Abonnement erforderlich.", - "mustUpgradeToUse": "Sie müssen Ihr Abonnement aktualisieren, um diese Funktion nutzen zu können.", + "subscriptionRequiredToUse": "Um diese Funktion nutzen zu können, ist ein Abonnement erforderlich. Einen Test vorführen", + "mustUpgradeToUse": "Sie müssen Ihr Abonnement aktualisieren, um diese Funktion nutzen zu können. Einen Test vorführen", "subscriptionRequiredTierToUse": "Diese Funktion erfordert {tier} oder höher.", - "upgradeToTierToUse": "Upgrade auf {tier} oder höher, um diese Funktion zu nutzen.", + "upgradeToTierToUse": "Upgrade auf {tier} oder höher, um diese Funktion zu nutzen. Einen Test vorführen", "subscriptionTierTier1": "Zuhause", "subscriptionTierTier2": "Team", "subscriptionTierTier3": "Geschäftlich", @@ -3651,8 +3673,8 @@ "sourceAddress": "Quelladresse", "destinationAddress": "Zieladresse", "duration": "Dauer", - "licenseRequiredToUse": "Enterprise Edition Lizenz ist erforderlich. Einen Test vorführen oder ausprobieren ", - "ossEnterpriseEditionRequired": "Enterprise Edition Lizenz ist erforderlich. Vereinbare eine Demo oder einen Test", + "licenseRequiredToUse": "Enterprise Edition Lizenz ist erforderlich. Einen Test vorführen", + "ossEnterpriseEditionRequired": "Enterprise Edition Lizenz ist erforderlich. Einen Test vorführen", "certResolver": "Zertifikatsauflöser", "certResolverDescription": "Wählen Sie den Zertifikatslöser aus, der für diese Ressource verwendet werden soll.", "selectCertResolver": "Zertifikatsauflöser auswählen", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Geräteautorisierung wird überprüft...", "signedInAs": "Angemeldet als", "deviceCodeEnterPrompt": "Geben Sie den auf dem Gerät angezeigten Code ein", + "deviceCodeConfirmPrompt": "Bestätigen Sie, dass dies dem Code auf Ihrem Gerät entspricht", "continue": "Weiter", "deviceUnknownLocation": "Unbekannter Ort", "deviceAuthorizationRequested": "Diese Autorisierung wurde von {location} auf {date}angefordert. Stellen Sie sicher, dass Sie diesem Gerät vertrauen, da es Zugriff auf das Konto erhält.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Aktivierte Authentifizierungsmethoden für diese Ressource.", "resourceLauncherPrivateClientRequired": "Verbinde dich mit einem Client auf deinem Gerät, um privat auf diese Ressource zuzugreifen.", "resourceLauncherPrivateClientRequiredTitle": "Client-Verbindung erforderlich", + "resourceLauncherExitNodeTitle": "Exit Node Routing", + "resourceLauncherExitNodeDescription": "Nachdem Sie Ihren Client verbunden haben, wählen Sie diesen Exit-Knoten im Client-Menü, um den gesamten Datenverkehr durch die angehängten Standorte zu leiten.", "resourceLauncherDownloadClient": "Client herunterladen", "resourceLauncherFailedToLoadDetails": "Ressourcendetails konnten nicht geladen werden. Möglicherweise haben Sie keinen Zugriff mehr auf diese Ressource.", "resourceLauncherNoPortRestrictions": "Keine Portbeschränkungen", + "resourceLauncherAllInternetTraffic": "All internet traffic", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Nicht etikettiert", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Werkzeugleiste zeigen", "sessionToolbarHide": "Werkzeugleiste ausblenden", "actionUpdateSiteApprovals": "Standortgenehmigungen aktualisieren", - "check": "Prüfen" + "check": "Prüfen", + "rulesErrorInvalidMethod": "Ungültige HTTP-Methode", + "rulesErrorInvalidMethodDescription": "Wählen Sie mindestens eine HTTP-Methode aus.", + "rulesSelectMethods": "Methoden auswählen" } diff --git a/messages/en-US.json b/messages/en-US.json index cfa151c90..fc1523687 100644 --- a/messages/en-US.json +++ b/messages/en-US.json @@ -3300,10 +3300,10 @@ "orgAuthRememberOrgId": "Remember this organization ID", "orgAuthBackToSignIn": "Back to standard sign in", "orgAuthNoAccount": "Don't have an account?", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "mustUpgradeToUse": "You must upgrade your subscription to use this feature.", + "subscriptionRequiredToUse": "A subscription is required to use this feature. Book a demo", + "mustUpgradeToUse": "You must upgrade your subscription to use this feature. Book a demo", "subscriptionRequiredTierToUse": "This feature requires {tier}.", - "upgradeToTierToUse": "Upgrade to {tier} to use this feature.", + "upgradeToTierToUse": "Upgrade to {tier} to use this feature. Book a demo", "subscriptionTierTier1": "Home", "subscriptionTierTier2": "Team", "subscriptionTierTier3": "Business", @@ -3673,8 +3673,8 @@ "sourceAddress": "Source Address", "destinationAddress": "Destination Address", "duration": "Duration", - "licenseRequiredToUse": "Enterprise Edition license is required. Book a demo or trial", - "ossEnterpriseEditionRequired": "Enterprise Edition license is required. Book a demo or trial", + "licenseRequiredToUse": "Enterprise Edition license is required. Book a demo", + "ossEnterpriseEditionRequired": "Enterprise Edition license is required. Book a demo", "certResolver": "Certificate Resolver", "certResolverDescription": "Select the certificate resolver to use for this resource.", "selectCertResolver": "Select Certificate Resolver", @@ -3741,6 +3741,7 @@ "deviceCodeVerifying": "Verifying device authorization...", "signedInAs": "Signed in as", "deviceCodeEnterPrompt": "Enter the code displayed on the device", + "deviceCodeConfirmPrompt": "Confirm this matches the code on your 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 the account.", @@ -4313,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.", "resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.", "resourceLauncherPrivateClientRequiredTitle": "Client Connection Required", + "resourceLauncherExitNodeTitle": "Exit Node Routing", + "resourceLauncherExitNodeDescription": "After connecting your client, pick this exit node in the client menu to route all traffic through the attached sites.", "resourceLauncherDownloadClient": "Download client", "resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.", "resourceLauncherNoPortRestrictions": "No port restrictions", + "resourceLauncherAllInternetTraffic": "All internet traffic", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Unlabeled", diff --git a/messages/es-ES.json b/messages/es-ES.json index 0407ad5bd..6ba4a8d88 100644 --- a/messages/es-ES.json +++ b/messages/es-ES.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Su prueba expira en {countdown}. Actualice para mantener el acceso.", "trialBannerExpired": "Su prueba ha expirado. Actualice ahora para restaurar el acceso.", "billingTrialBannerTitle": "Prueba gratuita activada", - "billingTrialBannerDescription": "Actualmente estás en una prueba gratuita en el nivel empresarial. Cuando finalice la prueba, tu cuenta volverá automáticamente a las características y límites del nivel Básico. Mejora en cualquier momento para mantener el acceso a las características de tu plan actual.", + "billingTrialBannerDescription": "Actualmente estás en una prueba gratuita en el nivel {tier}. Cuando finalice la prueba, tu cuenta volverá automáticamente a las características y límites del nivel Básico. Mejora en cualquier momento para mantener el acceso a las características de tu plan actual.", "billingTrialBannerUpgrade": "Actualizar ahora", "billingTrialBadge": "Prueba Gratuita", "trialActive": "Prueba gratuita activa", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "¿Estás seguro de que deseas reiniciar el túnel WireGuard para {name}? El sitio perderá conectividad brevemente.", "siteRestartWarning": "El sitio se desconectará brevemente mientras se reinicia el túnel.", "siteRestarted": "Sitio reiniciado", - "siteRestartedDescription": "El túnel WireGuard ha sido reiniciado.", + "siteRestartedDescription": "El sitio ha sido reiniciado.", "siteErrorRestart": "Error al reiniciar el sitio", "siteErrorRestartDescription": "Se ha producido un error al reiniciar el sitio.", "siteSettingDescription": "Configurar los ajustes en el sitio", @@ -234,6 +234,9 @@ "clientResourceDescription": "Crear y administrar recursos que sólo son accesibles a través de un cliente conectado", "privateResourcesBannerTitle": "Acceso privado de confianza cero", "privateResourcesBannerDescription": "Los recursos privados usan seguridad de confianza cero, asegurando que usuarios y máquinas solo puedan acceder a los recursos que usted conceda explícitamente. Conecte dispositivos de usuario o clientes de máquinas para acceder a estos recursos a través de una red privada virtual segura.", + "licenseBillingBannerTitle": "Administrar facturación de licencia", + "licenseBillingBannerDescription": "Para administrar la facturación de tus llaves de licencia, incluidos los métodos de pago y las facturas, visita la página de facturación. Puedes generar licencias adicionales a continuación para aumentar la capacidad del servidor o desplegar más instancias.", + "licenseBillingBannerButton": "Ir a facturación", "resourcesSearch": "Buscar recursos...", "resourceAdd": "Añadir Recurso", "resourceErrorDelte": "Error al eliminar el recurso", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Expón un rango CIDR en la red del sitio para los clientes conectados", "privateResourceTypeHttpDescription": "Accede a un servicio HTTP o HTTPS a través de un dominio", "privateResourceTypeSshDescription": "Accede a un servidor SSH desde clientes conectados", + "privateResourceTypeGatewayDescription": "Enviar todo el tráfico de internet para salir a través de la red del sitio.", + "resourceTypeGatewayDescription": "Envía todo el tráfico de internet para salir a través de la red del sitio.", "resourceDomainDescription": "El recurso se servirá en este nombre de dominio completamente calificado.", "resourceHTTPSSettings": "Configuración HTTPS", "resourceHTTPSSettingsDescription": "Configurar cómo se accederá al recurso a través de HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Desbloquea funciones empresariales para tu instancia autohospedada de Pangolin. Compra una clave de licencia para activar capacidades premium, luego agréguela a continuación.", "licenseBannerGetLicense": "Obtener una Licencia", "licenseBannerViewDocs": "Ver Documentación", + "licenseUpgradeBannerTitle": "¿Necesitas más capacidad?", + "licenseUpgradeBannerDescription": "Si necesitas aumentar tu capacidad de sitio o usuario, puedes comprar más licencias desde el portal app.pangolin.net y agregarlas a continuación para actualizar tu instancia.", + "licenseUpgradeBannerButton": "Comprar más licencias", + "licenseMultipleKeysDescription": "Tienes múltiples licencias activadas en este servidor. Se utiliza la categoría más alta.", "communityEdition": "Edición comunitaria", "licenseAboutDescription": "Esto es para usuarios empresariales y empresariales que utilizan Pangolin en un entorno comercial. Si estás usando Pangolin para uso personal, puedes ignorar esta sección.", "licenseKeyActivated": "Clave de licencia activada", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "¿Está seguro que desea eliminar la clave de licencia?", "licenseKeyDelete": "Eliminar clave de licencia", "licenseKeyDeleteConfirm": "Confirmar eliminar clave de licencia", - "licenseTitle": "Administrar estado de licencia", + "licenseTitle": "Administrar licencias", "licenseTitleDescription": "Ver y administrar claves de licencia en el sistema", - "licenseHost": "Licencia de host", - "licenseHostDescription": "Administrar la clave de licencia principal para el host.", + "licenseHost": "Licencia", + "licenseHostDescription": "Ver el nivel de licencia e información del host", "licensedNot": "Sin licencia", "hostId": "ID del Host", "licenseReckeckAll": "Revisar todas las claves", @@ -586,7 +595,16 @@ "licensePurchase": "Comprar Licencia", "licensePurchaseSites": "Comprar sitios adicionales", "licenseSitesUsedMax": "{usedSites} de {maxSites} sitios usados", - "licenseSitesUsed": "{count, plural, =0 {# sitios} one {# sitio} other {# sitios}} en el sistema.", + "licenseSitesUsed": "{count, plural, =0 {# sitios} one {# sitio} other {# sitios}}", + "licenseUsage": "Uso", + "licenseUsageDescription": "Ver el número de usuarios y sitios licenciados para este host", + "licenseUsageSites": "Sitios", + "licenseUsageUsers": "Usuarios", + "licenseNoUserLimit": "No hay límite en el número de usuarios utilizando un host sin licencia", + "licenseUsersUsedMax": "{usedUsers} de {maxUsers} usuarios usados", + "licenseUsersUsed": "{count, plural, =0 {# usuarios} one {# usuario} other {# usuarios}}", + "licenseUnlimited": "Ilimitado", + "licenseTierLabel": "Categoría", "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", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Cada regla debe tener un número de prioridad único.", "rulesErrorValidation": "Reglas no válidas", "rulesErrorValidationRuleDescription": "Regla {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Selecciona un tipo de coincidencia válido (ruta, IP, CIDR, país, región o ASN).", + "rulesErrorInvalidMatchTypeDescription": "Selecciona un tipo de coincidencia válido (ruta, IP, CIDR, país, región, ASN, o método).", "rulesErrorValueRequired": "Introduce un valor para esta regla.", "rulesErrorInvalidCountry": "País no válido", "rulesErrorInvalidCountryDescription": "Selecciona un país válido.", @@ -2827,9 +2845,9 @@ "expectedResponseCodes": "Códigos de respuesta esperados", "expectedResponseCodesDescription": "Código de estado HTTP que indica un estado saludable. Si se deja en blanco, se considera saludable de 200 a 300.", "customRequestHeaders": "Cabeceras de solicitud personalizadas", - "customRequestHeadersDescription": "Cabeceras de solicitud enviadas a los destinos. Una por línea: Nombre-Cabecera: valor", + "customRequestHeadersDescription": "Cabeceras de solicitud enviadas a los objetivos aguas abajo. Una por línea: Nombre-de-cabecera: valor", "customResponseHeaders": "Cabeceras de respuesta personalizadas", - "customResponseHeadersDescription": "Cabeceras de respuesta devueltas al cliente. Una por línea: Nombre-Cabecera: valor", + "customResponseHeadersDescription": "Cabeceras de respuesta enviadas de vuelta al cliente. Una por línea: Nombre-de-cabecera: valor", "headersValidationError": "Los encabezados deben estar en el formato: Nombre de cabecera: valor.", "saveHealthCheck": "Guardar Chequeo de Salud", "healthCheckSaved": "Chequeo de Salud Guardado", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Puerto", "editInternalResourceDialogModeHost": "Anfitrión", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Nodo de Salida", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "Portal de IA", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "La dirección IP o nombre de host del recurso en la red del sitio.", "editInternalResourceDialogDestinationIPDescription": "La dirección IP o nombre de host del recurso en la red del sitio.", "editInternalResourceDialogDestinationCidrDescription": "El rango CIDR del recurso en la red del sitio.", + "editInternalResourceDialogDestinationGatewayDescription": "Los sitios a utilizar como nodos de salida para este recurso", "editInternalResourceDialogAlias": "Alias", "editInternalResourceDialogAliasDescription": "Un alias DNS interno opcional para este recurso.", "createInternalResourceDialogNoSitesAvailable": "No hay sitios disponibles", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Controlar el acceso a puertos TCP/UDP y si se permite ping ICMP para este recurso.", "hostSettings": "Anfitrión", "cidrSettings": "CIDR", + "gatewaySettings": "Nodo de Salida", "createInternalResourceDialogResourceProperties": "Propiedades del recurso", "createInternalResourceDialogName": "Nombre", "createInternalResourceDialogSite": "Sitio", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "Portal de IA", + "createInternalResourceDialogModeGateway": "Nodo de Salida", "scheme": "Esquema", "createInternalResourceDialogScheme": "Esquema", "createInternalResourceDialogEnableSsl": "Activar TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Recordar este ID de organización", "orgAuthBackToSignIn": "Volver a iniciar sesión estándar", "orgAuthNoAccount": "¿No tienes una cuenta?", - "subscriptionRequiredToUse": "Se requiere una suscripción para utilizar esta función.", - "mustUpgradeToUse": "Debes actualizar tu suscripción para usar esta función.", + "subscriptionRequiredToUse": "Se requiere una suscripción para utilizar esta función. Reserva una demostración", + "mustUpgradeToUse": "Debes actualizar tu suscripción para usar esta función. Reserva una demostración", "subscriptionRequiredTierToUse": "Esta función requiere {tier} o superior.", - "upgradeToTierToUse": "Actualiza a {tier} o superior para usar esta función.", + "upgradeToTierToUse": "Actualiza a {tier} para usar esta función. Reserva una demostración", "subscriptionTierTier1": "Inicio", "subscriptionTierTier2": "Equipo", "subscriptionTierTier3": "Negocio", @@ -3651,8 +3673,8 @@ "sourceAddress": "Dirección de origen", "destinationAddress": "Dirección de destino", "duration": "Duración", - "licenseRequiredToUse": "Se requiere una licencia para la Edición Empresarial. Reserve una demostración o prueba", - "ossEnterpriseEditionRequired": "Se requiere una licencia para la Edición Empresarial. Reserve una demostración o prueba", + "licenseRequiredToUse": "Se requiere una licencia para la Edición Empresarial. Reserva una demostración", + "ossEnterpriseEditionRequired": "Se requiere una licencia para la Edición Empresarial. Reserva una demostración", "certResolver": "Resolver certificado", "certResolverDescription": "Seleccione la resolución de certificados a utilizar para este recurso.", "selectCertResolver": "Seleccionar Resolver Certificado", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Verificando autorización del dispositivo...", "signedInAs": "Conectado como", "deviceCodeEnterPrompt": "Introduzca el código mostrado en el dispositivo", + "deviceCodeConfirmPrompt": "Confirma que coincide con el código en tu dispositivo", "continue": "Continuar", "deviceUnknownLocation": "Ubicación desconocida", "deviceAuthorizationRequested": "Esta autorización fue solicitada a {location} el {date}. Asegúrate de confiar en este dispositivo ya que tendrá acceso a la cuenta.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Métodos de autenticación habilitados para este recurso.", "resourceLauncherPrivateClientRequired": "Conéctese con un cliente en su dispositivo para acceder a este recurso en privado.", "resourceLauncherPrivateClientRequiredTitle": "Se requiere conexión del cliente", + "resourceLauncherExitNodeTitle": "Enrutamiento de Nodo de Salida", + "resourceLauncherExitNodeDescription": "Después de conectar tu cliente, selecciona este nodo de salida en el menú del cliente para enrutar todo el tráfico a través de los sitios adjuntos.", "resourceLauncherDownloadClient": "Descargar cliente", "resourceLauncherFailedToLoadDetails": "No se pudieron cargar los detalles del recurso. Es posible que ya no tengas acceso a este recurso.", "resourceLauncherNoPortRestrictions": "Sin restricciones de puertos", + "resourceLauncherAllInternetTraffic": "Todo el tráfico de internet", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Sin Etiqueta", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Mostrar barra de herramientas", "sessionToolbarHide": "Ocultar barra de herramientas", "actionUpdateSiteApprovals": "Actualizar aprobaciones del sitio", - "check": "Comprobar" + "check": "Comprobar", + "rulesErrorInvalidMethod": "Método HTTP no válido", + "rulesErrorInvalidMethodDescription": "Seleccione al menos un método HTTP.", + "rulesSelectMethods": "Seleccionar métodos" } diff --git a/messages/fr-FR.json b/messages/fr-FR.json index 20ce80a58..2bd194b96 100644 --- a/messages/fr-FR.json +++ b/messages/fr-FR.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Votre essai expire dans {countdown}. Passez à l'abonnement pour garder l'accès.", "trialBannerExpired": "Votre essai a expiré. Passez à l'abonnement maintenant pour restaurer l'accès.", "billingTrialBannerTitle": "Essai gratuit actif", - "billingTrialBannerDescription": "Vous êtes actuellement en essai gratuit sur le niveau business. À la fin de l'essai, votre compte basculera automatiquement aux fonctionnalités et limites du niveau Basique. Mettez à jour à tout moment pour conserver l'accès aux fonctionnalités de votre plan actuel.", + "billingTrialBannerDescription": "Vous êtes actuellement en essai gratuit sur le niveau {tier}. À la fin de l'essai, votre compte basculera automatiquement aux fonctionnalités et limites du niveau Basic. Mettez à jour à tout moment pour conserver l'accès aux fonctionnalités de votre plan actuel.", "billingTrialBannerUpgrade": "Passer à la version supérieure maintenant", "billingTrialBadge": "Essai gratuit", "trialActive": "Essai gratuit actif", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Êtes-vous sûr de vouloir redémarrer le tunnel WireGuard pour {name}? Le site perdra brièvement sa connectivité.", "siteRestartWarning": "Le site sera brièvement déconnecté pendant le redémarrage du tunnel.", "siteRestarted": "Site redémarré", - "siteRestartedDescription": "Le tunnel WireGuard a été redémarré.", + "siteRestartedDescription": "Le site a été redémarré.", "siteErrorRestart": "Échec du redémarrage du site", "siteErrorRestartDescription": "Une erreur s'est produite lors du redémarrage du site.", "siteSettingDescription": "Configurer les paramètres du site", @@ -234,6 +234,9 @@ "clientResourceDescription": "Créer et gérer des ressources qui ne sont accessibles que via un client connecté", "privateResourcesBannerTitle": "Accès privé sans confiance", "privateResourcesBannerDescription": "Les ressources privées utilisent la sécurité sans confiance, garantissant que les utilisateurs et les machines ne peuvent accéder qu'aux ressources que vous accordez explicitement. Connectez les appareils utilisateur ou les clients machines à ces ressources via un réseau privé virtuel sécurisé.", + "licenseBillingBannerTitle": "Gérer la facturation des licences", + "licenseBillingBannerDescription": "Pour gérer la facturation de vos clés de licence, y compris les méthodes de paiement et les factures, visitez la page de facturation. Vous pouvez générer des licences supplémentaires ci-dessous pour augmenter la capacité du serveur ou déployer plus d'instances.", + "licenseBillingBannerButton": "Aller à la facturation", "resourcesSearch": "Chercher des ressources...", "resourceAdd": "Ajouter une ressource", "resourceErrorDelte": "Erreur lors de la de suppression de la ressource", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Exposer une plage CIDR sur le réseau du site aux clients connectés", "privateResourceTypeHttpDescription": "Accéder à un service HTTP ou HTTPS via un domaine", "privateResourceTypeSshDescription": "Accéder à un serveur SSH depuis les clients connectés", + "privateResourceTypeGatewayDescription": "Envoyez tout le trafic Internet pour sortir par le réseau du site.", + "resourceTypeGatewayDescription": "Envoyez tout le trafic Internet pour sortir par le réseau du site.", "resourceDomainDescription": "La ressource sera servie à ce nom de domaine pleinement qualifié.", "resourceHTTPSSettings": "Paramètres HTTPS", "resourceHTTPSSettingsDescription": "Configurer comment la ressource sera accédée via HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Débloquez les fonctionnalités d'entreprise pour votre instance autohébergée de Pangolin. Achetez une clé de licence pour activer les capacités premium, puis ajoutez-la ci-dessous.", "licenseBannerGetLicense": "Obtenez une Licence", "licenseBannerViewDocs": "Afficher la Documentation", + "licenseUpgradeBannerTitle": "Besoin de plus de capacité ?", + "licenseUpgradeBannerDescription": "Si vous avez besoin d'augmenter votre capacité de site ou d'utilisateur, vous pouvez acheter plus de licences sur le portail app.pangolin.net et les ajouter ci-dessous pour mettre à jour votre instance.", + "licenseUpgradeBannerButton": "Acheter plus de licences", + "licenseMultipleKeysDescription": "Vous avez plusieurs licences activées sur ce serveur. Le niveau le plus élevé est utilisé.", "communityEdition": "Edition Communautaire", "licenseAboutDescription": "Ceci est destiné aux entreprises qui utilisent Pangolin dans un environnement commercial. Si vous utilisez Pangolin pour un usage personnel, vous pouvez ignorer cette section.", "licenseKeyActivated": "Clé de licence activée", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Êtes-vous sûr de vouloir supprimer la clé de licence ?", "licenseKeyDelete": "Supprimer la clé de licence", "licenseKeyDeleteConfirm": "Confirmer la suppression de la clé de licence", - "licenseTitle": "Gérer le statut de la licence", + "licenseTitle": "Gérer les licences", "licenseTitleDescription": "Voir et gérer les clés de licence dans le système", - "licenseHost": "Licence Hôte", - "licenseHostDescription": "Gérer la clé de licence principale de l'hôte.", + "licenseHost": "Licence", + "licenseHostDescription": "Voir le niveau de licence et les informations d'hébergement", "licensedNot": "Pas de licence", "hostId": "ID de l'hôte", "licenseReckeckAll": "Revérifier toutes les clés", @@ -586,7 +595,16 @@ "licensePurchase": "Acheter une licence", "licensePurchaseSites": "Acheter des sites supplémentaires", "licenseSitesUsedMax": "{usedSites} des {maxSites} sites utilisés", - "licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}} dans le système.", + "licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}}", + "licenseUsage": "Utilisation", + "licenseUsageDescription": "Voir le nombre d'utilisateurs et de sites licenciés pour cet hôte", + "licenseUsageSites": "Nœuds", + "licenseUsageUsers": "Utilisateurs", + "licenseNoUserLimit": "Il n'y a pas de limite sur le nombre d'utilisateurs utilisant un hôte non autorisé", + "licenseUsersUsedMax": "{usedUsers} des {maxUsers} utilisateurs utilisés", + "licenseUsersUsed": "{count, plural, =0 {# users} one {# user} other {# users}}", + "licenseUnlimited": "Illimité", + "licenseTierLabel": "Niveau", "licensePurchaseDescription": "Choisissez le nombre de sites que vous voulez {selectedMode, select, license {achetez une licence. Vous pouvez toujours ajouter plus de sites plus tard.} other {ajouter à votre licence existante.}}", "licenseFee": "Frais de licence", "licensePriceSite": "Prix par site", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Chaque règle doit avoir un numéro de priorité unique.", "rulesErrorValidation": "Règles invalides", "rulesErrorValidationRuleDescription": "Règle {ruleNumber} : {message}", - "rulesErrorInvalidMatchTypeDescription": "Sélectionnez un type de correspondance valide (chemin, IP, CIDR, pays, région ou ASN).", + "rulesErrorInvalidMatchTypeDescription": "Sélectionnez un type de correspondance valide (chemin, IP, CIDR, pays, région, ASN ou méthode).", "rulesErrorValueRequired": "Entrez une valeur pour cette règle.", "rulesErrorInvalidCountry": "Pays invalide", "rulesErrorInvalidCountryDescription": "Sélectionnez un pays valide.", @@ -2827,9 +2845,9 @@ "expectedResponseCodes": "Codes de réponse attendus", "expectedResponseCodesDescription": "Code de statut HTTP indiquant un état de santé satisfaisant. Si non renseigné, 200-300 est considéré comme satisfaisant.", "customRequestHeaders": "En-têtes de requête personnalisés", - "customRequestHeadersDescription": "En-têtes de requête envoyés aux cibles. Un par ligne : Nom-En-tête : valeur", + "customRequestHeadersDescription": "En-têtes envoyés aux cibles en aval. Un par ligne : Nom-En-tête : valeur", "customResponseHeaders": "En-têtes de réponse personnalisés", - "customResponseHeadersDescription": "En-têtes de réponse renvoyés au client. Un par ligne : Nom-En-tête : valeur", + "customResponseHeadersDescription": "En-têtes de réponse envoyés au client. Un par ligne : Nom-En-tête : valeur", "headersValidationError": "Les entêtes doivent être au format : Header-Name: valeur.", "saveHealthCheck": "Sauvegarder la vérification de l'état de santé", "healthCheckSaved": "Vérification de l'état de santé enregistrée", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Port", "editInternalResourceDialogModeHost": "Hôte", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Nœud de sortie", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "Portail AI", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.", "editInternalResourceDialogDestinationIPDescription": "L'adresse IP ou le nom d'hôte de la ressource sur le réseau du site.", "editInternalResourceDialogDestinationCidrDescription": "La gamme CIDR de la ressource sur le réseau du site.", + "editInternalResourceDialogDestinationGatewayDescription": "Les sites à utiliser comme nœuds de sortie pour cette ressource", "editInternalResourceDialogAlias": "Alias", "editInternalResourceDialogAliasDescription": "Un alias DNS interne optionnel pour cette ressource.", "createInternalResourceDialogNoSitesAvailable": "Aucun site disponible", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Contrôler l'accès aux ports TCP/UDP et si le ping ICMP est autorisé pour cette ressource.", "hostSettings": "Hôte", "cidrSettings": "CIDR", + "gatewaySettings": "Nœud de sortie", "createInternalResourceDialogResourceProperties": "Propriétés de la ressource", "createInternalResourceDialogName": "Nom", "createInternalResourceDialogSite": "Site", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "Portail AI", + "createInternalResourceDialogModeGateway": "Nœud de sortie", "scheme": "Méthode HTTP", "createInternalResourceDialogScheme": "Méthode HTTP", "createInternalResourceDialogEnableSsl": "Activer TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Mémoriser cet identifiant d'organisation", "orgAuthBackToSignIn": "Retour à la connexion standard", "orgAuthNoAccount": "Vous n'avez pas de compte ?", - "subscriptionRequiredToUse": "Un abonnement est requis pour utiliser cette fonctionnalité.", - "mustUpgradeToUse": "Vous devez mettre à jour votre abonnement pour utiliser cette fonctionnalité.", + "subscriptionRequiredToUse": "Un abonnement est requis pour utiliser cette fonctionnalité. Réserver une démo", + "mustUpgradeToUse": "Vous devez mettre à jour votre abonnement pour utiliser cette fonctionnalité. Réserver une démo", "subscriptionRequiredTierToUse": "Cette fonctionnalité nécessite {tier} ou supérieur.", - "upgradeToTierToUse": "Passez à {tier} ou plus pour utiliser cette fonctionnalité.", + "upgradeToTierToUse": "Passez à {tier} pour utiliser cette fonctionnalité. Réserver une démo", "subscriptionTierTier1": "Domicile", "subscriptionTierTier2": "Equipe", "subscriptionTierTier3": "Entreprise", @@ -3651,8 +3673,8 @@ "sourceAddress": "Adresse source", "destinationAddress": "Adresse de destination", "duration": "Durée", - "licenseRequiredToUse": "Licence Enterprise Edition requise. Réserver une démo ou un essai", - "ossEnterpriseEditionRequired": "Licence Enterprise Edition requise. Réserver une démo ou un essai", + "licenseRequiredToUse": "Licence Enterprise Edition requise. Réserver une démo", + "ossEnterpriseEditionRequired": "Licence Enterprise Edition requise. Réserver une démo", "certResolver": "Résolveur de certificat", "certResolverDescription": "Sélectionnez le solveur de certificat à utiliser pour cette ressource.", "selectCertResolver": "Sélectionnez le résolveur de certificat", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Vérification de l'autorisation de l'appareil...", "signedInAs": "Connecté en tant que", "deviceCodeEnterPrompt": "Entrez le code affiché sur l'appareil", + "deviceCodeConfirmPrompt": "Confirmez que cela correspond au code de votre appareil", "continue": "Continuer", "deviceUnknownLocation": "Lieu inconnu", "deviceAuthorizationRequested": "Cette autorisation a été demandée à {location} sur {date}. Assurez-vous que vous faites confiance à cet appareil car il aura accès au compte.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Méthodes d'authentification activées pour cette ressource.", "resourceLauncherPrivateClientRequired": "Connectez-vous avec un client sur votre appareil pour accéder à cette ressource en privé.", "resourceLauncherPrivateClientRequiredTitle": "Connexion client requise", + "resourceLauncherExitNodeTitle": "Routage des nœuds de sortie", + "resourceLauncherExitNodeDescription": "Après avoir connecté votre client, sélectionnez ce nœud de sortie dans le menu client pour acheminer tout le trafic à travers les sites connectés.", "resourceLauncherDownloadClient": "Télécharger le client", "resourceLauncherFailedToLoadDetails": "Impossible de charger les détails de la ressource. Vous n'avez peut-être plus accès à cette ressource.", "resourceLauncherNoPortRestrictions": "Aucune restriction de port", + "resourceLauncherAllInternetTraffic": "Tout le trafic Internet", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Non étiqueté", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Afficher la barre d'outils", "sessionToolbarHide": "Masquer la barre d'outils", "actionUpdateSiteApprovals": "Mettre à jour les approbations de site", - "check": "Vérifier" + "check": "Vérifier", + "rulesErrorInvalidMethod": "Méthode HTTP invalide", + "rulesErrorInvalidMethodDescription": "Sélectionnez au moins une méthode HTTP.", + "rulesSelectMethods": "Sélectionner les méthodes" } diff --git a/messages/it-IT.json b/messages/it-IT.json index 990552f71..92c9d6645 100644 --- a/messages/it-IT.json +++ b/messages/it-IT.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Il tuo periodo di prova scade tra {countdown}. Aggiorna per mantenere l'accesso.", "trialBannerExpired": "Il tuo periodo di prova è scaduto. Aggiorna ora per ripristinare l'accesso.", "billingTrialBannerTitle": "Prova Gratuita Attiva", - "billingTrialBannerDescription": "Attualmente sei in una prova gratuita sul livello business. Quando la prova terminerà, il tuo account tornerà automaticamente alle funzionalità e ai limiti del piano Basic. Effettua l'upgrade in qualsiasi momento per mantenere l'accesso alle funzionalità del tuo piano attuale.", + "billingTrialBannerDescription": "Attualmente sei in una prova gratuita sul livello {tier}. Quando la prova terminerà, il tuo account tornerà automaticamente alle funzionalità e ai limiti del piano Basic. Effettua l'upgrade in qualsiasi momento per mantenere l'accesso alle funzionalità del tuo piano attuale.", "billingTrialBannerUpgrade": "Effettua l'Upgrade Ora", "billingTrialBadge": "Prova Gratuita", "trialActive": "Prova Gratuita Attiva", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Sei sicuro di voler riavviare il tunnel WireGuard per {name}? Il sito perderà brevemente la connettività.", "siteRestartWarning": "Il sito si disconnette brevemente mentre il tunnel si riavvia.", "siteRestarted": "Sito riavviato", - "siteRestartedDescription": "Il tunnel WireGuard è stato riavviato.", + "siteRestartedDescription": "Il sito è stato riavviato.", "siteErrorRestart": "Impossibile riavviare il sito", "siteErrorRestartDescription": "Si è verificato un errore durante il riavvio del sito.", "siteSettingDescription": "Configura le impostazioni del sito", @@ -234,6 +234,9 @@ "clientResourceDescription": "Crea e gestisci risorse accessibili solo tramite un client connesso", "privateResourcesBannerTitle": "Accesso Privato Zero-Trust", "privateResourcesBannerDescription": "Le risorse private utilizzano la sicurezza zero-trust, assicurandosi che gli utenti e le macchine possano accedere solo alle risorse a cui hai concesso esplicitamente l'accesso. Collega i dispositivi utente o i client macchina per accedere a queste risorse tramite una rete privata virtuale sicura.", + "licenseBillingBannerTitle": "Gestisci Fatturazione Licenza", + "licenseBillingBannerDescription": "Per gestire la fatturazione delle chiavi di licenza, inclusi i metodi di pagamento e le fatture, visita la pagina di fatturazione. Puoi generare licenze aggiuntive di seguito per aumentare la capacità del server o distribuire più istanze.", + "licenseBillingBannerButton": "Vai alla Fatturazione", "resourcesSearch": "Cerca risorse...", "resourceAdd": "Aggiungi Risorsa", "resourceErrorDelte": "Errore nell'eliminare la risorsa", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Espone un intervallo CIDR sulla rete del sito ai client connessi", "privateResourceTypeHttpDescription": "Accedi a un servizio HTTP o HTTPS tramite un dominio", "privateResourceTypeSshDescription": "Accedi a un server SSH dai client connessi", + "privateResourceTypeGatewayDescription": "Invia tutto il traffico Internet per uscire attraverso la rete del sito.", + "resourceTypeGatewayDescription": "Invia tutto il traffico Internet per uscire attraverso la rete del sito.", "resourceDomainDescription": "La risorsa sarà servita su questo dominio completamente qualificato.", "resourceHTTPSSettings": "Impostazioni HTTPS", "resourceHTTPSSettingsDescription": "Configura come sarà possibile accedere alla risorsa su HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Sblocca le funzionalità enterprise per la tua istanza Pangolin auto-ospitata. Acquista una chiave di licenza per attivare le capacità premium e poi aggiungila qui sotto.", "licenseBannerGetLicense": "Ottieni una Licenza", "licenseBannerViewDocs": "Visualizza Documentazione", + "licenseUpgradeBannerTitle": "Hai Bisogno di Più Capacità?", + "licenseUpgradeBannerDescription": "Se hai bisogno di aumentare la capacità di sito o di utenti, puoi acquistare più licenze dal portale app.pangolin.net e aggiungerle di seguito per aggiornare la tua istanza.", + "licenseUpgradeBannerButton": "Acquista Più Licenze", + "licenseMultipleKeysDescription": "Hai attivato più licenze su questo server. Viene utilizzato il livello più alto.", "communityEdition": "Edizione Community", "licenseAboutDescription": "Questa sezione è per gli utenti aziendali e aziendali che utilizzano Pangolin in un ambiente commerciale. Se stai usando Pangolin per uso personale, puoi ignorare questa sezione.", "licenseKeyActivated": "Chiave di licenza attivata", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Sei sicuro di voler eliminare la chiave di licenza?", "licenseKeyDelete": "Elimina Chiave Di Licenza", "licenseKeyDeleteConfirm": "Conferma Elimina Chiave Di Licenza", - "licenseTitle": "Gestisci Stato Licenza", + "licenseTitle": "Gestisci Licenze", "licenseTitleDescription": "Visualizza e gestisci le chiavi di licenza nel sistema", - "licenseHost": "Licenza Host", - "licenseHostDescription": "Gestisci la chiave di licenza principale per l'host.", + "licenseHost": "Licenza", + "licenseHostDescription": "Vedi il livello di licenza e le informazioni sull'host", "licensedNot": "Non Licenziato", "hostId": "ID Host", "licenseReckeckAll": "Ricontrolla Tutte le chiavi", @@ -586,7 +595,16 @@ "licensePurchase": "Acquista Licenza", "licensePurchaseSites": "Acquista Siti Aggiuntivi", "licenseSitesUsedMax": "{usedSites} di {maxSites} siti utilizzati", - "licenseSitesUsed": "{count, plural, =0 {# siti} one {# sito} other {# siti}} nel sistema.", + "licenseSitesUsed": "{count, plural, =0 {# siti} one {# sito} other {# siti}}", + "licenseUsage": "Utilizzo", + "licenseUsageDescription": "Visualizza il numero di utenti e siti autorizzati per questo host", + "licenseUsageSites": "Siti", + "licenseUsageUsers": "Utenti", + "licenseNoUserLimit": "Non c'è alcun limite al numero di utenti che utilizzano un host senza licenza", + "licenseUsersUsedMax": "{usedUsers} di {maxUsers} utenti utilizzati", + "licenseUsersUsed": "{count, plural, =0 {# utenti} one {# utente} other {# utenti}}", + "licenseUnlimited": "Illimitato", + "licenseTierLabel": "Livello", "licensePurchaseDescription": "Scegli quanti siti vuoi {selectedMode, select, license {acquista una licenza. Puoi sempre aggiungere altri siti più tardi.} other {aggiungi alla tua licenza esistente.}}", "licenseFee": "Costo della licenza", "licensePriceSite": "Prezzo per sito", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Ogni regola deve avere un numero di priorità univoco.", "rulesErrorValidation": "Regole non valide", "rulesErrorValidationRuleDescription": "Regola {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Seleziona un tipo di corrispondenza valido (percorso, IP, CIDR, paese, regione o ASN).", + "rulesErrorInvalidMatchTypeDescription": "Seleziona un tipo di corrispondenza valido (percorso, IP, CIDR, paese, regione, ASN o metodo).", "rulesErrorValueRequired": "Inserisci un valore per questa regola.", "rulesErrorInvalidCountry": "Nazione non valida", "rulesErrorInvalidCountryDescription": "Seleziona un paese valido.", @@ -2826,10 +2844,10 @@ "retryAttempts": "Tentativi di Riprova", "expectedResponseCodes": "Codici di Risposta Attesi", "expectedResponseCodesDescription": "Codice di stato HTTP che indica lo stato di salute. Se lasciato vuoto, considerato sano è compreso tra 200-300.", - "customRequestHeaders": "Intestazioni di richiesta personalizzate", - "customRequestHeadersDescription": "Intestazioni di richiesta inviate ai target. Una per riga: Nome-Intestazione: valore", - "customResponseHeaders": "Intestazioni di risposta personalizzate", - "customResponseHeadersDescription": "Intestazioni di risposta restituite al client. Una per riga: Nome-Intestazione: valore", + "customRequestHeaders": "Intestazioni Richiesta Personalizzate", + "customRequestHeadersDescription": "Intestazioni richieste inviate agli obiettivi a valle. Una per riga: Nome-Intestazione: valore", + "customResponseHeaders": "Intestazioni Risposta Personalizzate", + "customResponseHeadersDescription": "Intestazioni di risposta inviate al cliente. Una per riga: Nome-Intestazione: valore", "headersValidationError": "Le intestazioni devono essere nel formato: Intestazione-Nome: valore.", "saveHealthCheck": "Salva Controllo Salute", "healthCheckSaved": "Controllo Salute Salvato", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Porta", "editInternalResourceDialogModeHost": "Host", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Nodo di Uscita", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "Gateway AI", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "L'indirizzo IP o il nome host della risorsa nella rete del sito.", "editInternalResourceDialogDestinationIPDescription": "L'indirizzo IP o hostname della risorsa nella rete del sito.", "editInternalResourceDialogDestinationCidrDescription": "La gamma CIDR della risorsa sulla rete del sito.", + "editInternalResourceDialogDestinationGatewayDescription": "I siti da utilizzare come nodi di uscita per questa risorsa", "editInternalResourceDialogAlias": "Alias", "editInternalResourceDialogAliasDescription": "Un alias DNS interno opzionale per questa risorsa.", "createInternalResourceDialogNoSitesAvailable": "Nessun Sito Disponibile", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Controlla l'accesso alle porte TCP/UDP e se ICMP ping è consentito per questa risorsa.", "hostSettings": "Host", "cidrSettings": "CIDR", + "gatewaySettings": "Nodo di Uscita", "createInternalResourceDialogResourceProperties": "Proprietà della Risorsa", "createInternalResourceDialogName": "Nome", "createInternalResourceDialogSite": "Sito", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "Gateway AI", + "createInternalResourceDialogModeGateway": "Nodo di Uscita", "scheme": "Metodo HTTP", "createInternalResourceDialogScheme": "Metodo HTTP", "createInternalResourceDialogEnableSsl": "Abilita TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Ricorda questo ID organizzazione", "orgAuthBackToSignIn": "Torna alla modalità di accesso standard", "orgAuthNoAccount": "Non hai un account?", - "subscriptionRequiredToUse": "Per utilizzare questa funzionalità è necessario un abbonamento.", - "mustUpgradeToUse": "Devi aggiornare il tuo abbonamento per utilizzare questa funzionalità.", + "subscriptionRequiredToUse": "È richiesto un abbonamento per utilizzare questa funzionalità. Prenota una demo", + "mustUpgradeToUse": "Devi aggiornare il tuo abbonamento per utilizzare questa funzionalità. Prenota una demo", "subscriptionRequiredTierToUse": "Questa funzione richiede {tier} o superiore.", - "upgradeToTierToUse": "Aggiorna ad {tier} o superiore per utilizzare questa funzionalità.", + "upgradeToTierToUse": "Aggiorna ad {tier} per utilizzare questa funzionalità. Prenota una demo", "subscriptionTierTier1": "Casa", "subscriptionTierTier2": "Squadra", "subscriptionTierTier3": "Business", @@ -3651,8 +3673,8 @@ "sourceAddress": "Indirizzo Di Origine", "destinationAddress": "Indirizzo Di Destinazione", "duration": "Durata", - "licenseRequiredToUse": "Licenza Enterprise Edition è richiesta. Prenota una demo o prova", - "ossEnterpriseEditionRequired": "Licenza Enterprise Edition è richiesta. Prenota una demo o prova", + "licenseRequiredToUse": "Licenza Enterprise Edition è richiesta. Prenota una demo", + "ossEnterpriseEditionRequired": "Licenza Enterprise Edition è richiesta. Prenota una demo", "certResolver": "Risolutore Di Certificato", "certResolverDescription": "Selezionare il risolutore di certificati da usare per questa risorsa.", "selectCertResolver": "Seleziona Risolutore Di Certificato", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Verifica autorizzazione dispositivo...", "signedInAs": "Accesso come", "deviceCodeEnterPrompt": "Inserisci il codice visualizzato sul dispositivo", + "deviceCodeConfirmPrompt": "Conferma che questo corrisponde al codice sul tuo dispositivo", "continue": "Continua", "deviceUnknownLocation": "Posizione sconosciuta", "deviceAuthorizationRequested": "Questa autorizzazione è stata richiesta ad {location} su {date}. Assicurati di fidarti di questo dispositivo in quanto avrà accesso all'account.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Metodi di autenticazione abilitati per questa risorsa.", "resourceLauncherPrivateClientRequired": "Connettiti con un client sul tuo dispositivo per accedere a questa risorsa privatamente.", "resourceLauncherPrivateClientRequiredTitle": "Connessione Client Richiesta", + "resourceLauncherExitNodeTitle": "Routing Nodo di Uscita", + "resourceLauncherExitNodeDescription": "Dopo aver connesso il tuo client, seleziona questo nodo di uscita nel menu del client per instradare tutto il traffico attraverso i siti allegati.", "resourceLauncherDownloadClient": "Scarica client", "resourceLauncherFailedToLoadDetails": "Impossibile caricare i dettagli della risorsa. Potresti non avere più accesso a questa risorsa.", "resourceLauncherNoPortRestrictions": "Nessuna restrizione di porta", + "resourceLauncherAllInternetTraffic": "Tutto il traffico Internet", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Non Etichettato", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Mostra barra degli strumenti", "sessionToolbarHide": "Nascondi barra degli strumenti", "actionUpdateSiteApprovals": "Aggiorna Approvazioni del Sito", - "check": "Controlla" + "check": "Controlla", + "rulesErrorInvalidMethod": "Metodo HTTP non valido", + "rulesErrorInvalidMethodDescription": "Seleziona almeno un metodo HTTP.", + "rulesSelectMethods": "Seleziona metodi" } diff --git a/messages/ko-KR.json b/messages/ko-KR.json index 4981759ad..b3d89abe7 100644 --- a/messages/ko-KR.json +++ b/messages/ko-KR.json @@ -26,7 +26,7 @@ "trialBannerMessage": "시험 사용 기간이 {countdown} 안에 만료됩니다. 업그레이드하여 액세스를 유지하세요.", "trialBannerExpired": "시험 사용 기간이 만료되었습니다. 지금 업그레이드하여 액세스를 복구하세요.", "billingTrialBannerTitle": "무료 평가판 활성화", - "billingTrialBannerDescription": "현재 비즈니스 티어의 무료 평가판을 사용 중입니다. 평가판이 종료되면 계정은 자동으로 기본 티어 기능 및 제한으로 돌아갑니다. 현재 계획의 기능을 유지하려면 언제든지 업그레이드 하세요.", + "billingTrialBannerDescription": "현재 {tier} 티어의 무료 평가판을 사용 중입니다. 평가판이 종료되면 계정은 기본 티어 기능 및 제한으로 자동으로 변경됩니다. 현재 플랜의 기능을 유지하기 위해 언제든지 업그레이드 하세요.", "billingTrialBannerUpgrade": "지금 업그레이드", "billingTrialBadge": "무료 평가판", "trialActive": "무료 체험 활성화됨", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "{name}의 WireGuard 터널을 재시작하시겠습니까? 이 작업으로 인해 사이트의 연결이 일시적으로 중단될 수 있습니다.", "siteRestartWarning": "터널을 재시작하는 동안 사이트가 일시적으로 연결이 끊깁니다.", "siteRestarted": "사이트가 재시작되었습니다", - "siteRestartedDescription": "WireGuard 터널이 재시작되었습니다.", + "siteRestartedDescription": "사이트가 재시작되었습니다.", "siteErrorRestart": "사이트 재시작 실패", "siteErrorRestartDescription": "사이트를 재시작하는 중 오류가 발생했습니다.", "siteSettingDescription": "사이트에서 설정을 구성하세요.", @@ -234,6 +234,9 @@ "clientResourceDescription": "연결된 클라이언트를 통해서만 접근할 수 있는 리소스를 생성하고 관리하세요.", "privateResourcesBannerTitle": "제로 트러스트 개인 접근", "privateResourcesBannerDescription": "개인 리소스는 제로 트러스트 보안을 사용하여, 사용자와 장치가 명시적으로 허용된 리소스에만 접근할 수 있도록 보장합니다. 이러한 리소스에 접근하려면 안전한 가상 사설 네트워크를 통해 사용자 장치 또는 머신 클라이언트를 연결하십시오.", + "licenseBillingBannerTitle": "라이선스 청구 관리", + "licenseBillingBannerDescription": "청구 페이지를 방문하여 라이선스 키의 결제 방법 및 청구서를 관리하십시오. 아래에서 추가 라이선스를 생성하여 서버 용량을 늘리거나 더 많은 인스턴스를 배포할 수 있습니다.", + "licenseBillingBannerButton": "청구로 이동", "resourcesSearch": "리소스 검색...", "resourceAdd": "리소스 추가", "resourceErrorDelte": "리소스 삭제 중 오류 발생", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "연결된 클라이언트에게 사이트 네트워크에서 CIDR 범위를 노출", "privateResourceTypeHttpDescription": "도메인을 통해 HTTP 또는 HTTPS 서비스에 액세스", "privateResourceTypeSshDescription": "연결된 클라이언트에서 SSH 서버에 액세스", + "privateResourceTypeGatewayDescription": "모든 인터넷 트래픽을 사이트 네트워크를 통해 종료하도록 전송합니다.", + "resourceTypeGatewayDescription": "모든 인터넷 트래픽을 사이트 네트워크를 통해 종료하도록 전송합니다.", "resourceDomainDescription": "리소스는 숙주 네임에서 제공됩니다.", "resourceHTTPSSettings": "HTTPS 설정", "resourceHTTPSSettingsDescription": "리소스가 HTTPS로 접근할 수 있는 방식을 구성합니다.", @@ -555,6 +560,10 @@ "licenseBannerDescription": "자체 호스팅된 Pangolin 인스턴스에서 기업 기능을 잠금 해제하십시오. 라이선스 키를 구입하여 프리미엄 기능을 활성화하고 아래에 추가하십시오.", "licenseBannerGetLicense": "라이선스 획득", "licenseBannerViewDocs": "문서 보기", + "licenseUpgradeBannerTitle": "더 많은 용량이 필요하십니까?", + "licenseUpgradeBannerDescription": "사이트 또는 사용자 용량을 늘리려면 app.pangolin.net 포털에서 더 많은 라이센스를 구매하고 아래에 추가하여 인스턴스를 업그레이드하십시오.", + "licenseUpgradeBannerButton": "더 많은 라이센스 구매", + "licenseMultipleKeysDescription": "이 서버에는 여러 개의 라이선스가 활성화되어 있습니다. 가장 높은 등급이 사용됩니다.", "communityEdition": "커뮤니티 에디션", "licenseAboutDescription": "이것은 상업적 환경에서 Pangolin을 사용하는 비즈니스 및 기업 사용자용입니다. 개인 용도로 Pangolin을 사용하는 경우 이 섹션을 무시할 수 있습니다.", "licenseKeyActivated": "라이센스 키가 활성화되었습니다", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "라이선스 키를 삭제하시겠습니까?", "licenseKeyDelete": "라이센스 키 삭제", "licenseKeyDeleteConfirm": "라이센스 키 삭제 확인", - "licenseTitle": "라이선스 상태 관리", + "licenseTitle": "라이선스 관리", "licenseTitleDescription": "시스템에서 라이센스 키를 보고 관리합니다.", - "licenseHost": "호스트 라이센스", - "licenseHostDescription": "호스트의 주요 라이센스 키를 관리합니다.", + "licenseHost": "라이선스", + "licenseHostDescription": "라이선스 등급과 호스트 정보를 확인하세요", "licensedNot": "라이센스 없음", "hostId": "호스트 ID", "licenseReckeckAll": "모든 키 재확인", @@ -586,7 +595,16 @@ "licensePurchase": "라이센스 구매", "licensePurchaseSites": "추가 사이트 구매", "licenseSitesUsedMax": "{maxSites}개의 사이트 중 {usedSites}개 사용 중", - "licenseSitesUsed": "시스템에 {count, plural, =0 {# 사이트} one {# 사이트} other {# 사이트}}가 있습니다.", + "licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}}", + "licenseUsage": "이용량", + "licenseUsageDescription": "호스트에 대한 사용자 및 사이트 라이센스 수를 확인하세요", + "licenseUsageSites": "사이트들", + "licenseUsageUsers": "사용자들", + "licenseNoUserLimit": "라이선스가 없는 호스트를 사용하는 사용자 수에는 제한이 없습니다", + "licenseUsersUsedMax": "{maxUsers}명의 사용자 중 {usedUsers}명 사용 중", + "licenseUsersUsed": "{count, plural, =0 {# users} one {# user} other {# users}}", + "licenseUnlimited": "무제한", + "licenseTierLabel": "등급", "licensePurchaseDescription": "구매할 사이트 수를 선택하세요 {selectedMode, select, license {라이센스를 구매합니다. 나중에 더 많은 사이트를 추가할 수 있습니다.} other {기존 라이센스에 추가합니다.}}", "licenseFee": "라이선스 요금", "licensePriceSite": "사이트당 가격", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "각 규칙은 고유한 우선순위 번호를 가져야 합니다.", "rulesErrorValidation": "유효하지 않은 규칙", "rulesErrorValidationRuleDescription": "규칙 {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "유효한 매칭 유형을 선택하세요 (경로, IP, CIDR, 국가, 지역, 또는 ASN).", + "rulesErrorInvalidMatchTypeDescription": "유효한 매칭 유형을 선택하세요 (경로, IP, CIDR, 국가, 지역, ASN, 또는 방법).", "rulesErrorValueRequired": "이 규칙에 대한 값을 입력하세요.", "rulesErrorInvalidCountry": "유효하지 않은 국가", "rulesErrorInvalidCountryDescription": "유효한 국가를 선택하세요.", @@ -2827,9 +2845,9 @@ "expectedResponseCodes": "예상 응답 코드", "expectedResponseCodesDescription": "정상 상태를 나타내는 HTTP 상태 코드입니다. 비워 두면 200-300이 정상으로 간주됩니다.", "customRequestHeaders": "사용자 정의 요청 헤더", - "customRequestHeadersDescription": "다운스트림 대상으로 전송되는 요청 헤더. 한 줄에 하나씩: 헤더-이름: 값", + "customRequestHeadersDescription": "헤더는 새 줄로 구분됨: Header-Name: value", "customResponseHeaders": "사용자 정의 응답 헤더", - "customResponseHeadersDescription": "클라이언트로 반환되는 응답 헤더. 한 줄에 하나씩: 헤더-이름: 값", + "customResponseHeadersDescription": "응답 헤더가 클라이언트로 전송됩니다. 줄당 하나: Header-Name: value", "headersValidationError": "헤더는 형식이어야 합니다: 헤더명: 값.", "saveHealthCheck": "상태 확인 저장", "healthCheckSaved": "상태 확인이 저장되었습니다.", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "포트", "editInternalResourceDialogModeHost": "호스트", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "종단 노드", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI 게이트웨이", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "사이트 네트워크의 자원 IP 주소입니다.", "editInternalResourceDialogDestinationIPDescription": "사이트 네트워크의 자원 IP 또는 호스트 네임 주소입니다.", "editInternalResourceDialogDestinationCidrDescription": "사이트 네트워크의 자원 IP 주소입니다.", + "editInternalResourceDialogDestinationGatewayDescription": "이 리소스용 종단 노드로 사용할 사이트", "editInternalResourceDialogAlias": "별칭", "editInternalResourceDialogAliasDescription": "이 리소스에 대한 선택적 내부 DNS 별칭입니다.", "createInternalResourceDialogNoSitesAvailable": "사용 가능한 사이트가 없습니다.", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "이 리소스에 대한 TCP/UDP 포트 접근과 ICMP 핑이 허용되는지 여부를 제어합니다.", "hostSettings": "호스트", "cidrSettings": "CIDR", + "gatewaySettings": "종단 노드", "createInternalResourceDialogResourceProperties": "리소스 속성", "createInternalResourceDialogName": "이름", "createInternalResourceDialogSite": "사이트", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI 게이트웨이", + "createInternalResourceDialogModeGateway": "종단 노드", "scheme": "스킴", "createInternalResourceDialogScheme": "스킴", "createInternalResourceDialogEnableSsl": "TLS 활성화", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "이 조직 ID 기억하기", "orgAuthBackToSignIn": "표준 로그인을 통해 돌아가기", "orgAuthNoAccount": "계정이 없으신가요?", - "subscriptionRequiredToUse": "이 기능을 사용하려면 구독이 필요합니다.", - "mustUpgradeToUse": "이 기능을 사용하려면 구독을 업그레이드해야 합니다.", + "subscriptionRequiredToUse": "이 기능을 사용하려면 구독이 필요합니다. 데모 예약", + "mustUpgradeToUse": "이 기능을 사용하려면 구독을 업그레이드해야 합니다. 데모 예약", "subscriptionRequiredTierToUse": "이 기능을 사용하려면 {tier} 이상의 등급이 필요합니다.", - "upgradeToTierToUse": "이 기능을 사용하려면 {tier} 이상으로 업그레이드하세요.", + "upgradeToTierToUse": "이 기능을 사용하려면 {tier}로 업그레이드하십시오. 데모 예약", "subscriptionTierTier1": "홈", "subscriptionTierTier2": "팀", "subscriptionTierTier3": "비즈니스", @@ -3651,8 +3673,8 @@ "sourceAddress": "소스 주소", "destinationAddress": "대상 주소", "duration": "지속 시간", - "licenseRequiredToUse": "Enterprise Edition 라이센스가 필요합니다. 데모 또는 평가판 예약", - "ossEnterpriseEditionRequired": "Enterprise Edition 라이센스가 필요합니다. 데모 또는 평가판 예약", + "licenseRequiredToUse": "Enterprise Edition 라이센스가 필요합니다. 데모 예약", + "ossEnterpriseEditionRequired": "Enterprise Edition 라이센스가 필요합니다. 데모 예약", "certResolver": "인증서 해결사", "certResolverDescription": "이 리소스에 사용할 인증서 해결사를 선택하세요.", "selectCertResolver": "인증서 해결사 선택", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "장치 권한 검증 중...", "signedInAs": "로그인한 사용자", "deviceCodeEnterPrompt": "기기에 표시된 코드를 입력하세요", + "deviceCodeConfirmPrompt": "기기에 코드가 일치하는지 확인하십시오", "continue": "계속 진행하기", "deviceUnknownLocation": "알 수 없는 위치", "deviceAuthorizationRequested": "이 인증 요청은 {location}에서 {date}에 요청되었습니다. 이 장치에 액세스 권한을 부여할 신뢰할 수 있는 경우 확인하세요.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "이 리소스에 활성화된 인증 방법입니다.", "resourceLauncherPrivateClientRequired": "이 리소스에 개인적으로 접근하려면 기기에서 클라이언트로 연결하십시오.", "resourceLauncherPrivateClientRequiredTitle": "클라이언트 연결 필요", + "resourceLauncherExitNodeTitle": "종단 노드 라우팅", + "resourceLauncherExitNodeDescription": "클라이언트를 연결한 후에 클라이언트 메뉴에서 이 종단 노드를 선택하여 연결된 사이트를 통해 모든 트래픽을 라우팅하십시오.", "resourceLauncherDownloadClient": "클라이언트 다운로드", "resourceLauncherFailedToLoadDetails": "리소스 세부 정보를 로드할 수 없습니다. 더 이상 이 리소스에 접근할 수 없을 수 있습니다.", "resourceLauncherNoPortRestrictions": "포트 제한 없음", + "resourceLauncherAllInternetTraffic": "모든 인터넷 트래픽", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "레이블 없음", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "툴바 보기", "sessionToolbarHide": "툴바 숨기기", "actionUpdateSiteApprovals": "사이트 승인 업데이트", - "check": "확인" + "check": "확인", + "rulesErrorInvalidMethod": "유효하지 않은 HTTP 메소드", + "rulesErrorInvalidMethodDescription": "최소한 하나의 HTTP 메소드를 선택하십시오.", + "rulesSelectMethods": "방법 선택" } diff --git a/messages/nb-NO.json b/messages/nb-NO.json index d3ed06b97..682b36116 100644 --- a/messages/nb-NO.json +++ b/messages/nb-NO.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Din prøveperiode utløper om {countdown}. Oppgrader for å beholde tilgangen.", "trialBannerExpired": "Prøveperioden din har utløpt. Oppgrader nå for å gjenopprette tilgangen.", "billingTrialBannerTitle": "Prøveversjon Aktiv", - "billingTrialBannerDescription": "Du har for øyeblikket en gratis prøveversjon på forretningsnivået. Når prøven avsluttes, vil kontoen din automatisk gå tilbake til funksjoner og begrensninger på Basis-nivået. Oppgrader når som helst for å beholde tilgang til de nåværende planens funksjoner.", + "billingTrialBannerDescription": "Du er for tiden på en gratis prøveversjon av {tier} nivå. Når prøven avsluttes, vil kontoen din automatisk gå tilbake til funksjoner og begrensninger på Basis-nivået. Oppgrader når som helst for å beholde tilgang til de nåværende planens funksjoner.", "billingTrialBannerUpgrade": "Oppgrader nå", "billingTrialBadge": "Prøveversjon", "trialActive": "Gratis prøveversjon aktiv", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Er du sikker på at du vil starte WireGuard-tunnelen for {name} på nytt? Området vil midlertidig miste tilkoblingen.", "siteRestartWarning": "Området vil kobles kort fra mens tunnelen starter om.", "siteRestarted": "Område startet på nytt", - "siteRestartedDescription": "WireGuard-tunnelen er startet på nytt.", + "siteRestartedDescription": "Området har blitt startet om.", "siteErrorRestart": "Kan ikke starte område på nytt", "siteErrorRestartDescription": "En feil oppstod ved omstart av området.", "siteSettingDescription": "Konfigurere innstillingene på nettstedet", @@ -234,6 +234,9 @@ "clientResourceDescription": "Opprette og administrere ressurser som bare er tilgjengelige via en tilkoblet klient", "privateResourcesBannerTitle": "Zero-Trust privat tilgang", "privateResourcesBannerDescription": "Private ressurser bruker Zero-Trust-sikkerhet, og sikrer at brukere og maskiner kun kan få tilgang til ressurser du eksplisitt gir tillatelse til. Koble bruker-enheter eller maskinklienter for å få tilgang til disse ressursene via et sikkert virtuelt privat nettverk.", + "licenseBillingBannerTitle": "Behandle lisensfakturering", + "licenseBillingBannerDescription": "For å administrere fakturering for lisensnøklene dine, inkludert betalingsmetoder og fakturaer, besøk faktureringssiden. Du kan generere flere lisenser nedenfor for å øke serverkapasiteten eller distribuere flere instanser.", + "licenseBillingBannerButton": "Gå til fakturering", "resourcesSearch": "Søk i ressurser...", "resourceAdd": "Legg til ressurs", "resourceErrorDelte": "Feil ved sletting av ressurs", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Eksponer et CIDR-område på nettverksområdet for tilkoblede klienter", "privateResourceTypeHttpDescription": "Tilgang til en HTTP- eller HTTPS-tjeneste gjennom et domene", "privateResourceTypeSshDescription": "Tilgang til en SSH-server fra tilkoblede klienter", + "privateResourceTypeGatewayDescription": "Send all internett trafikk for å gå ut gjennom områdenettverket.", + "resourceTypeGatewayDescription": "Send all internett trafikk for å gå ut gjennom områdenettverket.", "resourceDomainDescription": "Ressursen vil bli servert på dette fullstendig kvalifiserte domenenavnet.", "resourceHTTPSSettings": "HTTPS-innstillinger", "resourceHTTPSSettingsDescription": "Konfigurer hvordan ressursen skal nås over HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Lås opp bedriftsfunksjoner for din egenvertede Pangolin-instans. Kjøp en lisensnøkkel for å aktivere premium-funksjoner og legg den inn nedenfor.", "licenseBannerGetLicense": "Få en lisens", "licenseBannerViewDocs": "Vis dokumentasjon", + "licenseUpgradeBannerTitle": "Trenger du mer kapasitet?", + "licenseUpgradeBannerDescription": "Hvis du trenger å øke din område- eller brukerkapasitet, kan du kjøpe flere lisenser fra app.pangolin.net portalen og legge dem til nedenfor for å oppgradere instansen din.", + "licenseUpgradeBannerButton": "Kjøp flere lisenser", + "licenseMultipleKeysDescription": "Du har flere lisenser aktivert på denne serveren. Det høyeste nivået brukes.", "communityEdition": "Fellesskapsutgave", "licenseAboutDescription": "Dette er for bedrifts- og foretaksbrukere som bruker Pangolin i et kommersielt miljø. Hvis du bruker Pangolin til personlig bruk, kan du ignorere denne seksjonen.", "licenseKeyActivated": "Lisensnøkkel aktivert", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Er du sikker på at du vil slette lisensnøkkelen?", "licenseKeyDelete": "Slett Lisensnøkkel", "licenseKeyDeleteConfirm": "Bekreft sletting av lisensnøkkel", - "licenseTitle": "Behandle lisensstatus", + "licenseTitle": "Behandle lisenser", "licenseTitleDescription": "Se og administrer lisensnøkler i systemet", - "licenseHost": "Vertslisens", - "licenseHostDescription": "Behandle hovedlisensnøkkelen for verten.", + "licenseHost": "Lisens", + "licenseHostDescription": "Se lisensnivå og vertsinformasjon", "licensedNot": "Ikke lisensiert", "hostId": "Verts-ID", "licenseReckeckAll": "Verifiser alle nøkler", @@ -586,7 +595,16 @@ "licensePurchase": "Kjøp lisens", "licensePurchaseSites": "Kjøp flere områder", "licenseSitesUsedMax": "{usedSites} av {maxSites} områder brukt", - "licenseSitesUsed": "{count, plural, =0 {ingen områder} one {ett område} other {# områder}} i systemet.", + "licenseSitesUsed": "{count, plural, =0 {ingen områder} one {ett område} other {# områder}}", + "licenseUsage": "Bruk", + "licenseUsageDescription": "Se antall brukere og områder lisensiert for denne verten", + "licenseUsageSites": "Områder", + "licenseUsageUsers": "Brukere", + "licenseNoUserLimit": "Det er ingen grense på antall brukere som bruker en ulisensiert vert", + "licenseUsersUsedMax": "{usedUsers} av {maxUsers} brukere brukt", + "licenseUsersUsed": "{count, plural, =0 {ingen brukere} one {en bruker} other {# brukere}}", + "licenseUnlimited": "Ubegrenset", + "licenseTierLabel": "Nivå", "licensePurchaseDescription": "Velg hvor mange områder du vil {selectedMode, select, license {kjøpe en lisens for. Du kan alltid legge til flere områder senere.} other {legge til din eksisterende lisens.}}", "licenseFee": "Lisensavgift", "licensePriceSite": "Pris per område", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Hver regel må ha et unikt prioritetstall.", "rulesErrorValidation": "Ugyldige regler", "rulesErrorValidationRuleDescription": "Regel {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Velg en gyldig samsvarstype (sti, IP, CIDR, land, region eller ASN).", + "rulesErrorInvalidMatchTypeDescription": "Velg en gyldig samsvarstype (sti, IP, CIDR, land, region, ASN eller metode).", "rulesErrorValueRequired": "Skriv inn en verdi for denne regelen.", "rulesErrorInvalidCountry": "Ugyldig land", "rulesErrorInvalidCountryDescription": "Velg et gyldig land.", @@ -2827,9 +2845,9 @@ "expectedResponseCodes": "Forventede svarkoder", "expectedResponseCodesDescription": "HTTP-statuskode som indikerer sunn status. Hvis den blir stående tom, regnes 200-300 som sunn.", "customRequestHeaders": "Egendefinerte forespørselshoder", - "customRequestHeadersDescription": "Forespørselshoder sendt til målene. Én per linje: Header-Navn: verdi", - "customResponseHeaders": "Egendefinerte svarhoder", - "customResponseHeadersDescription": "Svarhoder sendt tilbake til klienten. Én per linje: Header-Navn: verdi", + "customRequestHeadersDescription": "Forespørselshoder sendt til mål nedstrøms. Ett per linje: Overskriftsnavn: verdi", + "customResponseHeaders": "Egendefinerte respons hoder", + "customResponseHeadersDescription": "Respons hoder sendt tilbake til klienten. Ett per linje: Overskriftsnavn: verdi", "headersValidationError": "Topptekst må være i formatet: header-navn: verdi.", "saveHealthCheck": "Lagre Helsekontroll", "healthCheckSaved": "Helsekontroll Lagret", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Port", "editInternalResourceDialogModeHost": "Vert", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Utgangsnode", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI Portal", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "IP-adressen eller vertsnavnet til ressursen på nettstedets nettverk.", "editInternalResourceDialogDestinationIPDescription": "IP eller vertsnavn til ressursen på nettstedets nettverk.", "editInternalResourceDialogDestinationCidrDescription": "CIDR-rekkevidden til ressursen på nettstedets nettverk.", + "editInternalResourceDialogDestinationGatewayDescription": "Områdene som skal brukes som utgangsnoder for denne ressursen", "editInternalResourceDialogAlias": "Navn", "editInternalResourceDialogAliasDescription": "Et valgfritt internt DNS-alias for denne ressursen.", "createInternalResourceDialogNoSitesAvailable": "Ingen tilgjengelige steder", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Kontroller TCP/UDP porttilgang og om ICMP ping tillates for denne ressursen.", "hostSettings": "Vert", "cidrSettings": "CIDR", + "gatewaySettings": "Utgangsnode", "createInternalResourceDialogResourceProperties": "Ressursegenskaper", "createInternalResourceDialogName": "Navn", "createInternalResourceDialogSite": "Område", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI Portal", + "createInternalResourceDialogModeGateway": "Utgangsnode", "scheme": "Skjema", "createInternalResourceDialogScheme": "Skjema", "createInternalResourceDialogEnableSsl": "Aktiver TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Husk denne organisasjons-ID-en", "orgAuthBackToSignIn": "Tilbake til standard innlogging", "orgAuthNoAccount": "Har du ikke konto?", - "subscriptionRequiredToUse": "Et abonnement er påkrevd for å bruke denne funksjonen.", - "mustUpgradeToUse": "Du må oppgradere ditt abonnement for å bruke denne funksjonen.", + "subscriptionRequiredToUse": "Et abonnement er påkrevd for å bruke denne funksjonen. Bestill en demo", + "mustUpgradeToUse": "Du må oppgradere ditt abonnement for å bruke denne funksjonen. Bestill en demo", "subscriptionRequiredTierToUse": "Denne funksjonen krever {tier} eller høyere.", - "upgradeToTierToUse": "Oppgrader til {tier} eller høyere for å bruke denne funksjonen.", + "upgradeToTierToUse": "Oppgrader til {tier} for å bruke denne funksjonen. Bestill en demo", "subscriptionTierTier1": "Hjem", "subscriptionTierTier2": "Lag", "subscriptionTierTier3": "Forretninger", @@ -3651,8 +3673,8 @@ "sourceAddress": "Kilde adresse", "destinationAddress": "Måladresse (Automatic Translation)", "duration": "Varighet", - "licenseRequiredToUse": "Enterprise Edition lisens er påkrevd. Bestill en demo eller prøveversjon", - "ossEnterpriseEditionRequired": "Enterprise Edition lisens er påkrevd. Bestill en demo eller prøveversjon", + "licenseRequiredToUse": "Enterprise Edition lisens er påkrevd. Bestill en demo", + "ossEnterpriseEditionRequired": "Enterprise Edition lisens er påkrevd. Bestill en demo", "certResolver": "Sertifikat løser", "certResolverDescription": "Velg sertifikatløser som skal brukes for denne ressursen.", "selectCertResolver": "Velg sertifikatløser", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Bekrefter enhetens godkjennelse...", "signedInAs": "Logget inn som", "deviceCodeEnterPrompt": "Skriv inn koden som vises på enheten", + "deviceCodeConfirmPrompt": "Bekreft at dette samsvarer med koden på enheten din", "continue": "Fortsett", "deviceUnknownLocation": "Ukjent plassering", "deviceAuthorizationRequested": "Denne autorisasjonen ble forespurt fra {location} på {date}. Pass på at du stoler på denne enheten siden den vil få tilgang til kontoen.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Godkjenningsmetoder aktivert for denne ressursen.", "resourceLauncherPrivateClientRequired": "Koble til med en klient på enheten din for å få privat tilgang til denne ressursen.", "resourceLauncherPrivateClientRequiredTitle": "Klienttilkobling kreves", + "resourceLauncherExitNodeTitle": "Utgangsnoderuting", + "resourceLauncherExitNodeDescription": "Etter å ha koblet til klienten din, velg denne utgangsnoden i klientmenyen for å rute all trafikk gjennom de vedlagte områdene.", "resourceLauncherDownloadClient": "Last ned klient", "resourceLauncherFailedToLoadDetails": "Kunne ikke laste ressurstetatter. Du har kanskje ikke lenger tilgang til denne ressursen.", "resourceLauncherNoPortRestrictions": "Ingen portbegrensninger", + "resourceLauncherAllInternetTraffic": "All internett trafikk", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Umerket", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Vis verktøylinje", "sessionToolbarHide": "Skjul verktøylinje", "actionUpdateSiteApprovals": "Oppdater Stedsgodkjenninger", - "check": "Sjekk" + "check": "Sjekk", + "rulesErrorInvalidMethod": "Ugyldig HTTP-metode", + "rulesErrorInvalidMethodDescription": "Velg minst én HTTP-metode.", + "rulesSelectMethods": "Velg metoder" } diff --git a/messages/nl-NL.json b/messages/nl-NL.json index 2e4b51096..dc116f705 100644 --- a/messages/nl-NL.json +++ b/messages/nl-NL.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Uw proefversie verloopt over {countdown}. Upgrade om toegang te behouden.", "trialBannerExpired": "Uw proefperiode is verlopen. Upgrade nu om toegang te herstellen.", "billingTrialBannerTitle": "Proefperiode Actief", - "billingTrialBannerDescription": "Je bent momenteel bezig met een gratis proefperiode op het zakelijke niveau. Wanneer de proefperiode eindigt, wordt je account automatisch teruggezet naar de functies en limieten van het Basic-niveau. Upgrade op elk moment om toegang te houden tot de functies van je huidige plan.", + "billingTrialBannerDescription": "Je bent momenteel bezig met een gratis proefperiode op het {tier} niveau. Wanneer de proefperiode eindigt, wordt je account automatisch teruggezet naar de functies en limieten van het Basic-niveau. Upgrade op elk moment om toegang te houden tot de functies van je huidige plan.", "billingTrialBannerUpgrade": "Nu Upgraden", "billingTrialBadge": "Gratis Proefversie", "trialActive": "Gratis proefversie actief", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Weet u zeker dat u de WireGuard-tunnel voor {name} wilt herstarten? De site zal tijdelijk geen connectiviteit hebben.", "siteRestartWarning": "De site zal kort worden losgekoppeld terwijl de tunnel opnieuw wordt gestart.", "siteRestarted": "Site herstart", - "siteRestartedDescription": "De WireGuard-tunnel is opnieuw gestart.", + "siteRestartedDescription": "De site is opnieuw gestart.", "siteErrorRestart": "Site herstarten mislukt", "siteErrorRestartDescription": "Er is een fout opgetreden tijdens het herstarten van de site.", "siteSettingDescription": "Configureer de instellingen van de site", @@ -234,6 +234,9 @@ "clientResourceDescription": "Creëer en beheer bronnen die alleen toegankelijk zijn via een verbonden client", "privateResourcesBannerTitle": "Privébronnen via Zero Trust", "privateResourcesBannerDescription": "Privébronnen maken gebruik van zero trust beveiliging, wat ervoor zorgt dat gebruikers en machines alleen toegang kunnen krijgen tot resources die je specifiek toestaat. Verbind gebruikersapparaten of machines om deze middelen te benaderen via een veilig, virtueel privénetwerk.", + "licenseBillingBannerTitle": "Licentiefactuurbeheer", + "licenseBillingBannerDescription": "Beheer de facturering voor uw licentiesleutels, inclusief betalingsmethoden en facturen, door naar de factureringspagina te gaan. U kunt hieronder extra licenties genereren om de servercapaciteit te vergroten of meer exemplaren te implementeren.", + "licenseBillingBannerButton": "Ga naar Facturering", "resourcesSearch": "Zoek bronnen...", "resourceAdd": "Bron toevoegen", "resourceErrorDelte": "Fout bij verwijderen document", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Stel een CIDR-bereik op het sitenetwerk bloot aan verbonden cliënten", "privateResourceTypeHttpDescription": "Benader een HTTP- of HTTPS-dienst via een domein", "privateResourceTypeSshDescription": "Benader een SSH-server vanuit verbonden cliënten", + "privateResourceTypeGatewayDescription": "Stuur al het internetverkeer om via het sitenetwerk.", + "resourceTypeGatewayDescription": "Stuur al het internetverkeer om via het sitenetwerk.", "resourceDomainDescription": "De bron zal worden bediend onder deze volledig gekwalificeerde domeinnaam.", "resourceHTTPSSettings": "HTTPS instellingen", "resourceHTTPSSettingsDescription": "Stel in hoe de bron wordt benaderd via HTTPS", @@ -459,13 +464,13 @@ "searchApiKeys": "API sleutels zoeken...", "apiKeysAdd": "API sleutel genereren", "apiKeysErrorDelete": "Fout bij verwijderen API sleutel", - "apiKeysErrorDeleteMessage": "Fout bij verwijderen API- leutel", + "apiKeysErrorDeleteMessage": "Fout bij verwijderen API sleutel", "apiKeysQuestionRemove": "Weet u zeker dat u de API sleutel van de organisatie wilt verwijderen?", - "apiKeysMessageRemove": "Eenmaal verwijderd, kan de APIsleutel niet meer worden gebruikt.", - "apiKeysDeleteConfirm": "Bevestig verwijderen API sleutel", + "apiKeysMessageRemove": "Eenmaal verwijderd, kan de API sleutel niet meer worden gebruikt.", + "apiKeysDeleteConfirm": "Bevestig Verwijderen API sleutel", "apiKeysDelete": "API sleutel verwijderen", "apiKeysManage": "API sleutels beheren", - "apiKeysDescription": "API sleutels worden gebruikt om te verifiëren met de integratie-API", + "apiKeysDescription": "API sleutels worden gebruikt om toegang te verifiëren met de integratie API ", "orgsManage": "Organisaties Beheren", "orgsDescription": "Bekijk en beheer alle organisaties op dit systeem", "provisioningKeysTitle": "Vertrekkende sleutel", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Ontgrendel enterprise-functies voor uw zelf-gehoste Pangolin-instantie. Koop een licentiesleutel om premium mogelijkheden te activeren, voeg deze vervolgens hieronder toe.", "licenseBannerGetLicense": "Koop een Licentie", "licenseBannerViewDocs": "Bekijk Documentatie", + "licenseUpgradeBannerTitle": "Meer capaciteit nodig?", + "licenseUpgradeBannerDescription": "Als je meer site- of gebruikerscapaciteit nodig hebt, kun je meer licenties kopen via het portaal app.pangolin.net en ze hieronder toevoegen om je instantie te upgraden.", + "licenseUpgradeBannerButton": "Koop Meer Licenties", + "licenseMultipleKeysDescription": "Je hebt meerdere licenties geactiveerd op deze server. Het hoogste niveau wordt gebruikt.", "communityEdition": "Community editie", "licenseAboutDescription": "Dit geldt voor gebruikers van bedrijven en ondernemingen die Pangolin in gebruiken in een commerciële omgeving. Als u Pangolin gebruikt voor persoonlijk gebruik, kunt u dit gedeelte negeren.", "licenseKeyActivated": "Licentiesleutel geactiveerd", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Weet u zeker dat u de licentiesleutel wilt verwijderen?", "licenseKeyDelete": "Licentiesleutel verwijderen", "licenseKeyDeleteConfirm": "Bevestig verwijderen licentiesleutel", - "licenseTitle": "Licentiestatus beheren", + "licenseTitle": "Licentiebeheer", "licenseTitleDescription": "Bekijk en beheer licentiesleutels in het systeem", - "licenseHost": "Host Licentie", - "licenseHostDescription": "Beheer de belangrijkste licentiesleutel voor de host.", + "licenseHost": "Licentie", + "licenseHostDescription": "Bekijk de licentieniveau- en hostinformatie", "licensedNot": "Niet gelicentieerd", "hostId": "Host-ID", "licenseReckeckAll": "Alle sleutels opnieuw selecteren", @@ -586,7 +595,16 @@ "licensePurchase": "Licentie kopen", "licensePurchaseSites": "Extra sites kopen", "licenseSitesUsedMax": "{usedSites} van {maxSites} sites gebruikt", - "licenseSitesUsed": "{count, plural, =0 {# locaties} one {# locatie} other {# locaties}} in het systeem.", + "licenseSitesUsed": "{count, plural, =0 {# locaties} one {# locatie} other {# locaties}}", + "licenseUsage": "Gebruik", + "licenseUsageDescription": "View the number of users and sites licensed for this host", + "licenseUsageSites": "Locaties", + "licenseUsageUsers": "Gebruikers", + "licenseNoUserLimit": "Er is geen limiet op het aantal gebruikers dat een ongelicentieerde host gebruikt", + "licenseUsersUsedMax": "{usedUsers} van {maxUsers} gebruikers gebruikt", + "licenseUsersUsed": "{count, plural, =0 {# gebruikers} one {# gebruiker} other {# gebruikers}}", + "licenseUnlimited": "Onbeperkt", + "licenseTierLabel": "Niveau", "licensePurchaseDescription": "Kies hoeveel sites je wilt {selectedMode, select, license {Koop een licentie. Je kunt later altijd meer sites toevoegen.} other {Voeg je bestaande licentie toe}}", "licenseFee": "Licentie vergoeding", "licensePriceSite": "Prijs per site", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Elke regel moet een uniek prioriteitsnummer hebben.", "rulesErrorValidation": "Ongeldige regels", "rulesErrorValidationRuleDescription": "Regel {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Selecteer een geldig matchtype (pad, IP, CIDR, land, regio of ASN).", + "rulesErrorInvalidMatchTypeDescription": "Selecteer een geldig matchtype (pad, IP, CIDR, land, regio, ASN of methode).", "rulesErrorValueRequired": "Voer een waarde in voor deze regel.", "rulesErrorInvalidCountry": "Ongeldig land", "rulesErrorInvalidCountryDescription": "Selecteer een geldig land.", @@ -2827,9 +2845,9 @@ "expectedResponseCodes": "Verwachte Reactiecodes", "expectedResponseCodesDescription": "HTTP-statuscode die gezonde status aangeeft. Indien leeg wordt 200-300 als gezond beschouwd.", "customRequestHeaders": "Aangepaste verzoekheaders", - "customRequestHeadersDescription": "Verzoekheaders die worden doorgestuurd naar het doel. Per regel één: Header-Naam: waarde", + "customRequestHeadersDescription": "Verzoekheaders verzonden naar de downstream-doelen. Eén per regel: Header-Naam: waarde", "customResponseHeaders": "Aangepaste antwoordheaders", - "customResponseHeadersDescription": "Antwoordheaders die worden teruggestuurd naar de client. Per regel één: Header-Naam: waarde", + "customResponseHeadersDescription": "Antwoordheaders worden teruggestuurd naar de klant. Eén per regel: Header-Naam: waarde", "headersValidationError": "Headers moeten in het formaat zijn: Header-Naam: waarde.", "saveHealthCheck": "Opslaan Gezondheidscontrole", "healthCheckSaved": "Gezondheidscontrole Opgeslagen", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Poort", "editInternalResourceDialogModeHost": "Hostnaam", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Exit Node", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI-gateway", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "Het IP-adres of de hostnaam van de bron op het netwerk van de site.", "editInternalResourceDialogDestinationIPDescription": "Het IP of hostnaam adres van de bron op het netwerk van de site.", "editInternalResourceDialogDestinationCidrDescription": "Het CIDR-bereik van het document op het netwerk van de site.", + "editInternalResourceDialogDestinationGatewayDescription": "De sites die als exit-nodes worden gebruikt voor deze bron", "editInternalResourceDialogAlias": "Alias", "editInternalResourceDialogAliasDescription": "Een optionele interne DNS-alias voor dit document.", "createInternalResourceDialogNoSitesAvailable": "Geen sites beschikbaar", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Beheer TCP/UDP poorttoegang en of ICMP-ping is toegestaan voor deze bron.", "hostSettings": "Hostnaam", "cidrSettings": "CIDR", + "gatewaySettings": "Exit Node", "createInternalResourceDialogResourceProperties": "Bron-eigenschappen", "createInternalResourceDialogName": "Naam", "createInternalResourceDialogSite": "Referentie", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI-gateway", + "createInternalResourceDialogModeGateway": "Exit Node", "scheme": "Schema", "createInternalResourceDialogScheme": "Schema", "createInternalResourceDialogEnableSsl": "Schakel TLS in", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Vergeet deze organisatie-ID niet", "orgAuthBackToSignIn": "Terug naar standaard aanmelden", "orgAuthNoAccount": "Nog geen account?", - "subscriptionRequiredToUse": "Een abonnement is vereist om deze functie te gebruiken.", - "mustUpgradeToUse": "U moet uw abonnement upgraden om deze functie te gebruiken.", + "subscriptionRequiredToUse": "Een abonnement is vereist om deze functie te gebruiken. Boek een demo", + "mustUpgradeToUse": "Je moet je abonnement upgraden om deze functie te gebruiken. Boek een demo", "subscriptionRequiredTierToUse": "Deze functie vereist {tier} of hoger.", - "upgradeToTierToUse": "Upgrade naar {tier} of hoger om deze functie te gebruiken.", + "upgradeToTierToUse": "Upgrade naar {tier} om deze functie te gebruiken. Boek een demo", "subscriptionTierTier1": "Startpagina", "subscriptionTierTier2": "Team", "subscriptionTierTier3": "Bedrijfsleven", @@ -3651,8 +3673,8 @@ "sourceAddress": "Bron adres", "destinationAddress": "Adres bestemming", "duration": "Duur", - "licenseRequiredToUse": "Enterprise Edition licentie is vereist. Boek een demo of proefversie", - "ossEnterpriseEditionRequired": "Enterprise Edition licentie is vereist. Boek een demo of proefversie", + "licenseRequiredToUse": "Enterprise Edition licentie is vereist. Boek een demo", + "ossEnterpriseEditionRequired": "Enterprise Edition licentie is vereist. Boek een demo", "certResolver": "Certificaat Resolver", "certResolverDescription": "Selecteer de certificaat resolver die moet worden gebruikt voor deze resource.", "selectCertResolver": "Certificaat Resolver selecteren", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Apparaatmachtiging verifiëren...", "signedInAs": "Ingelogd als", "deviceCodeEnterPrompt": "Voer de op het apparaat weergegeven code in", + "deviceCodeConfirmPrompt": "Bevestig dat dit overeenkomt met de code op uw apparaat", "continue": "Doorgaan", "deviceUnknownLocation": "Onbekende locatie", "deviceAuthorizationRequested": "Deze autorisatie is aangevraagd bij {location} op {date}. Vertrouw je dit apparaat omdat het toegang tot het account zal krijgen.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Authenticatiemethoden ingeschakeld voor deze bron.", "resourceLauncherPrivateClientRequired": "Maak verbinding met een client op uw apparaat om deze bron privé te benaderen.", "resourceLauncherPrivateClientRequiredTitle": "Client Verbinding Vereist", + "resourceLauncherExitNodeTitle": "Exit Node Routing", + "resourceLauncherExitNodeDescription": "Nadat je je cliënt hebt verbonden, kies je deze exit-node in het cliëntmenu om al het verkeer via de bijgevoegde sites te routeren.", "resourceLauncherDownloadClient": "Client downloaden", "resourceLauncherFailedToLoadDetails": "Kon brongegevens niet laden. U heeft mogelijk geen toegang meer tot deze bron.", "resourceLauncherNoPortRestrictions": "Geen poortbeperkingen", + "resourceLauncherAllInternetTraffic": "Al het internetverkeer", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Geen label", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Toon werkbalk", "sessionToolbarHide": "Verberg werkbalk", "actionUpdateSiteApprovals": "Sitegoedkeuringen bijwerken", - "check": "Controleren" + "check": "Controleren", + "rulesErrorInvalidMethod": "Ongeldige HTTP-methode", + "rulesErrorInvalidMethodDescription": "Selecteer minimaal één HTTP-methode.", + "rulesSelectMethods": "Selecteer methoden" } diff --git a/messages/pl-PL.json b/messages/pl-PL.json index 4ada01cc9..fd2d3e2aa 100644 --- a/messages/pl-PL.json +++ b/messages/pl-PL.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Twój okres próbny wygasa za {countdown}. Uaktualnij, aby zachować dostęp.", "trialBannerExpired": "Twój okres próbny wygasł. Uaktualnij teraz, aby przywrócić dostęp.", "billingTrialBannerTitle": "Bezpłatna wersja próbna aktywna", - "billingTrialBannerDescription": "Obecnie korzystasz z bezpłatnej wersji próbnej na poziomie biznesowym. Po zakończeniu wersji próbnej, Twoje konto automatycznie powróci do funkcji i limitów poziomu Podstawowego. Możesz dokonać uaktualnienia w każdej chwili, aby zachować dostęp do funkcji obecnego planu.", + "billingTrialBannerDescription": "Obecnie korzystasz z bezpłatnej wersji próbnej na poziomie {tier}. Po zakończeniu wersji próbnej, Twoje konto automatycznie powróci do funkcji i limitów poziomu Podstawowego. Możesz dokonać uaktualnienia w każdej chwili, aby zachować dostęp do funkcji obecnego planu.", "billingTrialBannerUpgrade": "Uaktualnij teraz", "billingTrialBadge": "Bezpłatna wersja próbna", "trialActive": "Okres próbny aktywny", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Czy na pewno chcesz uruchomić ponownie tunel WireGuard dla {name}? Strona tymczasowo straci łączność.", "siteRestartWarning": "Strona tymczasowo rozłączy się podczas ponownego uruchamiania tunelu.", "siteRestarted": "Strona zrestartowana", - "siteRestartedDescription": "Tunel WireGuard został ponownie uruchomiony.", + "siteRestartedDescription": "Strona została ponownie uruchomiona.", "siteErrorRestart": "Nie udało się zrestartować strony", "siteErrorRestartDescription": "Wystąpił błąd podczas ponownego uruchamiania strony.", "siteSettingDescription": "Skonfiguruj ustawienia na stronie", @@ -234,6 +234,9 @@ "clientResourceDescription": "Twórz i zarządzaj zasobami, które są dostępne tylko za pośrednictwem połączonego klienta", "privateResourcesBannerTitle": "Zero zaufania do prywatnego dostępu", "privateResourcesBannerDescription": "Zasoby prywatne korzystają z zabezpieczeń zero-trust, zapewniając dostęp do zasobów użytkownikom i maszynom, którym wyraźnie udzielasz dostępu. Połącz urządzenia użytkowników lub klientów maszyn z tymi zasobami przez bezpieczną prywatną sieć wirtualną.", + "licenseBillingBannerTitle": "Zarządzaj rozliczeniami licencji", + "licenseBillingBannerDescription": "Aby zarządzać rozliczeniami dla kluczy licencji, w tym metodami płatności i fakturami, odwiedź stronę rozliczeń. Poniżej możesz wygenerować dodatkowe licencje, aby zwiększyć pojemność serwera lub wdrożyć więcej instancji.", + "licenseBillingBannerButton": "Przejdź do rozliczeń", "resourcesSearch": "Szukaj zasobów...", "resourceAdd": "Dodaj zasób", "resourceErrorDelte": "Błąd podczas usuwania zasobu", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Udostępnij zakres CIDR w sieci witryny dla połączonych klientów", "privateResourceTypeHttpDescription": "Dostęp do usługi HTTP lub HTTPS przez domenę", "privateResourceTypeSshDescription": "Dostęp do serwera SSH dla połączonych klientów", + "privateResourceTypeGatewayDescription": "Przekieruj cały ruch internetowy przez sieć witryny.", + "resourceTypeGatewayDescription": "Przekieruj cały ruch internetowy przez sieć witryny.", "resourceDomainDescription": "Zasób będzie udostępniany pod tym w pełni kwalifikowanym adresem domenowym.", "resourceHTTPSSettings": "Ustawienia HTTPS", "resourceHTTPSSettingsDescription": "Skonfiguruj jak zasób będzie dostępny przez HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Odblokuj funkcje korporacyjne dla swojego autonomicznego wdrożenia Pangolin. Kup klucz licencyjny, aby aktywować możliwości premium, a następnie wprowadź go poniżej.", "licenseBannerGetLicense": "Uzyskaj licencję", "licenseBannerViewDocs": "Zobacz dokumentację", + "licenseUpgradeBannerTitle": "Potrzebujesz większej pojemności?", + "licenseUpgradeBannerDescription": "Jeśli potrzebujesz zwiększyć pojemność strony lub użytkowników, możesz kupić więcej licencji poprzez portal app.pangolin.net i dodać je poniżej, aby uaktualnić swoją instancję.", + "licenseUpgradeBannerButton": "Kup więcej licencji", + "licenseMultipleKeysDescription": "Na tym serwerze są aktywowane wielokrotne licencje. Używany jest najwyższy poziom.", "communityEdition": "Edycja Społecznościowa", "licenseAboutDescription": "Dotyczy to przedsiębiorstw i przedsiębiorstw, którzy stosują Pangolin w środowisku handlowym. Jeśli używasz Pangolin do użytku osobistego, możesz zignorować tę sekcję.", "licenseKeyActivated": "Klucz licencyjny aktywowany", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Czy na pewno chcesz usunąć klucz licencyjny?", "licenseKeyDelete": "Usuń klucz licencyjny", "licenseKeyDeleteConfirm": "Potwierdź usunięcie klucza licencyjnego", - "licenseTitle": "Zarządzaj statusem licencji", + "licenseTitle": "Zarządzaj licencjami", "licenseTitleDescription": "Wyświetl i zarządzaj kluczami licencyjnymi w systemie", - "licenseHost": "Licencja hosta", - "licenseHostDescription": "Zarządzaj głównym kluczem licencyjnym hosta.", + "licenseHost": "Licencja", + "licenseHostDescription": "Zobacz poziom licencji i informacje o hoście", "licensedNot": "Brak licencji", "hostId": "ID hosta", "licenseReckeckAll": "Sprawdź ponownie wszystkie klucze", @@ -586,7 +595,16 @@ "licensePurchase": "Kup licencję", "licensePurchaseSites": "Kup dodatkowe witryny", "licenseSitesUsedMax": "Użyte strony {usedSites} z {maxSites}", - "licenseSitesUsed": "{count, plural, =0 {# witryn} one {# witryna} few {# witryny} many {# witryn} other {# witryn}} w systemie.", + "licenseSitesUsed": "{count, plural, =0 {# witryn} one {# witryna} few {# witryny} many {# witryn} other {# witryn}}", + "licenseUsage": "Użytkowanie", + "licenseUsageDescription": "Zobacz liczbę użytkowników i licencjonowanych witryn dla tego hosta", + "licenseUsageSites": "Witryny", + "licenseUsageUsers": "Użytkownicy", + "licenseNoUserLimit": "Nie ma limitu liczby użytkowników korzystających z nielicencjonowanego hosta", + "licenseUsersUsedMax": "{usedUsers} z {maxUsers} użytkowników wykorzystano", + "licenseUsersUsed": "{count, plural, =0 {# użytkowników} one {# użytkownik} few {# użytkownicy} many {# użytkowników} other {# użytkowników}}", + "licenseUnlimited": "Nieograniczona", + "licenseTierLabel": "Poziom", "licensePurchaseDescription": "Wybierz ile witryn chcesz {selectedMode, select, license {kupić licencję. Zawsze możesz dodać więcej witryn później.} other {dodaj do swojej istniejącej licencji.}}", "licenseFee": "Opłata licencyjna", "licensePriceSite": "Cena za witrynę", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Każda reguła musi mieć unikalny numer priorytetu.", "rulesErrorValidation": "Nieprawidłowe reguły", "rulesErrorValidationRuleDescription": "Reguła {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Wybierz poprawny typ dopasowania (ścieżka, IP, CIDR, kraj, region lub ASN).", + "rulesErrorInvalidMatchTypeDescription": "Wybierz poprawny typ dopasowania (ścieżka, IP, CIDR, kraj, region, ASN lub metoda).", "rulesErrorValueRequired": "Wprowadź wartość dla tej reguły.", "rulesErrorInvalidCountry": "Nieprawidłowy kraj", "rulesErrorInvalidCountryDescription": "Wybierz poprawny kraj.", @@ -2826,10 +2844,10 @@ "retryAttempts": "Próby Ponowienia", "expectedResponseCodes": "Oczekiwane Kody Odpowiedzi", "expectedResponseCodesDescription": "Kod statusu HTTP, który wskazuje zdrowy status. Jeśli pozostanie pusty, uznaje się 200-300 za zdrowy.", - "customRequestHeaders": "Niestandardowe nagłówki żądania", - "customRequestHeadersDescription": "Nagłówki żądania wysyłane do celów. Jeden w wierszu: Nazwa-Nagłówka: wartość", + "customRequestHeaders": "Niestandardowe nagłówki żądań", + "customRequestHeadersDescription": "Nagłówki żądań wysyłane do wybranych celów. Jeden na linię: Nazwa nagłówka: wartość", "customResponseHeaders": "Niestandardowe nagłówki odpowiedzi", - "customResponseHeadersDescription": "Nagłówki odpowiedzi zwracane do klienta. Jeden w wierszu: Nazwa-Nagłówka: wartość", + "customResponseHeadersDescription": "Nagłówki odpowiedzi wysyłane do klienta. Jeden na linię: Nazwa nagłówka: wartość", "headersValidationError": "Nagłówki muszą być w formacie: Nazwa nagłówka: wartość.", "saveHealthCheck": "Zapisz Kontrolę Zdrowia", "healthCheckSaved": "Kontrola Zdrowia Zapisana", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Port", "editInternalResourceDialogModeHost": "Host", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Węzeł Wyjściowy", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "Brama AI", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.", "editInternalResourceDialogDestinationIPDescription": "Adres IP lub nazwa hosta zasobu w sieci witryny.", "editInternalResourceDialogDestinationCidrDescription": "Zakres CIDR zasobu w sieci witryny.", + "editInternalResourceDialogDestinationGatewayDescription": "Witryny do użycia jako węzły wyjściowe dla tego zasobu", "editInternalResourceDialogAlias": "Pseudonim", "editInternalResourceDialogAliasDescription": "Opcjonalny wewnętrzny alias DNS dla tego zasobu.", "createInternalResourceDialogNoSitesAvailable": "Brak dostępnych stron", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Kontroluj dostęp do portów TCP/UDP i czy ping ICMP jest dozwolony dla tego zasobu.", "hostSettings": "Host", "cidrSettings": "CIDR", + "gatewaySettings": "Węzeł Wyjściowy", "createInternalResourceDialogResourceProperties": "Właściwości zasobów", "createInternalResourceDialogName": "Nazwa", "createInternalResourceDialogSite": "Witryna", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "Brama AI", + "createInternalResourceDialogModeGateway": "Węzeł Wyjściowy", "scheme": "Schemat", "createInternalResourceDialogScheme": "Schemat", "createInternalResourceDialogEnableSsl": "Włącz TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Zapamiętaj ten identyfikator organizacji", "orgAuthBackToSignIn": "Powrót do standardowego logowania", "orgAuthNoAccount": "Nie masz konta?", - "subscriptionRequiredToUse": "Do korzystania z tej funkcji wymagana jest subskrypcja.", - "mustUpgradeToUse": "Musisz uaktualnić subskrypcję, aby korzystać z tej funkcji.", + "subscriptionRequiredToUse": "Do korzystania z tej funkcji wymagana jest subskrypcja. Zarezerwuj demo", + "mustUpgradeToUse": "Musisz uaktualnić subskrypcję, aby korzystać z tej funkcji. Zarezerwuj demo", "subscriptionRequiredTierToUse": "Ta funkcja wymaga funkcji {tier} lub wyższej.", - "upgradeToTierToUse": "Aby skorzystać z tej funkcji, przejdź na {tier} lub wyższy pakiet.", + "upgradeToTierToUse": "Aby skorzystać z tej funkcji, przejdź na {tier} lub wyższy pakiet. Zarezerwuj demo", "subscriptionTierTier1": "Strona główna", "subscriptionTierTier2": "Drużyna", "subscriptionTierTier3": "Biznes", @@ -3651,8 +3673,8 @@ "sourceAddress": "Adres źródłowy", "destinationAddress": "Adres docelowy", "duration": "Czas trwania", - "licenseRequiredToUse": "Licencja Wydania Enterprise jest wymagana. Zarezerwuj demo lub próbę", - "ossEnterpriseEditionRequired": "Licencja Wydania Enterprise jest wymagana. Zarezerwuj demo lub próbę", + "licenseRequiredToUse": "Licencja Wydania Enterprise jest wymagana. Zarezerwuj demo", + "ossEnterpriseEditionRequired": "Licencja Wydania Enterprise jest wymagana. Zarezerwuj demo", "certResolver": "Rozwiązywanie certyfikatów", "certResolverDescription": "Wybierz resolver certyfikatów do użycia dla tego zasobu.", "selectCertResolver": "Wybierz Resolver certyfikatów", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Weryfikowanie autoryzacji urządzenia...", "signedInAs": "Zalogowany jako", "deviceCodeEnterPrompt": "Wprowadź kod wyświetlany na urządzeniu", + "deviceCodeConfirmPrompt": "Potwierdź, czy kod na Twoim urządzeniu jest zgodny", "continue": "Kontynuuj", "deviceUnknownLocation": "Nieznana lokalizacja", "deviceAuthorizationRequested": "Ta autoryzacja została zgłoszona do {location} na {date}. Upewnij się, że ufasz urządzeniu, ponieważ uzyska dostęp do konta.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Metody uwierzytelniania włączone dla tego zasobu.", "resourceLauncherPrivateClientRequired": "Połącz się z klientem na swoim urządzeniu, aby uzyskać dostęp do tego zasobu prywatnie.", "resourceLauncherPrivateClientRequiredTitle": "Wymagane połączenie z klientem", + "resourceLauncherExitNodeTitle": "Routing węzła wyjściowego", + "resourceLauncherExitNodeDescription": "Po podłączeniu klienta wybierz ten węzeł wyjściowy w menu klienta, aby przekierować cały ruch przez dołączone witryny.", "resourceLauncherDownloadClient": "Pobierz klienta", "resourceLauncherFailedToLoadDetails": "Nie można załadować szczegółów zasobu. Możliwe, że nie masz już dostępu do tego zasobu.", "resourceLauncherNoPortRestrictions": "Brak ograniczeń portów", + "resourceLauncherAllInternetTraffic": "Cały ruch internetowy", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Bez etykiety", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Pokaż pasek narzędzi", "sessionToolbarHide": "Ukryj pasek narzędzi", "actionUpdateSiteApprovals": "Zaktualizuj zgody na stronę", - "check": "Sprawdź" + "check": "Sprawdź", + "rulesErrorInvalidMethod": "Niepoprawna metoda HTTP", + "rulesErrorInvalidMethodDescription": "Wybierz co najmniej jedną metodę HTTP.", + "rulesSelectMethods": "Wybierz metody" } diff --git a/messages/pt-PT.json b/messages/pt-PT.json index 701c9a33e..3fac39005 100644 --- a/messages/pt-PT.json +++ b/messages/pt-PT.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Sua avaliação termina em {countdown}. Faça o upgrade para manter o acesso.", "trialBannerExpired": "Sua avaliação expirou. Faça o upgrade agora para restaurar o acesso.", "billingTrialBannerTitle": "Teste Gratuito Ativo", - "billingTrialBannerDescription": "Atualmente, você está em um teste gratuito no nível empresarial. Quando o teste terminar, sua conta reverterá automaticamente para os recursos e limites do nível Básico. Atualize a qualquer momento para manter o acesso aos recursos do seu plano atual.", + "billingTrialBannerDescription": "Atualmente, você está em um teste gratuito no nível {tier}. Quando o teste terminar, sua conta reverterá automaticamente para os recursos e limites do nível Básico. Atualize a qualquer momento para manter o acesso aos recursos do seu plano atual.", "billingTrialBannerUpgrade": "Atualize Agora", "billingTrialBadge": "Teste Gratuito", "trialActive": "Avaliação Gratuita Ativa", @@ -110,7 +110,7 @@ "siteInstallNewt": "Instalar Novo", "siteInstallNewtDescription": "Novo item em execução no seu sistema", "siteInstallKubernetesDocsDescription": "Para mais informações atualizadas sobre a instalação do Kubernetes, veja docs.pangolin.net/manage/sites/install-kubernetes.", - "siteInstallAdvantechDocsDescription": "Para instruções de instalação do modem da Advantech, veja docs.pangolin.net/manage/sites/install-newt#advantech-router-app.", + "siteInstallAdvantechDocsDescription": "Para instruções de instalação do modem Advantech, veja docs.pangolin.net/manage/sites/install-newt#advantech-router-app.", "WgConfiguration": "Configuração do WireGuard", "WgConfigurationDescription": "Use a seguinte configuração para conectar-se à rede", "operatingSystem": "Sistema operacional", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Tem certeza de que deseja reiniciar o túnel WireGuard para {name}? O site perderá brevemente a conectividade.", "siteRestartWarning": "O site será desconectado brevemente enquanto o túnel reinicia.", "siteRestarted": "Site reiniciado", - "siteRestartedDescription": "O túnel WireGuard foi reiniciado.", + "siteRestartedDescription": "O site foi reiniciado.", "siteErrorRestart": "Falha ao reiniciar o site", "siteErrorRestartDescription": "Ocorreu um erro ao reiniciar o site.", "siteSettingDescription": "Configurar as configurações no site", @@ -234,6 +234,9 @@ "clientResourceDescription": "Criar e gerenciar recursos que só são acessíveis por meio de um cliente conectado", "privateResourcesBannerTitle": "Acesso Privado com Confiança Zero", "privateResourcesBannerDescription": "Os recursos privados usam segurança de zero confiança, garantindo que usuários e máquinas possam acessar apenas os recursos que você concede explicitamente. Conecte dispositivos de usuários ou clientes de máquinas para acessar esses recursos por meio de uma rede privada virtual segura.", + "licenseBillingBannerTitle": "Gerenciar Faturamento de Licença", + "licenseBillingBannerDescription": "Para gerenciar o faturamento de suas chaves de licença, incluindo métodos de pagamento e faturas, visite a página de faturamento. Você pode gerar licenças adicionais abaixo para aumentar a capacidade do servidor ou implantar mais instâncias.", + "licenseBillingBannerButton": "Ir para Faturamento", "resourcesSearch": "Procurar recursos...", "resourceAdd": "Adicionar Recurso", "resourceErrorDelte": "Erro ao apagar recurso", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Exponha um intervalo CIDR na rede do site para clientes conectados", "privateResourceTypeHttpDescription": "Acesse um serviço HTTP ou HTTPS por meio de um domínio", "privateResourceTypeSshDescription": "Acesse um servidor SSH de clientes conectados", + "privateResourceTypeGatewayDescription": "Envie todo o tráfego da internet para sair pela rede do site.", + "resourceTypeGatewayDescription": "Envie todo o tráfego da internet para sair pela rede do site.", "resourceDomainDescription": "O recurso será servido neste nome de domínio totalmente qualificado.", "resourceHTTPSSettings": "Configurações de HTTPS", "resourceHTTPSSettingsDescription": "Configure como o recurso será acessado por HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Desbloqueie recursos empresariais para sua instância de Pangolin autohospedada. Compre uma chave de licença para ativar recursos premium e adicione-a abaixo.", "licenseBannerGetLicense": "Obter Licença", "licenseBannerViewDocs": "Ver Documentação", + "licenseUpgradeBannerTitle": "Precisa de Mais Capacidade?", + "licenseUpgradeBannerDescription": "Se você precisar aumentar a capacidade do seu site ou usuário, pode comprar mais licenças no portal app.pangolin.net e adicioná-las abaixo para atualizar sua instância.", + "licenseUpgradeBannerButton": "Compre Mais Licenças", + "licenseMultipleKeysDescription": "Você possui várias licenças ativadas neste servidor. O nível mais alto está em uso.", "communityEdition": "Edição da Comunidade", "licenseAboutDescription": "Isto destina-se aos utilizadores empresariais e empresariais que estão a usar o Pangolin num ambiente comercial. Se você estiver usando o Pangolin para uso pessoal, você pode ignorar esta seção.", "licenseKeyActivated": "Chave de licença ativada", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Tem certeza que deseja excluir a chave de licença?", "licenseKeyDelete": "Excluir Chave de Licença", "licenseKeyDeleteConfirm": "Confirmar que pretende apagar a chave de licença", - "licenseTitle": "Gerir Status da Licença", + "licenseTitle": "Gerenciar Licenças", "licenseTitleDescription": "Visualizar e gerir chaves de licença no sistema", - "licenseHost": "Licença do host", - "licenseHostDescription": "Gerir a chave de licença principal do host.", + "licenseHost": "Licença", + "licenseHostDescription": "Veja o nível da licença e informações de anfitrião", "licensedNot": "Não Licenciado", "hostId": "ID do host", "licenseReckeckAll": "Verifique novamente todas as chaves", @@ -586,7 +595,16 @@ "licensePurchase": "Comprar Licença", "licensePurchaseSites": "Comprar Sites Adicionais", "licenseSitesUsedMax": "{usedSites} de {maxSites} utilizados", - "licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}} no sistema.", + "licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}}", + "licenseUsage": "Uso", + "licenseUsageDescription": "Veja o número de utilizadores e sites licenciados para este anfitrião", + "licenseUsageSites": "Sites", + "licenseUsageUsers": "Utilizadores", + "licenseNoUserLimit": "Não há limite para o número de utilizadores usando um anfitrião não licenciado", + "licenseUsersUsedMax": "{usedUsers} de {maxUsers} utilizadores utilizados", + "licenseUsersUsed": "{count, plural, =0 {# utilizadores} one {# utilizador} other {# utilizadores}}", + "licenseUnlimited": "Ilimitado", + "licenseTierLabel": "Nível", "licensePurchaseDescription": "Escolha quantos sites você quer {selectedMode, select, license {Compre uma licença. Você sempre pode adicionar mais sites depois.} other {adicione à sua licença existente.}}", "licenseFee": "Taxa de licença", "licensePriceSite": "Preço por site", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Cada regra deve ter um número de prioridade único.", "rulesErrorValidation": "Regras inválidas", "rulesErrorValidationRuleDescription": "Regra {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Selecione um tipo de correspondência válido (caminho, IP, CIDR, país, região ou ASN).", + "rulesErrorInvalidMatchTypeDescription": "Selecione um tipo de correspondência válido (caminho, IP, CIDR, país, região, ASN ou método).", "rulesErrorValueRequired": "Digite um valor para esta regra.", "rulesErrorInvalidCountry": "País inválido", "rulesErrorInvalidCountryDescription": "Selecione um país válido.", @@ -2826,10 +2844,10 @@ "retryAttempts": "Tentativas de Repetição", "expectedResponseCodes": "Códigos de Resposta Esperados", "expectedResponseCodesDescription": "Código de status HTTP que indica estado saudável. Se deixado em branco, 200-300 é considerado saudável.", - "customRequestHeaders": "Cabeçalhos de Pedido Personalizados", - "customRequestHeadersDescription": "Cabeçalhos de pedido enviados para os destinos. Um por linha: Nome-Cabeçalho: valor", - "customResponseHeaders": "Cabeçalhos de Resposta Personalizados", - "customResponseHeadersDescription": "Cabeçalhos de resposta enviados de volta ao cliente. Um por linha: Nome-Cabeçalho: valor", + "customRequestHeaders": "Cabeçalhos Personalizados de Requisição", + "customRequestHeadersDescription": "Cabeçalhos de requisição enviados para os alvos a jusante. Um por linha: Nome-Do-Cabeçalho: valor", + "customResponseHeaders": "Cabeçalhos Personalizados de Resposta", + "customResponseHeadersDescription": "Cabeçalhos de resposta enviados de volta ao cliente. Um por linha: Nome-Do-Cabeçalho: valor", "headersValidationError": "Cabeçalhos devem estar no formato: Nome do Cabeçalho: valor.", "saveHealthCheck": "Salvar Verificação de Saúde", "healthCheckSaved": "Verificação de Saúde Salva", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Porta", "editInternalResourceDialogModeHost": "Servidor", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Nodo de Saída", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "Gateway de IA", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "O endereço IP ou o nome do host do recurso na rede do site.", "editInternalResourceDialogDestinationIPDescription": "O IP ou endereço do hostname do recurso na rede do site.", "editInternalResourceDialogDestinationCidrDescription": "A faixa CIDR do recurso na rede do site.", + "editInternalResourceDialogDestinationGatewayDescription": "Os sites a serem usados como nós de saída para este recurso", "editInternalResourceDialogAlias": "Apelido", "editInternalResourceDialogAliasDescription": "Um alias de DNS interno opcional para este recurso.", "createInternalResourceDialogNoSitesAvailable": "Nenhum Site Disponível", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Controlar o acesso à porta TCP/UDP e se o ICMP ping é permitido para este recurso.", "hostSettings": "Servidor", "cidrSettings": "CIDR", + "gatewaySettings": "Nodo de Saída", "createInternalResourceDialogResourceProperties": "Propriedades do Recurso", "createInternalResourceDialogName": "Nome", "createInternalResourceDialogSite": "Site", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "Gateway de IA", + "createInternalResourceDialogModeGateway": "Nodo de Saída", "scheme": "Esquema", "createInternalResourceDialogScheme": "Esquema", "createInternalResourceDialogEnableSsl": "Ativar TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Lembrar este ID da organização", "orgAuthBackToSignIn": "Voltar para entrada padrão", "orgAuthNoAccount": "Não possui uma conta?", - "subscriptionRequiredToUse": "Uma assinatura é necessária para usar esse recurso.", - "mustUpgradeToUse": "Você deve atualizar sua assinatura para usar este recurso.", + "subscriptionRequiredToUse": "É necessária uma assinatura para usar esse recurso. Agendar uma demonstração", + "mustUpgradeToUse": "Você deve atualizar sua assinatura para usar este recurso. Agendar uma demonstração", "subscriptionRequiredTierToUse": "Esta função requer {tier} ou superior.", - "upgradeToTierToUse": "Atualize para {tier} ou superior para usar este recurso.", + "upgradeToTierToUse": "Atualize para {tier} para usar este recurso. Agendar uma demonstração", "subscriptionTierTier1": "Residencial", "subscriptionTierTier2": "Equipe", "subscriptionTierTier3": "Empresas", @@ -3651,8 +3673,8 @@ "sourceAddress": "Endereço de origem", "destinationAddress": "Endereço de destino", "duration": "Duração", - "licenseRequiredToUse": "Licença da Edição Empresarial é necessária. Agende uma demo ou teste", - "ossEnterpriseEditionRequired": "Licença da Edição Empresarial é necessária. Agende uma demo ou teste", + "licenseRequiredToUse": "Licença da Edição Empresarial é necessária. Agendar uma demonstração", + "ossEnterpriseEditionRequired": "Licença da Edição Empresarial é necessária. Agendar uma demonstração", "certResolver": "Resolvedor de Certificado", "certResolverDescription": "Selecione o resolvedor de certificados para este recurso.", "selectCertResolver": "Selecionar solucionador de certificado", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Verificando autorização do dispositivo...", "signedInAs": "Sessão iniciada como", "deviceCodeEnterPrompt": "Digite o código exibido no dispositivo", + "deviceCodeConfirmPrompt": "Confirme que isso corresponde ao código em seu dispositivo", "continue": "Continuar", "deviceUnknownLocation": "Localização desconhecida", "deviceAuthorizationRequested": "Esta autorização foi solicitada por {location} no {date}. Certifique-se de que você confia neste dispositivo, pois ele terá acesso à conta.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Métodos de autenticação habilitados para este recurso.", "resourceLauncherPrivateClientRequired": "Conecte com um cliente no seu dispositivo para acessar este recurso privadamente.", "resourceLauncherPrivateClientRequiredTitle": "Conexão do Cliente Obrigatória", + "resourceLauncherExitNodeTitle": "Roteamento de Nodo de Saída", + "resourceLauncherExitNodeDescription": "Após conectar o cliente, selecione este nodo de saída no menu do cliente para rotear todo o tráfego através dos sites anexados.", "resourceLauncherDownloadClient": "Baixar cliente", "resourceLauncherFailedToLoadDetails": "Não foi possível carregar os detalhes do recurso. Você pode não ter mais acesso a este recurso.", "resourceLauncherNoPortRestrictions": "Sem restrições de porta", + "resourceLauncherAllInternetTraffic": "Todo o tráfego da internet", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Sem Etiqueta", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Mostrar barra de ferramentas", "sessionToolbarHide": "Ocultar barra de ferramentas", "actionUpdateSiteApprovals": "Atualizar Aprovações do Site", - "check": "Verificar" + "check": "Verificar", + "rulesErrorInvalidMethod": "Método HTTP inválido", + "rulesErrorInvalidMethodDescription": "Selecione pelo menos um método HTTP.", + "rulesSelectMethods": "Selecionar métodos" } diff --git a/messages/ru-RU.json b/messages/ru-RU.json index 423778ccf..5526cbf87 100644 --- a/messages/ru-RU.json +++ b/messages/ru-RU.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Ваш пробный период истекает через {countdown}. Обновите, чтобы сохранить доступ.", "trialBannerExpired": "Ваш пробный период истек. Обновите сейчас, чтобы восстановить доступ.", "billingTrialBannerTitle": "Бесплатная версия активна", - "billingTrialBannerDescription": "Вы в настоящее время находитесь на бесплатном пробном периоде бизнес-уровня. Когда пробный период закончится, ваш аккаунт автоматически вернётся к функциям и лимитам базового уровня. Обновите в любое время, чтобы сохранить доступ к функциям текущего плана.", + "billingTrialBannerDescription": "Вы в настоящее время находитесь на бесплатном пробном уровне {tier}. Когда пробный период закончится, ваш аккаунт автоматически вернётся к функциям и лимитам базового уровня. Обновите в любое время, чтобы сохранить доступ к функциям текущего плана.", "billingTrialBannerUpgrade": "Обновить сейчас", "billingTrialBadge": "Бесплатная версия", "trialActive": "Бесплатный пробный период активен", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "Вы уверены, что хотите перезапустить туннель WireGuard для {name}? Сайт кратковременно потеряет соединение.", "siteRestartWarning": "Сайт кратковременно отключится во время перезапуска туннеля.", "siteRestarted": "Сайт перезапущен", - "siteRestartedDescription": "Туннель WireGuard был перезапущен.", + "siteRestartedDescription": "Сайт был перезапущен.", "siteErrorRestart": "Не удалось перезапустить сайт", "siteErrorRestartDescription": "Произошла ошибка во время перезапуска сайта.", "siteSettingDescription": "Настройка параметров на сайте", @@ -234,6 +234,9 @@ "clientResourceDescription": "Создание и управление ресурсами, которые доступны только через подключенный клиент", "privateResourcesBannerTitle": "Частный доступ с нулевым доверием", "privateResourcesBannerDescription": "Частные ресурсы используют безопасность с нулевым доверием, обеспечивая доступ пользователей и устройств только к ресурсам, к которым вы явно предоставили доступ. Подключите пользовательские устройства или машинных клиентов, чтобы получить доступ к этим ресурсам через безопасную виртуальную частную сеть.", + "licenseBillingBannerTitle": "Управление выставлением счетов по лицензии", + "licenseBillingBannerDescription": "Чтобы управлять выставлением счетов для ваших лицензионных ключей, включая методы оплаты и счета, посетите страницу выставления счетов. Вы можете создать дополнительные лицензии ниже, чтобы увеличить ёмкость сервера или развернуть больше экземпляров.", + "licenseBillingBannerButton": "Перейти к оплате", "resourcesSearch": "Поиск ресурсов...", "resourceAdd": "Добавить ресурс", "resourceErrorDelte": "Ошибка при удалении ресурса", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Опубликуйте диапазон CIDR в сети сайта для подключенных клиентов", "privateResourceTypeHttpDescription": "Доступ к сервису HTTP или HTTPS через домен", "privateResourceTypeSshDescription": "Доступ к серверу SSH от подключенных клиентов", + "privateResourceTypeGatewayDescription": "Отправлять весь интернет-трафик через сетевую структуру сайтов.", + "resourceTypeGatewayDescription": "Отправлять весь интернет-трафик через сетевую структуру сайтов.", "resourceDomainDescription": "Ресурс будет предоставлен по этому полностью определенному доменному имени.", "resourceHTTPSSettings": "Настройки HTTPS", "resourceHTTPSSettingsDescription": "Настройка доступа к ресурсу по HTTPS", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Откройте доступ к корпоративным функциям для вашей локально размещаемой версии Pangolin. Приобретите лицензионный ключ, чтобы активировать премиум-функции, затем добавьте его ниже.", "licenseBannerGetLicense": "Получить лицензию", "licenseBannerViewDocs": "Посмотреть документацию", + "licenseUpgradeBannerTitle": "Нужна большая ёмкость?", + "licenseUpgradeBannerDescription": "Если вам нужно увеличить ёмкость для сайта или пользователей, вы можете купить дополнительные лицензии на портале app.pangolin.net и добавить их ниже для обновления вашего экземпляра.", + "licenseUpgradeBannerButton": "Купить больше лицензий", + "licenseMultipleKeysDescription": "На этом сервере активировано несколько лицензий. Используется самый высокий уровень.", "communityEdition": "Издание для сообщества", "licenseAboutDescription": "Это для бизнес и корпоративных пользователей, использующих Pangolin в коммерческой среде. Если вы используете Pangolin для личного использования, вы можете игнорировать этот раздел.", "licenseKeyActivated": "Лицензионный ключ активирован", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Вы уверены, что хотите удалить лицензионный ключ?", "licenseKeyDelete": "Удалить лицензионный ключ", "licenseKeyDeleteConfirm": "Подтвердить удаление лицензионного ключа", - "licenseTitle": "Управление статусом лицензии", + "licenseTitle": "Управление лицензиями", "licenseTitleDescription": "Просмотр и управление лицензионными ключами в системе", - "licenseHost": "Лицензия хоста", - "licenseHostDescription": "Управление основным лицензионным ключом для хоста.", + "licenseHost": "Лицензия", + "licenseHostDescription": "Просмотр уровня лицензии и информации о хосте", "licensedNot": "Не лицензировано", "hostId": "ID хоста", "licenseReckeckAll": "Перепроверить все ключи", @@ -586,7 +595,16 @@ "licensePurchase": "Приобрести лицензию", "licensePurchaseSites": "Приобрести дополнительные сайты", "licenseSitesUsedMax": "Использовано сайтов: {usedSites} из {maxSites}", - "licenseSitesUsed": "{count, plural, =0 {0 сайтов} one {# сайт} few {# сайта} many {# сайтов} other {# сайтов}} в системе.", + "licenseSitesUsed": "{count, plural, =0 {# сайтов} one {# сайт} few {# сайта} many {# сайтов} other {# сайтов}}", + "licenseUsage": "Использование", + "licenseUsageDescription": "Просмотр количества пользователей и сайтов, лицензированных для этого хоста", + "licenseUsageSites": "Сайты", + "licenseUsageUsers": "Пользователи", + "licenseNoUserLimit": "Нет ограничения на количество пользователей, использующих нелицензированный хост", + "licenseUsersUsedMax": "{usedUsers} из {maxUsers} пользователей использовано", + "licenseUsersUsed": "{count, plural, =0 {# пользователей} one {# пользователь} few {# пользователя} many {# пользователей} other {# пользователей}}", + "licenseUnlimited": "Неограниченный", + "licenseTierLabel": "Уровень", "licensePurchaseDescription": "Выберите, для скольких сайтов вы хотите {selectedMode, select, license {приобрести лицензию. Вы всегда можете добавить больше сайтов позже.} other {добавить к существующей лицензии.}}", "licenseFee": "Лицензионный сбор", "licensePriceSite": "Цена за сайт", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Каждое правило должно иметь уникальный номер приоритета.", "rulesErrorValidation": "Неверные правила", "rulesErrorValidationRuleDescription": "Правило {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Выберите действительный тип совпадения (путь, IP, CIDR, страна, регион или ASN).", + "rulesErrorInvalidMatchTypeDescription": "Выберите действительный тип совпадения (путь, IP, CIDR, страна, регион, ASN, или метод).", "rulesErrorValueRequired": "Введите значение для этого правила.", "rulesErrorInvalidCountry": "Недействительная страна", "rulesErrorInvalidCountryDescription": "Выберите правильную страну.", @@ -2827,9 +2845,9 @@ "expectedResponseCodes": "Ожидаемые коды ответов", "expectedResponseCodesDescription": "HTTP-код состояния, указывающий на здоровое состояние. Если оставить пустым, 200-300 считается здоровым.", "customRequestHeaders": "Пользовательские заголовки запроса", - "customRequestHeadersDescription": "Заголовки запроса, отправляемые целевым серверам. По одному в строке: Имя-Заголовка: значение", + "customRequestHeadersDescription": "Заголовки запроса, отправляемые на конечные цели. Один на строку: Название-Заголовка: значение", "customResponseHeaders": "Пользовательские заголовки ответа", - "customResponseHeadersDescription": "Заголовки ответа, возвращаемые клиенту. По одному в строке: Имя-Заголовка: значение", + "customResponseHeadersDescription": "Заголовки ответа, отправляемые обратно клиенту. Один на строку: Название-Заголовка: значение", "headersValidationError": "Заголовки должны быть в формате: Название заголовка: значение.", "saveHealthCheck": "Сохранить проверку здоровья", "healthCheckSaved": "Проверка здоровья сохранена", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Порт", "editInternalResourceDialogModeHost": "Хост", "editInternalResourceDialogModeCidr": "СИДР", + "editInternalResourceDialogModeGateway": "Узел выхода", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI Шлюз", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "IP адрес или имя хоста ресурса в сети сайта.", "editInternalResourceDialogDestinationIPDescription": "IP или адрес хоста ресурса в сети сайта.", "editInternalResourceDialogDestinationCidrDescription": "Диапазон CIDR ресурса в сети сайта.", + "editInternalResourceDialogDestinationGatewayDescription": "Сайты, используемые в качестве узлов выхода для этого ресурса", "editInternalResourceDialogAlias": "Псевдоним", "editInternalResourceDialogAliasDescription": "Дополнительный внутренний DNS псевдоним для этого ресурса.", "createInternalResourceDialogNoSitesAvailable": "Нет доступных сайтов", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Управляйте доступом к портам TCP/UDP и настройте разрешение ICMP ping для данного ресурса.", "hostSettings": "Хост", "cidrSettings": "СИДР", + "gatewaySettings": "Узел выхода", "createInternalResourceDialogResourceProperties": "Свойства ресурса", "createInternalResourceDialogName": "Имя", "createInternalResourceDialogSite": "Сайт", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI Шлюз", + "createInternalResourceDialogModeGateway": "Узел выхода", "scheme": "Схема", "createInternalResourceDialogScheme": "Схема", "createInternalResourceDialogEnableSsl": "Включить TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Запомнить этот ID организации", "orgAuthBackToSignIn": "Вернуться к стандартному входу", "orgAuthNoAccount": "Нет учётной записи?", - "subscriptionRequiredToUse": "Для использования этой функции требуется подписка.", - "mustUpgradeToUse": "Вы должны обновить подписку, чтобы использовать эту функцию.", + "subscriptionRequiredToUse": "Для использования этой функции требуется подписка. Записаться на демо", + "mustUpgradeToUse": "Вы должны обновить подписку, чтобы использовать эту функцию. Записаться на демо", "subscriptionRequiredTierToUse": "Эта функция требует {tier} или выше.", - "upgradeToTierToUse": "Обновитесь до {tier} или выше, чтобы использовать эту функцию.", + "upgradeToTierToUse": "Обновитесь до {tier}, чтобы использовать эту функцию. Записаться на демо", "subscriptionTierTier1": "Главная", "subscriptionTierTier2": "Команда", "subscriptionTierTier3": "Бизнес", @@ -3651,8 +3673,8 @@ "sourceAddress": "Адрес источника", "destinationAddress": "Адрес назначения", "duration": "Продолжительность", - "licenseRequiredToUse": "Лицензия Enterprise Edition требуется. Записаться на демо или пробную версию", - "ossEnterpriseEditionRequired": "Лицензия Enterprise Edition требуется. Записаться на демо или пробную версию", + "licenseRequiredToUse": "Лицензия Enterprise Edition требуется. Записаться на демо", + "ossEnterpriseEditionRequired": "Лицензия Enterprise Edition требуется. Записаться на демо", "certResolver": "Резольвер сертификата", "certResolverDescription": "Выберите резолвер сертификата, который будет использоваться для этого ресурса.", "selectCertResolver": "Выберите резолвер сертификата", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Проверка авторизации устройства...", "signedInAs": "Вы вошли как", "deviceCodeEnterPrompt": "Введите код, отображаемый на устройстве", + "deviceCodeConfirmPrompt": "Подтвердите, что это совпадает с кодом на вашем устройстве", "continue": "Продолжить", "deviceUnknownLocation": "Неизвестное местоположение", "deviceAuthorizationRequested": "Эта авторизация была запрошена у {location} на {date}. Убедитесь, что вы доверяете этому устройству, так как оно получит доступ к учетной записи.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Методы аутентификации, включенные для этого ресурса.", "resourceLauncherPrivateClientRequired": "Подключитесь с клиентом на устройстве для доступа к этому ресурсу в частном порядке.", "resourceLauncherPrivateClientRequiredTitle": "Требуется подключение клиента", + "resourceLauncherExitNodeTitle": "Маршрутизация узла выхода", + "resourceLauncherExitNodeDescription": "После подключения клиента выберите этот узел выхода в меню клиента, чтобы направить весь трафик через подключенные сайты.", "resourceLauncherDownloadClient": "Скачать клиент", "resourceLauncherFailedToLoadDetails": "Не удалось загрузить детали ресурса. Возможно, у вас больше нет доступа к этому ресурсу.", "resourceLauncherNoPortRestrictions": "Нет ограничений портов", + "resourceLauncherAllInternetTraffic": "Весь интернет-трафик", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Без меток", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Показать панель инструментов", "sessionToolbarHide": "Скрыть панель инструментов", "actionUpdateSiteApprovals": "Обновить утверждения сайта", - "check": "Проверить" + "check": "Проверить", + "rulesErrorInvalidMethod": "Недопустимый HTTP метод", + "rulesErrorInvalidMethodDescription": "Выберите как минимум один HTTP метод.", + "rulesSelectMethods": "Выберите методы" } diff --git a/messages/tr-TR.json b/messages/tr-TR.json index 8f18bbf6c..52708dc64 100644 --- a/messages/tr-TR.json +++ b/messages/tr-TR.json @@ -26,7 +26,7 @@ "trialBannerMessage": "Deneme süreniz {countdown} içinde sona eriyor. Erişimi sürdürmek için yükseltin.", "trialBannerExpired": "Deneme süreniz sona erdi. Erişimi geri yüklemek için şimdi yükseltin.", "billingTrialBannerTitle": "Ücretsiz Deneme Aktif", - "billingTrialBannerDescription": "Şu anda iş seviyesi için ücretsiz deneme sürümündesiniz. Deneme süresi sona erdiğinde, hesabınız otomatik olarak Temel seviye özelliklerine ve limitlerine geri dönecektir. Mevcut planınızın özelliklerine erişimi sürdürmek için istediğiniz zaman yükseltin.", + "billingTrialBannerDescription": "Şu anda {tier} seviyesinde ücretsiz deneme sürümündesiniz. Deneme sona erdiğinde, hesabınız otomatik olarak Temel seviye özelliklerine ve limitlerine dönecektir. Mevcut planınızın özelliklerine erişimi sürdürmek için istediğiniz zaman yükseltebilirsiniz.", "billingTrialBannerUpgrade": "Şimdi Yükselt", "billingTrialBadge": "Ücretsiz Deneme", "trialActive": "Ücretsiz Deneme Aktif", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "{name} için WireGuard tünelini yeniden başlatmak istediğinizden emin misiniz? Site kısa süreliğine bağlantıyı kaybedecektir.", "siteRestartWarning": "Tünel yeniden başlatılırken site kısa süreliğine kesintiye uğrar.", "siteRestarted": "Site yeniden başlatıldı", - "siteRestartedDescription": "WireGuard tüneli yeniden başlatıldı.", + "siteRestartedDescription": "Site yeniden başlatıldı.", "siteErrorRestart": "Sitenin yeniden başlatılması başarısız oldu", "siteErrorRestartDescription": "Site yeniden başlatılırken bir hata oluştu.", "siteSettingDescription": "Sitenizdeki ayarları yapılandırın", @@ -234,6 +234,9 @@ "clientResourceDescription": "Sadece bağlı bir istemci aracılığıyla erişilebilen kaynakları oluşturun ve yönetin", "privateResourcesBannerTitle": "Sıfır Güven Özel Erişim", "privateResourcesBannerDescription": "Özel kaynaklar sıfır güven güvenliği kullanır, kullanıcılar ve makinelerin yalnızca açıkça izin verdiğiniz kaynaklara erişmesini sağlar. Bu kaynaklara güvenli bir sanal özel ağ üzerinden erişmek için kullanıcı cihazlarını veya makine müşterilerini bağlayın.", + "licenseBillingBannerTitle": "Lisans Faturalandırmasını Yönet", + "licenseBillingBannerDescription": "Lisans anahtarlarınızın faturalandırmasını yönetmek için ödeme yöntemleri ve faturalar dahil olmak üzere faturalandırma sayfasını ziyaret edin. Sunucu kapasitesini artırmak veya daha fazla örnek konuşlandırmak için aşağıdan ek lisanslar oluşturabilirsiniz.", + "licenseBillingBannerButton": "Faturalandırmaya Git", "resourcesSearch": "Kaynakları ara...", "resourceAdd": "Kaynak Ekle", "resourceErrorDelte": "Kaynak silinirken hata", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "Bağlanan müşterilere site ağında bir CIDR aralığını açığa çıkartın", "privateResourceTypeHttpDescription": "Bir alan adı üzerinden HTTP veya HTTPS hizmetine eriş", "privateResourceTypeSshDescription": "Bağlanan müşteriler için bir SSH sunucusuna eriş", + "privateResourceTypeGatewayDescription": "Tüm internet trafiğini site ağı üzerinden çıkış yapacak şekilde gönderin.", + "resourceTypeGatewayDescription": "Tüm internet trafiğini site ağı üzerinden çıkış yapacak şekilde gönderin.", "resourceDomainDescription": "Kaynak bu tam etki alanı adıyla sunulacak.", "resourceHTTPSSettings": "HTTPS Ayarları", "resourceHTTPSSettingsDescription": "Kaynağınıza HTTPS üzerinden erişimin nasıl sağlanacağını yapılandırın", @@ -555,6 +560,10 @@ "licenseBannerDescription": "Kendi barındırdığınız Pangolin örneğiniz için kurumsal özelliklerin kilidini açın. Premium yetenekleri etkinleştirmek için bir lisans anahtarı satın alın, ardından aşağıya ekleyin.", "licenseBannerGetLicense": "Lisans Alın", "licenseBannerViewDocs": "Dokümantasyonu Görüntüleyin", + "licenseUpgradeBannerTitle": "Daha Fazla Kapasiteli Mi İhtiyacınız Var?", + "licenseUpgradeBannerDescription": "Site veya kullanıcı kapasitenizi artırmanız gerekiyorsa, app.pangolin.net portalından daha fazla lisans satın alabilir ve bunları aşağıya ekleyerek örneğinizi yükseltebilirsiniz.", + "licenseUpgradeBannerButton": "Daha Fazla Lisans Satın Al", + "licenseMultipleKeysDescription": "Bu sunucuda birden fazla lisans etkinleştirilmiş durumda. En yüksek seviye kullanılıyor.", "communityEdition": "Topluluk Sürümü", "licenseAboutDescription": "Bu, Pangolin'i ticari bir ortamda kullanan işletme ve kurumsal kullanıcılar içindir. Pangolin'i kişisel kullanım için kullanıyorsanız, bu bölümü görmezden gelebilirsiniz.", "licenseKeyActivated": "Lisans anahtarı etkinleştirildi", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "Lisans anahtarını silmek istediğinizden emin misiniz?", "licenseKeyDelete": "Lisans Anahtarını Sil", "licenseKeyDeleteConfirm": "Lisans Anahtarının Silinmesini Onaylayın", - "licenseTitle": "Lisans Durumunu Yönet", + "licenseTitle": "Lisansları Yönet", "licenseTitleDescription": "Sistemdeki lisans anahtarlarını görüntüleyin ve yönetin", - "licenseHost": "Ana Lisans", - "licenseHostDescription": "Ana bilgisayar için ana lisans anahtarını yönetin.", + "licenseHost": "Lisans", + "licenseHostDescription": "Lisans düzeyi ve barındırma bilgilerini görüntüleyin", "licensedNot": "Lisanssız", "hostId": "Ana Bilgisayar Kimliği", "licenseReckeckAll": "Tüm Anahtarları Yeniden Kontrol Et", @@ -586,7 +595,16 @@ "licensePurchase": "Lisans Satın Al", "licensePurchaseSites": "Ek Siteler Satın Al", "licenseSitesUsedMax": "{usedSites} / {maxSites} siteleri kullanıldı", - "licenseSitesUsed": "{count, plural, =0 {# site} one {# site} other {# site}} sistemde bulunmaktadır.", + "licenseSitesUsed": "{count, plural, =0 {# site} one {# site} other {# site}} sistemde bulunmaktadır", + "licenseUsage": "Kullanım", + "licenseUsageDescription": "Bu ana bilgisayar için lisanslanan kullanıcı ve site sayısını görüntüleyin", + "licenseUsageSites": "Siteler", + "licenseUsageUsers": "Kullanıcılar", + "licenseNoUserLimit": "Lisanssız bir ana bilgisayar kullanan kullanıcı sayısında herhangi bir sınır yoktur", + "licenseUsersUsedMax": "{usedUsers} / {maxUsers} kullanıcılar kullanıldı", + "licenseUsersUsed": "{count, plural, =0 {# kullanıcı} one {# kullanıcı} other {# kullanıcılar}}", + "licenseUnlimited": "Sınırsız", + "licenseTierLabel": "Seviye", "licensePurchaseDescription": "{selectedMode, select, license {Lisans satın almak için kaç site istediğinizi seçin. Daha sonra daha fazla site ekleyebilirsiniz.} other {mevcut lisansınıza kaç site ekleneceğini seçin.}}", "licenseFee": "Lisans ücreti", "licensePriceSite": "Site başına fiyat", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "Her kuralın benzersiz bir öncelik numarası olmalıdır.", "rulesErrorValidation": "Geçersiz kurallar", "rulesErrorValidationRuleDescription": "Kural {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "Geçerli bir eşleşme türünü seçin (yol, IP, CIDR, ülke, bölge veya ASN).", + "rulesErrorInvalidMatchTypeDescription": "Geçerli bir eşleşme türünü seçin (yol, IP, CIDR, ülke, bölge, ASN veya yöntem).", "rulesErrorValueRequired": "Bu kural için bir değer girin.", "rulesErrorInvalidCountry": "Geçersiz ülke", "rulesErrorInvalidCountryDescription": "Geçerli bir ülke seçin.", @@ -2827,9 +2845,9 @@ "expectedResponseCodes": "Beklenen Yanıt Kodları", "expectedResponseCodesDescription": "Sağlıklı durumu gösteren HTTP durum kodu. Boş bırakılırsa, 200-300 arası sağlıklı kabul edilir.", "customRequestHeaders": "Özel İstek Başlıkları", - "customRequestHeadersDescription": "Hedeflere gönderilen istek başlıkları. Satır başına bir tane: Başlık-Adı: değer", + "customRequestHeadersDescription": "Aşağı akış hedeflerine gönderilen istek başlıkları. Her satıra bir tane: Başlık-Adı: değer", "customResponseHeaders": "Özel Yanıt Başlıkları", - "customResponseHeadersDescription": "İstemciye geri gönderilen yanıt başlıkları. Satır başına bir tane: Başlık-Adı: değer", + "customResponseHeadersDescription": "İstemciye geri gönderilen yanıt başlıkları. Her satıra bir tane: Başlık-Adı: değer", "headersValidationError": "Başlıklar şu formatta olmalıdır: Başlık-Adı: değer.", "saveHealthCheck": "Sağlık Kontrolünü Kaydet", "healthCheckSaved": "Sağlık Kontrolü Kaydedildi", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "Bağlantı Noktası", "editInternalResourceDialogModeHost": "Ev Sahibi", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "Çıkış Düğümü", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI Ağ Geçidi", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "Site ağındaki kaynağın IP adresi veya ana bilgisayar adı.", "editInternalResourceDialogDestinationIPDescription": "Kaynağın site ağındaki IP veya ana bilgisayar adresi.", "editInternalResourceDialogDestinationCidrDescription": "Site ağındaki kaynağın CIDR aralığı.", + "editInternalResourceDialogDestinationGatewayDescription": "Bu kaynak için çıkış düğümleri olarak kullanılacak siteler", "editInternalResourceDialogAlias": "Takma Ad", "editInternalResourceDialogAliasDescription": "Bu kaynak için isteğe bağlı dahili DNS takma adı.", "createInternalResourceDialogNoSitesAvailable": "Site Bulunamadı", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "Bu kaynak için TCP/UDP port erişimini kontrol edin ve ICMP ping'in izin verilip verilmediğini kontrol edin.", "hostSettings": "Sunucu", "cidrSettings": "CIDR", + "gatewaySettings": "Çıkış Düğümü", "createInternalResourceDialogResourceProperties": "Kaynak Özellikleri", "createInternalResourceDialogName": "Ad", "createInternalResourceDialogSite": "Site", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI Ağ Geçidi", + "createInternalResourceDialogModeGateway": "Çıkış Düğümü", "scheme": "Şema", "createInternalResourceDialogScheme": "Şema", "createInternalResourceDialogEnableSsl": "TLS'yi Etkinleştir", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "Bu kuruluş kimliğini hatırla", "orgAuthBackToSignIn": "Standart girişe geri dön", "orgAuthNoAccount": "Hesabınız yok mu?", - "subscriptionRequiredToUse": "Bu özelliği kullanmak için abonelik gerekmektedir.", - "mustUpgradeToUse": "Bu özelliği kullanmak için aboneliğinizi yükseltmelisiniz.", + "subscriptionRequiredToUse": "Bu özelliği kullanmak için abonelik gereklidir. Bir demo rezervasyonu yapın", + "mustUpgradeToUse": "Bu özelliği kullanmak için abonelik yükseltmelisiniz. Bir demo rezervasyonu yapın", "subscriptionRequiredTierToUse": "Bu özellik {tier} veya daha üstünü gerektirir.", - "upgradeToTierToUse": "Bu özelliği kullanmak için {tier} veya daha üst bir seviyeye yükseltin.", + "upgradeToTierToUse": "Bu özelliği kullanmak için {tier}'ye yükseltmelisiniz. Bir demo rezervasyonu yapın", "subscriptionTierTier1": "Ana Sayfa", "subscriptionTierTier2": "Takım", "subscriptionTierTier3": "İşletme", @@ -3651,8 +3673,8 @@ "sourceAddress": "Kaynak Adresi", "destinationAddress": "Hedef Adresi", "duration": "Süre", - "licenseRequiredToUse": "Kurumsal Sürüm lisansı gereklidir. Bir demo veya deneme rezervasyonu yapın", - "ossEnterpriseEditionRequired": "Kurumsal Sürüm lisansı gereklidir. Bir demo veya deneme rezervasyonu yapın", + "licenseRequiredToUse": "Kurumsal Sürüm lisansı gereklidir. Bir demo rezervasyonu yapın", + "ossEnterpriseEditionRequired": "Kurumsal Sürüm lisansı gereklidir. Bir demo rezervasyonu yapın", "certResolver": "Sertifika Çözücü", "certResolverDescription": "Bu kaynak için kullanılacak sertifika çözücüsünü seçin.", "selectCertResolver": "Sertifika Çözücü Seçin", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "Cihaz yetkilendirme doğrulanıyor...", "signedInAs": "Olarak giriş yapıldı", "deviceCodeEnterPrompt": "Cihazda gösterilen kodu girin", + "deviceCodeConfirmPrompt": "Bu kodun cihazınızdaki kodla eşleştiğini onaylayın", "continue": "Devam Et", "deviceUnknownLocation": "Bilinmeyen konum", "deviceAuthorizationRequested": "Bu yetkilendirme {tarih} tarihinde {konum} konumundan talep edildi. Bu cihaza güvenmenizi sağlayın, çünkü hesap erişimine sahip olacaktır.", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "Bu kaynak için etkin kimlik doğrulama yöntemleri.", "resourceLauncherPrivateClientRequired": "Bu kaynağa özel olarak erişmek için cihazınızda bir istemci ile bağlanın.", "resourceLauncherPrivateClientRequiredTitle": "İstemci Bağlantısı Gerekli", + "resourceLauncherExitNodeTitle": "Çıkış Düğümü Yönlendirme", + "resourceLauncherExitNodeDescription": "Müşterinizi bağladıktan sonra, bağlı siteler üzerinden tüm trafiği yönlendirmek için bu çıkış düğümünü müşteri menüsünden seçin.", "resourceLauncherDownloadClient": "İstemci indir", "resourceLauncherFailedToLoadDetails": "Kaynak detayları yüklenemedi. Bu kaynağa artık erişiminiz olmayabilir.", "resourceLauncherNoPortRestrictions": "Hiçbir port kısıtlaması yok", + "resourceLauncherAllInternetTraffic": "Tüm internet trafiği", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "Etiketsiz", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "Araç çubuğunu göster", "sessionToolbarHide": "Araç çubuğunu gizle", "actionUpdateSiteApprovals": "Site Onaylarını Güncelle", - "check": "Kontrol Et" + "check": "Kontrol Et", + "rulesErrorInvalidMethod": "Geçersiz HTTP yöntemi", + "rulesErrorInvalidMethodDescription": "En az bir HTTP yöntemi seçin.", + "rulesSelectMethods": "Yöntemleri Seç" } diff --git a/messages/zh-CN.json b/messages/zh-CN.json index 2c7161ca9..dbd2e1b1d 100644 --- a/messages/zh-CN.json +++ b/messages/zh-CN.json @@ -26,7 +26,7 @@ "trialBannerMessage": "您的试用将在 {countdown} 到期。升级以保持访问。", "trialBannerExpired": "您的试用已到期。立即升级以恢复访问。", "billingTrialBannerTitle": "免费试用激活中", - "billingTrialBannerDescription": "您目前正在商用层进行免费试用。试用结束后,您的账户将自动回到基础层功能和限制。可随时升级以保持当前计划的功能访问。", + "billingTrialBannerDescription": "您目前正处于 {tier} 层的免费试用期。试用期结束后,您的账户将自动回退到基础层的功能和限制。可随时升级以保持对当前计划功能的访问。", "billingTrialBannerUpgrade": "立即升级", "billingTrialBadge": "免费试用", "trialActive": "免费试用中", @@ -132,7 +132,7 @@ "siteRestartDialogMessage": "确定要重启{name}的WireGuard隧道吗?站点将暂时断开连接。", "siteRestartWarning": "隧道重启时,站点将暂时断开连接。", "siteRestarted": "站点已重启", - "siteRestartedDescription": "WireGuard隧道已重启。", + "siteRestartedDescription": "网站已重启。", "siteErrorRestart": "重启站点失败", "siteErrorRestartDescription": "重启站点时发生错误。", "siteSettingDescription": "配置站点设置", @@ -234,6 +234,9 @@ "clientResourceDescription": "创建和管理只能通过连接客户端访问的资源", "privateResourcesBannerTitle": "零信任私有访问", "privateResourcesBannerDescription": "私有资源采用零信任安全机制,确保只有获得明确授权的用户和机器才能访问。用户设备或机器客户端连接后,即可通过安全的虚拟专用网络访问这些资源。", + "licenseBillingBannerTitle": "管理许可证计费", + "licenseBillingBannerDescription": "要管理您的许可证密钥的计费,包括支付方法和发票,请访问计费页面。您可以在下方生成更多许可证以增加服务器容量或部署更多实例。", + "licenseBillingBannerButton": "转到账单", "resourcesSearch": "搜索资源...", "resourceAdd": "添加资源", "resourceErrorDelte": "删除资源时出错", @@ -304,6 +307,8 @@ "privateResourceTypeCidrDescription": "在站点网络上向连接的客户端暴露CIDR范围", "privateResourceTypeHttpDescription": "通过域访问HTTP或HTTPS服务", "privateResourceTypeSshDescription": "从连接的客户端访问SSH服务器", + "privateResourceTypeGatewayDescription": "发送所有互联网流量通过站点网络出口。", + "resourceTypeGatewayDescription": "发送所有互联网流量通过站点网络出口。", "resourceDomainDescription": "资源将在此完全限定的域名上提供。", "resourceHTTPSSettings": "HTTPS 设置", "resourceHTTPSSettingsDescription": "配置如何通过 HTTPS 访问资源", @@ -555,6 +560,10 @@ "licenseBannerDescription": "为您自行托管的Pangolin实例解锁企业功能。购买许可证密钥以激活高级功能,然后在下方添加。", "licenseBannerGetLicense": "获取许可证", "licenseBannerViewDocs": "查看文档", + "licenseUpgradeBannerTitle": "需要更多容量?", + "licenseUpgradeBannerDescription": "如果您需要增加站点或用户容量,可以通过app.pangolin.net门户购买更多许可证,并在下方添加它们以升级您的实例。", + "licenseUpgradeBannerButton": "购买更多许可证", + "licenseMultipleKeysDescription": "您在此服务器上已激活多个许可证。使用最高级别。", "communityEdition": "社区版", "licenseAboutDescription": "这是针对商业环境中使用Pangolin的商业和企业用户。 如果您正在使用 Pangolin 供个人使用,您可以忽略此部分。", "licenseKeyActivated": "授权密钥已激活", @@ -573,10 +582,10 @@ "licenseQuestionRemove": "您确定要删除许可证密钥?", "licenseKeyDelete": "删除许可证密钥", "licenseKeyDeleteConfirm": "确认删除许可证密钥", - "licenseTitle": "管理许可证状态", + "licenseTitle": "管理许可证", "licenseTitleDescription": "查看和管理系统中的许可证密钥", - "licenseHost": "主机许可证", - "licenseHostDescription": "管理主机的主许可证密钥。", + "licenseHost": "许可证", + "licenseHostDescription": "查看许可证级别和主机信息", "licensedNot": "未授权", "hostId": "主机 ID", "licenseReckeckAll": "重新检查所有密钥", @@ -586,7 +595,16 @@ "licensePurchase": "购买许可证", "licensePurchaseSites": "购买更多站点", "licenseSitesUsedMax": "使用了 {usedSites}/{maxSites} 个站点", - "licenseSitesUsed": "{count, plural, =0 {# 站点} one {# 站点} other {# 站点}}", + "licenseSitesUsed": "{count, plural, =0 {# sites} one {# site} other {# sites}}", + "licenseUsage": "使用情况", + "licenseUsageDescription": "查看此主机许可的用户和站点数量", + "licenseUsageSites": "网站", + "licenseUsageUsers": "用户", + "licenseNoUserLimit": "使用未经许可主机的用户数量没有限制", + "licenseUsersUsedMax": "使用了 {usedUsers}/{maxUsers} 个用户", + "licenseUsersUsed": "{count, plural, =0 {# users} one {# user} other {# users}}", + "licenseUnlimited": "无限制", + "licenseTierLabel": "级别", "licensePurchaseDescription": "请选择您希望 {selectedMode, select, license {直接购买许可证,您可以随时增加更多站点。} other {为现有许可证购买更多站点}}", "licenseFee": "许可证费用", "licensePriceSite": "每个站点的价格", @@ -831,7 +849,7 @@ "rulesErrorDuplicatePriorityDescription": "每条规则必须拥有唯一的优先级号。", "rulesErrorValidation": "规则无效", "rulesErrorValidationRuleDescription": "规则 {ruleNumber}: {message}", - "rulesErrorInvalidMatchTypeDescription": "选择有效的匹配类型(路径、IP、CIDR、国家、地区或 ASN)。", + "rulesErrorInvalidMatchTypeDescription": "选择有效的匹配类型(路径、IP、CIDR、国家、地区、ASN 或方法)。", "rulesErrorValueRequired": "为此规则输入一个值。", "rulesErrorInvalidCountry": "国家无效", "rulesErrorInvalidCountryDescription": "选择一个有效的国家。", @@ -2826,10 +2844,10 @@ "retryAttempts": "重试次数", "expectedResponseCodes": "期望响应代码", "expectedResponseCodesDescription": "HTTP 状态码表示健康状态。如留空,200-300 被视为健康。", - "customRequestHeaders": "自定义请求标头", - "customRequestHeadersDescription": "转发到目标的请求标头。每行一个:标头名称:值", - "customResponseHeaders": "自定义响应标头", - "customResponseHeadersDescription": "返回给客户端的响应标头。每行一个:标头名称:值", + "customRequestHeaders": "自定义请求头", + "customRequestHeadersDescription": "请求头发送到下游目标。每行一个:头名称:值", + "customResponseHeaders": "自定义响应头", + "customResponseHeadersDescription": "响应头发送回客户端。每行一个:头名称:值", "headersValidationError": "头部必须是格式:头部名称:值。", "saveHealthCheck": "保存健康检查", "healthCheckSaved": "健康检查已保存", @@ -2911,6 +2929,7 @@ "editInternalResourceDialogModePort": "端口", "editInternalResourceDialogModeHost": "主机", "editInternalResourceDialogModeCidr": "CIDR", + "editInternalResourceDialogModeGateway": "出口节点", "editInternalResourceDialogModeHttp": "HTTP", "editInternalResourceDialogModeHttps": "HTTPS", "editInternalResourceDialogModeInference": "AI 网关", @@ -2922,6 +2941,7 @@ "editInternalResourceDialogDestinationHostDescription": "站点网络上资源的 IP 地址或主机名。", "editInternalResourceDialogDestinationIPDescription": "站点网络上资源的IP或主机名地址。", "editInternalResourceDialogDestinationCidrDescription": "站点网络上资源的 CIDR 范围。", + "editInternalResourceDialogDestinationGatewayDescription": "用于此资源的出口节点", "editInternalResourceDialogAlias": "别名", "editInternalResourceDialogAliasDescription": "此资源可选的内部DNS别名。", "createInternalResourceDialogNoSitesAvailable": "暂无可用站点", @@ -2936,6 +2956,7 @@ "privateResourceNetworkAccessDescription": "控制此资源的 TCP/UDP 端口访问以及是否允许 ICMP ping。", "hostSettings": "主机", "cidrSettings": "CIDR", + "gatewaySettings": "出口节点", "createInternalResourceDialogResourceProperties": "资源属性", "createInternalResourceDialogName": "名称", "createInternalResourceDialogSite": "站点", @@ -2974,6 +2995,7 @@ "createInternalResourceDialogModeHttps": "HTTPS", "createInternalResourceDialogModeSsh": "SSH", "createInternalResourceDialogModeInference": "AI 网关", + "createInternalResourceDialogModeGateway": "出口节点", "scheme": "方案", "createInternalResourceDialogScheme": "方案", "createInternalResourceDialogEnableSsl": "启用 TLS", @@ -3278,10 +3300,10 @@ "orgAuthRememberOrgId": "记住这个组织ID", "orgAuthBackToSignIn": "返回标准登录", "orgAuthNoAccount": "没有账户?", - "subscriptionRequiredToUse": "需要订阅才能使用此功能。", - "mustUpgradeToUse": "您必须升级您的订阅才能使用此功能。", + "subscriptionRequiredToUse": "使用此功能需要订阅。预约演示", + "mustUpgradeToUse": "您必须升级您的订阅才能使用此功能。预约演示", "subscriptionRequiredTierToUse": "此功能需要 {tier} 或更高级别。", - "upgradeToTierToUse": "升级到 {tier} 或更高级别以使用此功能。", + "upgradeToTierToUse": "升级到 {tier} 以使用此功能。预约演示", "subscriptionTierTier1": "首页", "subscriptionTierTier2": "团队", "subscriptionTierTier3": "业务", @@ -3651,8 +3673,8 @@ "sourceAddress": "源地址", "destinationAddress": "目的地址", "duration": "期限", - "licenseRequiredToUse": "需要企业版许可证。 预约演示或试用", - "ossEnterpriseEditionRequired": "需要企业版许可证。 预约演示或试用", + "licenseRequiredToUse": "需要企业版许可证。预约演示", + "ossEnterpriseEditionRequired": "需要企业版许可证。预约演示", "certResolver": "证书解决器", "certResolverDescription": "选择用于此资源的证书解析器。", "selectCertResolver": "选择证书解析", @@ -3719,6 +3741,7 @@ "deviceCodeVerifying": "正在验证设备授权...", "signedInAs": "登录为", "deviceCodeEnterPrompt": "输入设备上显示的代码", + "deviceCodeConfirmPrompt": "确认此代码与您设备上的代码匹配", "continue": "继续", "deviceUnknownLocation": "未知位置", "deviceAuthorizationRequested": "此授权请求来自{location},日期为{date}。请确保您信任此设备,因为它将获得帐户访问权限。", @@ -4291,9 +4314,12 @@ "resourceLauncherAuthMethodsDescription": "此资源启用的身份验证方法。", "resourceLauncherPrivateClientRequired": "请在您的设备上连接客户端以私密访问此资源。", "resourceLauncherPrivateClientRequiredTitle": "需要客户端连接", + "resourceLauncherExitNodeTitle": "出口节点路由", + "resourceLauncherExitNodeDescription": "在连接您的客户端后,在客户端菜单中选择此出口节点将所有流量路由通过连接的站点。", "resourceLauncherDownloadClient": "下载客户端", "resourceLauncherFailedToLoadDetails": "无法加载资源详细信息。您可能已经没有权限访问此资源。", "resourceLauncherNoPortRestrictions": "无端口限制", + "resourceLauncherAllInternetTraffic": "所有互联网流量", "resourceLauncherTcp": "TCP", "resourceLauncherUdp": "UDP", "resourceLauncherUnlabeled": "未标记", @@ -4399,5 +4425,8 @@ "sessionToolbarShow": "显示工具栏", "sessionToolbarHide": "隐藏工具栏", "actionUpdateSiteApprovals": "更新站点审批", - "check": "检查" + "check": "检查", + "rulesErrorInvalidMethod": "无效的HTTP方法", + "rulesErrorInvalidMethodDescription": "至少选择一个HTTP方法。", + "rulesSelectMethods": "选择方法" } diff --git a/package.json b/package.json index 0d4e6eb19..736a27023 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "set:pg": "echo 'export * from \"./pg\";\nexport const driver: \"pg\" | \"sqlite\" = \"pg\";' > server/db/index.ts && cp drizzle.pg.config.ts drizzle.config.ts && cp server/setup/migrationsPg.ts server/setup/migrations.ts", "build:next": "next build", "build": "mkdir -p dist && next build && node esbuild.mjs -e server/index.ts -o dist/server.mjs && node esbuild.mjs -e server/setup/migrations.ts -o dist/migrations.mjs", - "start": "ENVIRONMENT=prod node dist/migrations.mjs && ENVIRONMENT=prod NODE_ENV=development node --enable-source-maps dist/server.mjs", + "start": "ENVIRONMENT=prod node --disable-warning=ExperimentalWarning dist/migrations.mjs && ENVIRONMENT=prod NODE_ENV=development node --disable-warning=ExperimentalWarning --enable-source-maps dist/server.mjs", "email": "email dev --dir server/emails/templates --port 3005", "build:cli": "node esbuild.mjs -e cli/index.ts -o dist/cli.mjs", "format:check": "prettier --check .", diff --git a/server/lib/blueprints/types.ts b/server/lib/blueprints/types.ts index a057eb745..0a570ca8b 100644 --- a/server/lib/blueprints/types.ts +++ b/server/lib/blueprints/types.ts @@ -612,7 +612,18 @@ export function isTargetsOnlyResource(resource: any): boolean { export const PrivateResourceSchema = z .object({ name: z.string().min(1).max(255), - mode: z.enum(["host", "cidr", "http", "ssh", "inference", "gateway"]), + // "exit-node" is accepted as an alias for "gateway" (matches the UI naming) + mode: z + .enum([ + "host", + "cidr", + "http", + "ssh", + "inference", + "gateway", + "exit-node" + ]) + .transform((mode) => (mode === "exit-node" ? "gateway" : mode)), site: z.string().optional(), // DEPRECATED IN FAVOR OF sites sites: z.array(z.string()).optional().default([]), // protocol: z.enum(["tcp", "udp"]).optional(), diff --git a/server/lib/consts.ts b/server/lib/consts.ts index b8b1e9c65..a8b390d77 100644 --- a/server/lib/consts.ts +++ b/server/lib/consts.ts @@ -2,7 +2,7 @@ import path from "path"; import { fileURLToPath } from "url"; // This is a placeholder value replaced by the build process -export const APP_VERSION = "1.23.0"; +export const APP_VERSION = "1.24.0"; export const __FILENAME = fileURLToPath(import.meta.url); export const __DIRNAME = path.dirname(__FILENAME); diff --git a/server/private/routers/ws/ws.ts b/server/private/routers/ws/ws.ts index 4a79ff006..7327c7067 100644 --- a/server/private/routers/ws/ws.ts +++ b/server/private/routers/ws/ws.ts @@ -329,6 +329,12 @@ const initializeRedisSubscription = async (): Promise => { redisMessage.message, redisMessage.excludeClientId ); + } else if ( + redisMessage.type === "disconnect" && + redisMessage.targetClientId + ) { + // Close the client's connections if any are on this node + disconnectClientLocal(redisMessage.targetClientId); } } catch (error) { logger.error("Error processing Redis message:", error); @@ -1285,13 +1291,43 @@ if (redisManager.isRedisEnabled()) { logger.debug("WebSocket handler initialized in local mode"); } -// Disconnect a specific client and force them to reconnect +// Disconnect a specific client on every node and force them to reconnect const disconnectClient = async (clientId: string): Promise => { + const localDisconnected = disconnectClientLocal(clientId); + + if (!redisManager.isRedisEnabled()) { + return localDisconnected; + } + + try { + // Flush queued direct messages first so anything sent to this client + // just before (e.g. olm/terminate) reaches the other nodes ahead of + // the disconnect on the same channel. + await flushPendingRedisDirectMessages(); + + const redisMessage: RedisMessage = { + type: "disconnect", + targetClientId: clientId, + fromNodeId: NODE_ID + }; + await redisManager.publish(REDIS_CHANNEL, JSON.stringify(redisMessage)); + return true; + } catch (error) { + logger.error( + `Failed to publish disconnect for client ID ${clientId} via Redis:`, + error + ); + return localDisconnected; + } +}; + +// Disconnect a specific client's connections on this node only +const disconnectClientLocal = (clientId: string): boolean => { const mapKey = getClientMapKey(clientId); const clients = connectedClients.get(mapKey); if (!clients || clients.length === 0) { - logger.debug(`No connections found for client ID: ${clientId}`); + logger.debug(`No local connections found for client ID: ${clientId}`); return false; } diff --git a/server/routers/launcher/formatLauncherAccess.ts b/server/routers/launcher/formatLauncherAccess.ts index ca2104ccd..59862b7dc 100644 --- a/server/routers/launcher/formatLauncherAccess.ts +++ b/server/routers/launcher/formatLauncherAccess.ts @@ -125,6 +125,16 @@ export function formatPublicResourceAccess( export function formatSiteResourceAccess( resource: SiteResourceAccessInput ): LauncherAccessFields { + // Exit node (gateway) destinations are always 0.0.0.0/0 — not useful to + // show or copy. The launcher UI renders a localized capability label. + if (resource.mode === "gateway") { + return { + accessDisplay: "", + accessCopyValue: "", + accessUrl: null + }; + } + if ( (resource.mode === "http" || resource.mode === "inference") && resource.fullDomain diff --git a/server/routers/olm/getOlmToken.ts b/server/routers/olm/getOlmToken.ts index c7c0c127b..7808b558b 100644 --- a/server/routers/olm/getOlmToken.ts +++ b/server/routers/olm/getOlmToken.ts @@ -98,13 +98,13 @@ export async function getOlmToken( await validateSessionToken(userToken); if (!userSession || !user) { return next( - createHttpError(HttpCode.BAD_REQUEST, "Invalid user token") + createHttpError(HttpCode.UNAUTHORIZED, "Invalid user token") ); } if (user.userId !== existingOlm.userId) { return next( createHttpError( - HttpCode.BAD_REQUEST, + HttpCode.UNAUTHORIZED, "User token does not match olm" ) ); diff --git a/server/routers/olm/handleOlmPingMessage.ts b/server/routers/olm/handleOlmPingMessage.ts index 0e18c7f5b..aa6e8a2b9 100644 --- a/server/routers/olm/handleOlmPingMessage.ts +++ b/server/routers/olm/handleOlmPingMessage.ts @@ -1,4 +1,4 @@ -import { getClientConfigVersion } from "#dynamic/routers/ws"; +import { disconnectClient, getClientConfigVersion } from "#dynamic/routers/ws"; import { db } from "@server/db"; import { MessageHandler } from "@server/routers/ws"; import { clients, Olm } from "@server/db"; @@ -11,6 +11,29 @@ import { encodeHexLowerCase } from "@oslojs/encoding"; import { sha256 } from "@oslojs/crypto/sha2"; import { sendOlmSyncMessage } from "./sync"; import { handleFingerprintInsertion } from "./fingerprintingUtils"; +import { sendTerminateClient } from "../client/terminate"; +import { OlmErrorCodes } from "./error"; + +type OlmErrorCode = (typeof OlmErrorCodes)[keyof typeof OlmErrorCodes]; + +/** + * Tells the olm why it is being kicked, then closes its websocket so it + * does not linger connected until the offline checker notices. + */ +async function terminateOlm( + clientId: number, + olmId: string, + error: OlmErrorCode +) { + try { + await sendTerminateClient(clientId, error, olmId); + // wait a moment to ensure the message is sent + await new Promise((resolve) => setTimeout(resolve, 1000)); + await disconnectClient(olmId); + } catch (err) { + logger.error(`Error terminating olm ${olmId}`, { error: err }); + } +} /** * Handles ping messages from clients and responds with pong @@ -60,14 +83,29 @@ export const handleOlmPingMessage: MessageHandler = async (context) => { await validateSessionToken(userToken); if (!userSession || !user) { logger.warn("Invalid user session for olm ping"); - return; // by returning here we just ignore the ping and the setInterval will force it to disconnect + await terminateOlm( + client.clientId, + olm.olmId, + OlmErrorCodes.INVALID_USER_SESSION + ); + return; } if (user.userId !== olm.userId) { logger.warn("User ID mismatch for olm ping"); + await terminateOlm( + client.clientId, + olm.olmId, + OlmErrorCodes.USER_ID_MISMATCH + ); return; } if (user.userId !== client.userId) { logger.warn("Client user ID mismatch for olm ping"); + await terminateOlm( + client.clientId, + olm.olmId, + OlmErrorCodes.USER_ID_MISMATCH + ); return; } @@ -85,6 +123,18 @@ export const handleOlmPingMessage: MessageHandler = async (context) => { logger.warn( `Olm user ${olm.userId} does not pass access policies for org ${client.orgId}: ${policyCheck.error}` ); + let error: OlmErrorCode = + OlmErrorCodes.ORG_ACCESS_POLICY_DENIED; + if (policyCheck.policies?.passwordAge?.compliant === false) { + error = OlmErrorCodes.ORG_ACCESS_POLICY_PASSWORD_EXPIRED; + } else if ( + policyCheck.policies?.maxSessionLength?.compliant === false + ) { + error = OlmErrorCodes.ORG_ACCESS_POLICY_SESSION_EXPIRED; + } else if (policyCheck.policies?.requiredTwoFactor === false) { + error = OlmErrorCodes.ORG_ACCESS_POLICY_2FA_REQUIRED; + } + await terminateOlm(client.clientId, olm.olmId, error); return; } } diff --git a/server/routers/siteResource/listAllSiteResourcesByOrg.ts b/server/routers/siteResource/listAllSiteResourcesByOrg.ts index 7eb54c829..e60363c05 100644 --- a/server/routers/siteResource/listAllSiteResourcesByOrg.ts +++ b/server/routers/siteResource/listAllSiteResourcesByOrg.ts @@ -55,12 +55,12 @@ const listAllSiteResourcesByOrgQuerySchema = z.strictObject({ }), query: z.string().optional(), mode: z - .enum(["host", "cidr", "http", "ssh", "inference"]) + .enum(["host", "cidr", "http", "ssh", "inference", "gateway"]) .optional() .catch(undefined) .openapi({ type: "string", - enum: ["host", "cidr", "http", "ssh", "inference"], + enum: ["host", "cidr", "http", "ssh", "inference", "gateway"], description: "Filter site resources by mode" }), sort_by: z diff --git a/server/routers/ws/types.ts b/server/routers/ws/types.ts index eeb272457..c0b61d0fd 100644 --- a/server/routers/ws/types.ts +++ b/server/routers/ws/types.ts @@ -104,4 +104,9 @@ export type RedisMessage = message: WSMessage; fromNodeId: string; options?: SendMessageOptions; + } + | { + type: "disconnect"; + targetClientId: string; + fromNodeId: string; }; diff --git a/src/app/[orgId]/settings/resources/private/create/page.tsx b/src/app/[orgId]/settings/resources/private/create/page.tsx index 27ac06e3f..790de01cf 100644 --- a/src/app/[orgId]/settings/resources/private/create/page.tsx +++ b/src/app/[orgId]/settings/resources/private/create/page.tsx @@ -37,7 +37,6 @@ import { type PrivateResourceMode } from "@app/lib/privateResourceForm"; import { zodResolver } from "@hookform/resolvers/zod"; -import { tierMatrix } from "@server/lib/billing/tierMatrix"; import type { SiteResource } from "@server/db"; import { GetSiteResponse } from "@server/routers/site/getSite"; import type ResponseT from "@server/types/Response"; @@ -350,6 +349,7 @@ export default function CreatePrivateResourcePage() { placeholder={t( "noneSelected" )} + listClassName="max-h-[346px]" /> diff --git a/src/components/DescribedSelect.tsx b/src/components/DescribedSelect.tsx index c5a1f63d0..3c95e5b3e 100644 --- a/src/components/DescribedSelect.tsx +++ b/src/components/DescribedSelect.tsx @@ -33,6 +33,7 @@ type DescribedSelectProps = { placeholder?: string; disabled?: boolean; className?: string; + listClassName?: string; }; export function DescribedSelect({ @@ -43,7 +44,8 @@ export function DescribedSelect({ emptyMessage, placeholder, disabled, - className + className, + listClassName }: DescribedSelectProps) { const [open, setOpen] = useState(false); const selected = options.find((option) => option.value === value); @@ -75,7 +77,7 @@ export function DescribedSelect({ > - + {emptyMessage} {options.map((option) => ( diff --git a/src/components/DeviceAuthConfirmation.tsx b/src/components/DeviceAuthConfirmation.tsx index c1ea8a0ad..8645b00a3 100644 --- a/src/components/DeviceAuthConfirmation.tsx +++ b/src/components/DeviceAuthConfirmation.tsx @@ -25,6 +25,7 @@ type DeviceAuthMetadata = { type DeviceAuthConfirmationProps = { metadata: DeviceAuthMetadata; + code: string; onConfirm: () => void; onCancel: () => void; loading: boolean; @@ -32,6 +33,7 @@ type DeviceAuthConfirmationProps = { export function DeviceAuthConfirmation({ metadata, + code, onConfirm, onCancel, loading @@ -87,9 +89,18 @@ export function DeviceAuthConfirmation({
+
+

+ {t("deviceCodeConfirmPrompt")} +

+

+ {code} +

+
+
- -
+ +

{metadata.applicationName}

@@ -112,11 +123,11 @@ export function DeviceAuthConfirmation({

- + {t("deviceFullAccess")}
- + {t("deviceOrganizationsAccess")}
diff --git a/src/components/DeviceLoginForm.tsx b/src/components/DeviceLoginForm.tsx index 77ed06449..57b60f3fd 100644 --- a/src/components/DeviceLoginForm.tsx +++ b/src/components/DeviceLoginForm.tsx @@ -268,6 +268,7 @@ export default function DeviceLoginForm({ return ( { // Strip hyphens and convert to uppercase diff --git a/src/components/PaidFeaturesAlert.tsx b/src/components/PaidFeaturesAlert.tsx index f9ce12ea0..3b50e63e2 100644 --- a/src/components/PaidFeaturesAlert.tsx +++ b/src/components/PaidFeaturesAlert.tsx @@ -137,11 +137,16 @@ export function PaidFeaturesAlert({ tiers }: Props) { {requiredTiersLabel ? t.rich("upgradeToTierToUse", { tier: requiredTiersLabel, - tierLink: tierLinkRenderer + tierLink: tierLinkRenderer, + bookADemoLink: bookADemoLinkRenderer }) : isActive - ? t("mustUpgradeToUse") - : t("subscriptionRequiredToUse")} + ? t.rich("mustUpgradeToUse", { + bookADemoLink: bookADemoLinkRenderer + }) + : t.rich("subscriptionRequiredToUse", { + bookADemoLink: bookADemoLinkRenderer + })}
diff --git a/src/components/PrivateResourcesTable.tsx b/src/components/PrivateResourcesTable.tsx index 8c6281dd2..902faf434 100644 --- a/src/components/PrivateResourcesTable.tsx +++ b/src/components/PrivateResourcesTable.tsx @@ -357,6 +357,12 @@ export default function PrivateResourcesTable({ label: t( "editInternalResourceDialogModeInference" ) + }, + { + value: "gateway", + label: t( + "editInternalResourceDialogModeGateway" + ) } ]} selectedValue={searchParams.get("mode") ?? undefined} diff --git a/src/components/resource-launcher/LauncherResourceAccess.tsx b/src/components/resource-launcher/LauncherResourceAccess.tsx index 81a867e17..71106c125 100644 --- a/src/components/resource-launcher/LauncherResourceAccess.tsx +++ b/src/components/resource-launcher/LauncherResourceAccess.tsx @@ -1,6 +1,7 @@ "use client"; import { isSafeUrlForLink } from "@app/lib/launcherResourceAccess"; +import { useTranslations } from "next-intl"; import Link from "next/link"; import { LauncherCopyIcon } from "./LauncherCopyIcon"; @@ -8,6 +9,7 @@ type LauncherResourceAccessProps = { accessDisplay: string; accessCopyValue: string; accessUrl?: string | null; + mode?: string; variant: "grid" | "list"; }; @@ -15,15 +17,23 @@ export function LauncherResourceAccess({ accessDisplay, accessCopyValue, accessUrl, + mode, variant }: LauncherResourceAccessProps) { - if (!accessDisplay) { + const t = useTranslations(); + const isExitNode = mode === "gateway"; + const display = isExitNode + ? t("resourceLauncherAllInternetTraffic") + : accessDisplay; + + if (!display) { return null; } const href = accessUrl ?? undefined; - const canLink = href && isSafeUrlForLink(href); + const canLink = !isExitNode && href && isSafeUrlForLink(href); const copyValue = canLink ? href : accessCopyValue; + const showCopy = !isExitNode && Boolean(copyValue); if (variant === "list") { return ( @@ -35,14 +45,14 @@ export function LauncherResourceAccess({ rel="noopener noreferrer" className="min-w-0 truncate text-sm text-muted-foreground hover:underline max-md:overflow-visible max-md:whitespace-nowrap" > - {accessDisplay} + {display} ) : ( - {accessDisplay} + {display} )} - + {showCopy ? : null}
); } @@ -56,14 +66,14 @@ export function LauncherResourceAccess({ rel="noopener noreferrer" className="min-w-0 flex-1 truncate text-sm text-muted-foreground hover:underline" > - {accessDisplay} + {display} ) : ( - {accessDisplay} + {display} )} - + {showCopy ? : null}
); } diff --git a/src/components/resource-launcher/LauncherResourceCard.tsx b/src/components/resource-launcher/LauncherResourceCard.tsx index ac891e84b..7d07b4e3b 100644 --- a/src/components/resource-launcher/LauncherResourceCard.tsx +++ b/src/components/resource-launcher/LauncherResourceCard.tsx @@ -56,6 +56,7 @@ export function LauncherResourceCard({ accessDisplay={resource.accessDisplay} accessCopyValue={resource.accessCopyValue} accessUrl={resource.accessUrl} + mode={resource.mode} variant="grid" />
diff --git a/src/components/resource-launcher/LauncherResourcePanel.tsx b/src/components/resource-launcher/LauncherResourcePanel.tsx index 68944153f..9290a073e 100644 --- a/src/components/resource-launcher/LauncherResourcePanel.tsx +++ b/src/components/resource-launcher/LauncherResourcePanel.tsx @@ -654,6 +654,7 @@ function PrivateResourceDetails({ const t = useTranslations(); const isInference = resource.mode === "inference"; const isSsh = resource.mode === "ssh"; + const isExitNode = resource.mode === "gateway"; return (
@@ -678,6 +679,18 @@ function PrivateResourceDetails({ + {isExitNode ? ( + + + + {t("resourceLauncherExitNodeTitle")} + + + {t("resourceLauncherExitNodeDescription")} + + + ) : null} + diff --git a/src/components/resource-launcher/LauncherResourceRow.tsx b/src/components/resource-launcher/LauncherResourceRow.tsx index eca882c56..2dbf04258 100644 --- a/src/components/resource-launcher/LauncherResourceRow.tsx +++ b/src/components/resource-launcher/LauncherResourceRow.tsx @@ -51,6 +51,7 @@ export function LauncherResourceRow({ accessDisplay={resource.accessDisplay} accessCopyValue={resource.accessCopyValue} accessUrl={resource.accessUrl} + mode={resource.mode} variant="list" /> diff --git a/src/lib/launcherResourceAccess.ts b/src/lib/launcherResourceAccess.ts index f779bfec6..79798c3b8 100644 --- a/src/lib/launcherResourceAccess.ts +++ b/src/lib/launcherResourceAccess.ts @@ -66,6 +66,16 @@ export function formatPublicResourceAccess( export function formatSiteResourceAccess( resource: SiteResourceAccessInput ): LauncherAccessFields { + // Exit node (gateway) destinations are always 0.0.0.0/0 — not useful to + // show or copy. Callers should render a localized capability label. + if (resource.mode === "gateway") { + return { + accessDisplay: "", + accessCopyValue: "", + accessUrl: null + }; + } + if ( (resource.mode === "http" || resource.mode === "inference") && resource.fullDomain