Compare commits

...

68 Commits

Author SHA1 Message Date
Milo Schwartz 09d5d9082e Merge pull request #3413 from fosrl/dev
1.20.0
2026-07-08 15:30:03 -04:00
Owen Schwartz 8eab3b1ee2 Merge pull request #3409 from fosrl/crowdin_dev
New Crowdin updates
2026-07-08 14:00:41 -04:00
Owen Schwartz 30b46ebb6e New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-07-08 13:59:57 -04:00
Owen Schwartz 91d5f89ab9 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-07-08 13:59:55 -04:00
Owen Schwartz 703050f949 New translations en-us.json (Turkish)
[ci skip]
2026-07-08 13:59:53 -04:00
Owen Schwartz 97af17a993 New translations en-us.json (Russian)
[ci skip]
2026-07-08 13:59:51 -04:00
Owen Schwartz 09a8c457ac New translations en-us.json (Portuguese)
[ci skip]
2026-07-08 13:59:49 -04:00
Owen Schwartz 80317aca83 New translations en-us.json (Polish)
[ci skip]
2026-07-08 13:59:47 -04:00
Owen Schwartz bd10519598 New translations en-us.json (Dutch)
[ci skip]
2026-07-08 13:59:45 -04:00
Owen Schwartz 15c7c47b3c New translations en-us.json (Korean)
[ci skip]
2026-07-08 13:59:43 -04:00
Owen Schwartz 0a7e8c3cc2 New translations en-us.json (Italian)
[ci skip]
2026-07-08 13:59:42 -04:00
Owen Schwartz fc2668fca8 New translations en-us.json (German)
[ci skip]
2026-07-08 13:59:40 -04:00
Owen Schwartz 8f2c20a2bc New translations en-us.json (Danish)
[ci skip]
2026-07-08 13:59:38 -04:00
Owen Schwartz 462ae7ee8c New translations en-us.json (Czech)
[ci skip]
2026-07-08 13:59:36 -04:00
Owen Schwartz 808abd2038 New translations en-us.json (Bulgarian)
[ci skip]
2026-07-08 13:59:34 -04:00
Owen Schwartz 3de25e51ff New translations en-us.json (Spanish)
[ci skip]
2026-07-08 13:59:32 -04:00
Owen Schwartz ef25a9dbe0 New translations en-us.json (French)
[ci skip]
2026-07-08 13:59:30 -04:00
miloschwartz e21c3afb13 fix restart site styling 2026-07-08 12:32:29 -04:00
Milo Schwartz cb7962c25d Merge pull request #3200 from Adityakk9031/#3001
fix: redirect lost after Pangolin auth session timeout (#3001)
2026-07-08 12:30:39 -04:00
miloschwartz f667ee4feb fix api reference 2026-07-08 12:29:23 -04:00
miloschwartz 810119e4ee Merge branch 'dev' into #3001 2026-07-08 12:10:13 -04:00
miloschwartz d082de3d88 command palette tweaks 2026-07-07 21:55:15 -04:00
Milo Schwartz 1e7863ce4f Merge pull request #3342 from Fredkiss3/feat/geoip-country-is-not-rule
feat: add country `is not` rule in resource policies
2026-07-07 21:18:43 -04:00
Milo Schwartz a942871f3d Merge pull request #3263 from Fredkiss3/feat/command-bar
feat: Command Palette for searching accross the dashboard
2026-07-07 21:17:39 -04:00
Milo Schwartz da1205d38e Merge pull request #3407 from fosrl/fix/non-semver-version-error
fix: invalid version causing crashes in the frontend
2026-07-07 21:09:05 -04:00
Fred KISSIE 92775a51ca 🐛 fix invalid semver version causing crashes in frontend 2026-07-08 01:44:28 +02:00
Fred KISSIE ea60aa701e 🐛 fix sitetable page crashing because of invalid version 2026-07-08 01:39:52 +02:00
Fred KISSIE b1f7ee02b0 🐛 fix imports 2026-07-08 00:58:03 +02:00
Fred KISSIE affa3bbb6a Merge branch 'dev' into feat/command-bar 2026-07-08 00:33:28 +02:00
miloschwartz dbb1e7b274 dont show non sso resoruces 2026-07-07 18:10:12 -04:00
miloschwartz b2d1a66279 bump version 2026-07-07 17:08:49 -04:00
miloschwartz 202466792c fix search icon alignment 2026-07-07 16:34:37 -04:00
miloschwartz 4dcf684868 add 1.20.0 migration 2026-07-07 16:04:41 -04:00
miloschwartz 2b8f50af6f add missing api key perms to permissions selector 2026-07-07 15:23:41 -04:00
Owen a8c255ef71 Fix type issue 2026-07-07 15:21:23 -04:00
miloschwartz d9608bd408 improve role required feedback on user 2026-07-07 15:17:29 -04:00
Owen be193731c1 Reorder labels columns 2026-07-07 15:15:00 -04:00
Owen 0c3edc7560 Further remove labels 2026-07-07 15:12:14 -04:00
Owen Schwartz 5cb316f4e9 Merge pull request #3404 from fosrl/dev
Add ? to support undefined
2026-07-07 10:59:56 -04:00
Owen Schwartz 6b6c9cf4d8 Merge pull request #3403 from fosrl/dev
Move jit mode to a config param
2026-07-07 10:41:59 -04:00
Owen Schwartz 05617c63c0 Merge pull request #3402 from fosrl/dev
1.19.4-s.5
2026-07-07 10:21:57 -04:00
Fred KISSIE 11c30b8b27 Merge branch 'dev' into feat/geoip-country-is-not-rule 2026-07-03 22:50:56 +02:00
Owen Schwartz d4c52bbf2f Merge pull request #3396 from fosrl/dev
1.19.4-s.5
2026-07-03 16:15:18 -04:00
Owen Schwartz 87f50bf0cc Merge pull request #3389 from fosrl/dev
1.19.4-s.3
2026-07-03 10:29:15 -04:00
Owen Schwartz 2c66da1b19 Merge pull request #3386 from v1rusnl/main
Upgrade Traefik image to version 3.7
2026-07-03 10:18:44 -04:00
v1rusnl ab19955502 Upgrade Traefik image to version 3.7 2026-07-03 08:22:13 +02:00
v1rusnl 1db9dcec81 Update Traefik image version to v3.7 2026-07-03 08:21:12 +02:00
Owen Schwartz 49c2d3163e Merge pull request #3381 from fosrl/dev
dev
2026-07-02 10:56:39 -04:00
Owen Schwartz 45b9e13a13 Merge pull request #3378 from fosrl/dev
1.19.4-s.1
2026-07-01 21:48:01 -04:00
Fred KISSIE 8d29602929 🏷️ fix types 2026-06-29 18:06:03 +02:00
Fred KISSIE 6c2a8bf6de 💄 Show the selected country in policy access rules country is not rule match 2026-06-27 02:12:09 +02:00
Fred KISSIE 697be01411 Merge branch 'dev' into feat/geoip-country-is-not-rule 2026-06-27 02:05:02 +02:00
Fred KISSIE 1bd6f240cc ♻️ add Country is not rule to verifySession 2026-06-26 23:18:46 +02:00
Fred KISSIE 278375f7be 🚧 More country is not rule 2026-06-25 21:26:13 +02:00
Fred KISSIE 65c383520b 💄 adjust match type column width 2026-06-25 20:49:55 +02:00
Fred KISSIE e54bd25516 🚧 add country is not rule 2026-06-25 20:28:57 +02:00
Fred KISSIE 8f0e17774f 💄 Update command bar 2026-06-22 21:22:55 +02:00
Fred KISSIE 2ab5540085 ♻️ add command palette trigger on the header 2026-06-19 18:08:36 +02:00
Fred KISSIE 4e7328a1cc ♻️ refactor private resource page 2026-06-16 22:29:03 +02:00
Fred KISSIE 6380079239 Command palette with search & actions 2026-06-16 22:28:31 +02:00
Fred KISSIE b6aba13d3a ♻️ rename query, add query 2026-06-16 22:28:04 +02:00
Fred KISSIE c0a9db92ef 💄 update command bar UI 2026-06-16 19:28:22 +02:00
Fred KISSIE 3bc5ab2136 🚧 wip 2026-06-13 00:48:32 +02:00
Fred KISSIE ce77268c82 🚧 wip: block top position of command palette 2026-06-13 00:47:36 +02:00
Fred KISSIE abc0a41d9e ♻️ reorganize command bar items 2026-06-13 00:27:39 +02:00
Fred KISSIE a68b57067c 🚧 wip: Use command bar nav items 2026-06-12 23:51:05 +02:00
Fred KISSIE 444d293a29 🚧 WIP: copy command bar from existing PR 2026-06-11 23:46:11 +02:00
Aditya kumar singh 35d16ac683 fix: redirect lost after Pangolin auth session timeout (#3001) 2026-06-01 15:53:10 +05:30
76 changed files with 4112 additions and 480 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ services:
- 80:80 # Port for traefik because of the network_mode - 80:80 # Port for traefik because of the network_mode
traefik: traefik:
image: traefik:v3.6 image: traefik:v3.7
container_name: traefik container_name: traefik
restart: unless-stopped restart: unless-stopped
network_mode: service:gerbil # Ports appear on the gerbil service network_mode: service:gerbil # Ports appear on the gerbil service
+1 -1
View File
@@ -50,7 +50,7 @@ services:
- 80:80{{end}} - 80:80{{end}}
traefik: traefik:
image: docker.io/traefik:v3.6 image: docker.io/traefik:v3.7
container_name: traefik container_name: traefik
restart: unless-stopped restart: unless-stopped
{{if .InstallGerbil}}network_mode: service:gerbil # Ports appear on the gerbil service{{end}}{{if not .InstallGerbil}} {{if .InstallGerbil}}network_mode: service:gerbil # Ports appear on the gerbil service{{end}}{{if not .InstallGerbil}}
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Получавайте заявки чрез суров TCP/UDP с използване на портен номер. Изисква се сайтовете да се свързват към отдалечен възел.", "resourceRawDescriptionCloud": "Получавайте заявки чрез суров TCP/UDP с използване на портен номер. Изисква се сайтовете да се свързват към отдалечен възел.",
"resourceCreate": "Създайте ресурс", "resourceCreate": "Създайте ресурс",
"resourceCreateDescription": "Следвайте стъпките по-долу, за да създадете нов ресурс", "resourceCreateDescription": "Следвайте стъпките по-долу, за да създадете нов ресурс",
"resourcePublicCreate": "Създаване на публичен ресурс",
"resourcePublicCreateDescription": "Следвайте стъпките по-долу, за да създадете нов обществен ресурс, достъпен чрез уеб браузър",
"resourceCreateGeneralDescription": "Конфигуриране на основните настройки на ресурса, включително име и тип", "resourceCreateGeneralDescription": "Конфигуриране на основните настройки на ресурса, включително име и тип",
"resourceSeeAll": "Вижте всички ресурси", "resourceSeeAll": "Вижте всички ресурси",
"resourceCreateGeneral": "Основни параметри", "resourceCreateGeneral": "Основни параметри",
@@ -613,7 +615,8 @@
"idpNameInternal": "Вътрешен", "idpNameInternal": "Вътрешен",
"emailInvalid": "Невалиден имейл адрес", "emailInvalid": "Невалиден имейл адрес",
"inviteValidityDuration": "Моля, изберете продължителност", "inviteValidityDuration": "Моля, изберете продължителност",
"accessRoleSelectPlease": "Моля, изберете роля", "accessRoleSelectPlease": "Потребителят трябва да принадлежи към поне една роля.",
"accessRoleRequired": "Ролята е задължителна",
"removeOwnAdminRoleConfirmTitle": "Премахване на административния ви достъп?", "removeOwnAdminRoleConfirmTitle": "Премахване на административния ви достъп?",
"removeOwnAdminRoleConfirmDescription": "След записване няма да имате повече администраторски права в тази организация. Друг администратор може да възстанови достъпа, ако е необходимо.", "removeOwnAdminRoleConfirmDescription": "След записване няма да имате повече администраторски права в тази организация. Друг администратор може да възстанови достъпа, ако е необходимо.",
"removeOwnAdminRoleConfirmButton": "Премахнете административния ми достъп", "removeOwnAdminRoleConfirmButton": "Премахнете административния ми достъп",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Базово удостоверяване чрез заглавие", "policyAuthHeaderAuthTitle": "Базово удостоверяване чрез заглавие",
"policyAuthHeaderAuthDescription": "Валидирайте собствено HTTP заглавие и стойност при всяка заявка", "policyAuthHeaderAuthDescription": "Валидирайте собствено HTTP заглавие и стойност при всяка заявка",
"policyAuthHeaderAuthSummary": "Конфигурирано заглавие", "policyAuthHeaderAuthSummary": "Конфигурирано заглавие",
"policyAuthHeaderName": "Име на заглавието", "policyAuthHeaderName": "Потребителско име",
"policyAuthHeaderValue": "Очаквана стойност", "policyAuthHeaderValue": "Парола",
"policyAuthSetPasscode": "Задайте парола", "policyAuthSetPasscode": "Задайте парола",
"policyAuthSetPincode": "Задайте ПИН код", "policyAuthSetPincode": "Задайте ПИН код",
"policyAuthSetEmailWhitelist": "Задайте списък с имейли", "policyAuthSetEmailWhitelist": "Задайте списък с имейли",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Задайте ПИН код на ресурса", "actionSetResourcePincode": "Задайте ПИН код на ресурса",
"actionSetResourceEmailWhitelist": "Задайте списък на одобрените имейл адреси за ресурса", "actionSetResourceEmailWhitelist": "Задайте списък на одобрените имейл адреси за ресурса",
"actionGetResourceEmailWhitelist": "Вземете списък на одобрените имейл адреси за ресурса", "actionGetResourceEmailWhitelist": "Вземете списък на одобрените имейл адреси за ресурса",
"actionGetResourcePolicy": "Получете политика за ресурси",
"actionUpdateResourcePolicy": "Актуализирайте политика за ресурси",
"actionSetResourcePolicyUsers": "Задайте потребители на ресурсна политика",
"actionSetResourcePolicyRoles": "Задайте роли на ресурсна политика",
"actionSetResourcePolicyPassword": "Задайте парола на ресурсна политика",
"actionSetResourcePolicyPincode": "Задайте ПИН код на ресурсна политика",
"actionSetResourcePolicyHeaderAuth": "Задайте автентикация на ресурсна политика",
"actionSetResourcePolicyWhitelist": "Задайте бял списък на имейли за ресурси",
"actionSetResourcePolicyRules": "Задайте правила за ресурси",
"actionCreateTarget": "Създайте цел", "actionCreateTarget": "Създайте цел",
"actionDeleteTarget": "Изтрийте цел", "actionDeleteTarget": "Изтрийте цел",
"actionGetTarget": "Вземете цел", "actionGetTarget": "Вземете цел",
@@ -1507,6 +1519,30 @@
"navbar": "Навигационно меню", "navbar": "Навигационно меню",
"navbarDescription": "Главно навигационно меню за приложението", "navbarDescription": "Главно навигационно меню за приложението",
"navbarDocsLink": "Документация", "navbarDocsLink": "Документация",
"commandPaletteTitle": "Командна палитра",
"commandPaletteDescription": "Търсене на страници, организации, ресурси и действия",
"commandPaletteSearchPlaceholder": "Търсете страници, ресурси, действия...",
"commandPaletteNoResults": "Няма намерени резултати.",
"commandPaletteSearching": "Търсене...",
"commandPaletteNavigation": "Навигация",
"commandPaletteOrganizations": "Организации",
"commandPaletteSites": "Сайтове",
"commandPaletteResources": "Ресурси",
"commandPaletteUsers": "Потребители",
"commandPaletteClients": "Машинни клиенти",
"commandPaletteActions": "Действия",
"commandPaletteCreateSite": "Създаване на сайт",
"commandPaletteCreateProxyResource": "Създаване на обществен ресурс",
"commandPaletteCreatePrivateResource": "Създаване на частен ресурс",
"commandPaletteCreateUser": "Създаване на потребител",
"commandPaletteCreateApiKey": "Създаване на API ключ",
"commandPaletteCreateMachineClient": "Създаване на машинен клиент",
"commandPaletteCreateAlertRule": "Създаване на правила за известия",
"commandPaletteCreateIdentityProvider": "Създаване на доставчик на идентичност",
"commandPaletteToggleTheme": "Смяна на темата",
"commandPaletteChooseOrganization": "Изберете организация",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Не може да се активира 2FA", "otpErrorEnable": "Не може да се активира 2FA",
"otpErrorEnableDescription": "Възникна грешка при активиране на 2FA", "otpErrorEnableDescription": "Възникна грешка при активиране на 2FA",
"otpSetupCheckCode": "Моля, въведете 6-цифрен код", "otpSetupCheckCode": "Моля, въведете 6-цифрен код",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Управление", "sidebarManagement": "Управление",
"sidebarBillingAndLicenses": "Фактуриране & Лицензи", "sidebarBillingAndLicenses": "Фактуриране & Лицензи",
"sidebarLogsAnalytics": "Анализи", "sidebarLogsAnalytics": "Анализи",
"commandSites": "Сайтове",
"commandActionModeInfo": "Напишете \">\" за да отворите режим на действия",
"commandResources": "Ресурси",
"commandProxyResources": "Обществени ресурси",
"commandClientResources": "Частни ресурси",
"commandClients": "Клиенти",
"commandUserDevices": "Потребителски устройства",
"commandMachineClients": "Машинни клиенти",
"commandDomains": "Домейни",
"commandRemoteExitNodes": "Отдалечени възли",
"commandTeam": "Екип",
"commandUsers": "Потребители",
"commandRoles": "Роли",
"commandInvitations": "Покани",
"commandPolicies": "Споделени политики",
"commandResourcePolicies": "Политики за обществени ресурси",
"commandIdentityProviders": "Доставчици на идентичност",
"commandApprovals": "Заявки за потвърждение",
"commandShareableLinks": "Споделени връзки",
"commandOrganization": "Организация",
"commandLogsAndAnalytics": "Логове и Анализи",
"commandLogsAnalytics": "Анализи",
"commandLogsRequest": "HTTP заявки за логове",
"commandLogsAccess": "Логове за достъп",
"commandLogsAction": "Логове на администратори",
"commandLogsConnection": "Логове на връзките",
"commandLogsStreaming": "Течения на събития",
"commandManagement": "Управление",
"commandAlerting": "Предупреждение",
"commandProvisioning": "Осигуряване",
"commandBluePrints": "Планове",
"commandApiKeys": "API ключове",
"commandBillingAndLicenses": "Фактуриране и лицензи",
"commandBilling": "Фактуриране",
"commandEnterpriseLicenses": "Лицензи",
"commandSettings": "Настройки",
"commandLauncher": "Стартиращо устройство",
"commandResourceLauncher": "Стартер на ресурси",
"commandSearchResults": "Резултати от търсенето",
"alertingTitle": "Извеждане на предупреждения", "alertingTitle": "Извеждане на предупреждения",
"alertingDescription": "Определете източници, тригери и действия за уведомления", "alertingDescription": "Определете източници, тригери и действия за уведомления",
"alertingRules": "Правила за предупреждение", "alertingRules": "Правила за предупреждение",
@@ -1915,6 +1990,9 @@
"billingDomains": "Домейни", "billingDomains": "Домейни",
"billingOrganizations": "Организации", "billingOrganizations": "Организации",
"billingRemoteExitNodes": "Дистанционни възли", "billingRemoteExitNodes": "Дистанционни възли",
"billingPublicResources": "Обществени ресурси",
"billingPrivateResources": "Частни ресурси",
"billingMachineClients": "Машинни клиенти",
"billingNoLimitConfigured": "Няма конфигуриран лимит", "billingNoLimitConfigured": "Няма конфигуриран лимит",
"billingEstimatedPeriod": "Очакван период на фактуриране", "billingEstimatedPeriod": "Очакван период на фактуриране",
"billingIncludedUsage": "Включено използване", "billingIncludedUsage": "Включено използване",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Колко потребители можете да използвате", "billingUsersInfo": "Колко потребители можете да използвате",
"billingDomainInfo": "Колко домейни можете да използвате", "billingDomainInfo": "Колко домейни можете да използвате",
"billingRemoteExitNodesInfo": "Колко дистанционни възли можете да използвате", "billingRemoteExitNodesInfo": "Колко дистанционни възли можете да използвате",
"billingPublicResourcesInfo": "Колко публични ресурси можете да използвате",
"billingPrivateResourcesInfo": "Колко частни ресурси можете да използвате",
"billingMachineClientsInfo": "Колко машинни клиенти можете да използвате",
"billingLicenseKeys": "Лицензионни ключове", "billingLicenseKeys": "Лицензионни ключове",
"billingLicenseKeysDescription": "Управлявайте вашите абонаменти за лицензионни ключове", "billingLicenseKeysDescription": "Управлявайте вашите абонаменти за лицензионни ключове",
"billingLicenseSubscription": "Абонамент за лиценз", "billingLicenseSubscription": "Абонамент за лиценз",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Затвори", "createInternalResourceDialogClose": "Затвори",
"createInternalResourceDialogCreateClientResource": "Създаване на частен ресурс", "createInternalResourceDialogCreateClientResource": "Създаване на частен ресурс",
"createInternalResourceDialogCreateClientResourceDescription": "Създайте нов ресурс, който ще бъде достъпен само за клиенти, свързани към организацията", "createInternalResourceDialogCreateClientResourceDescription": "Създайте нов ресурс, който ще бъде достъпен само за клиенти, свързани към организацията",
"privateResourceCreatePageSeeAll": "Вижте всички частни ресурси",
"privateResourceAllowIcmpPing": "Разрешете ICMP Ping",
"privateResourceNetworkAccess": "Достъп до мрежата",
"privateResourceNetworkAccessDescription": "Контролирайте достъпа до TCP/UDP портовете и дали ICMP пинг е разрешен за този ресурс.",
"hostSettings": "Настройки на хоста",
"cidrSettings": "Настройки на CIDR",
"createInternalResourceDialogResourceProperties": "Свойства на ресурса", "createInternalResourceDialogResourceProperties": "Свойства на ресурса",
"createInternalResourceDialogName": "Име", "createInternalResourceDialogName": "Име",
"createInternalResourceDialogSite": "Сайт", "createInternalResourceDialogSite": "Сайт",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Няма налични възли за тази организация. Първо създайте възел, за да използвате местни сайтове.", "noRemoteExitNodesAvailableDescription": "Няма налични възли за тази организация. Първо създайте възел, за да използвате местни сайтове.",
"exitNode": "Изходен възел", "exitNode": "Изходен възел",
"country": "Държава", "country": "Държава",
"countryIsNot": "Държавата не е",
"rulesMatchCountry": "Понастоящем на базата на изходния IP", "rulesMatchCountry": "Понастоящем на базата на изходния IP",
"region": "Регион", "region": "Регион",
"selectRegion": "Изберете регион", "selectRegion": "Изберете регион",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "Необходима е настройка на двуфакторно удостоверяване. Моля, влезте отново чрез {dashboardUrl}/auth/login, за да завършите тази стъпка. След това, върнете се тук.", "twoFactorSetupRequired": "Необходима е настройка на двуфакторно удостоверяване. Моля, влезте отново чрез {dashboardUrl}/auth/login, за да завършите тази стъпка. След това, върнете се тук.",
"additionalSecurityRequired": "Необходима е допълнителна сигурност", "additionalSecurityRequired": "Необходима е допълнителна сигурност",
"organizationRequiresAdditionalSteps": "Тази организация изисква допълнителни стъпки за сигурност, за да получите достъп до ресурсите.", "organizationRequiresAdditionalSteps": "Тази организация изисква допълнителни стъпки за сигурност, за да получите достъп до ресурсите.",
"sessionExpired": "Сесията е изтекла",
"sessionExpiredReauthRequired": "Вашата сесия изтече според политиката за сигурност на вашата организация. Моля, повторете автентификацията, за да продължите.",
"reauthenticate": "Повторно автентифициране",
"completeTheseSteps": "Завършете тези стъпки", "completeTheseSteps": "Завършете тези стъпки",
"enableTwoFactorAuthentication": "Активирайте двуфакторното удостоверяване", "enableTwoFactorAuthentication": "Активирайте двуфакторното удостоверяване",
"completeSecuritySteps": "Завършете стъпките за сигурност", "completeSecuritySteps": "Завършете стъпките за сигурност",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Добавяне на потребители.", "editInternalResourceDialogAddUsers": "Добавяне на потребители.",
"editInternalResourceDialogAddClients": "Добавяне на клиенти.", "editInternalResourceDialogAddClients": "Добавяне на клиенти.",
"editInternalResourceDialogDestinationLabel": "Дестинация.", "editInternalResourceDialogDestinationLabel": "Дестинация.",
"editInternalResourceDialogDestinationDescription": "Посочете адреса дестинация за вътрешния ресурс. Това може да бъде име на хост, IP адрес или CIDR обхват в зависимост от избрания режим. По избор настройте вътрешен DNS алиас за по-лесно идентифициране.", "editInternalResourceDialogDestinationDescription": "Изберете къде работи този ресурс и как клиентите го достигат",
"internalResourceFormMultiSiteRoutingHelp": "Избирайки няколко сайта, се осигурява сигурен път и пренасочване при висока достъпност.", "internalResourceFormMultiSiteRoutingHelp": "Избирайки няколко сайта, се осигурява сигурен път и пренасочване при висока достъпност.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Научете повече", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Научете повече",
"editInternalResourceDialogPortRestrictionsDescription": "Ограничете достъпа до конкретни TCP/UDP портове или позволете/блокирайте всички портове.", "editInternalResourceDialogPortRestrictionsDescription": "Ограничете достъпа до конкретни TCP/UDP портове или позволете/блокирайте всички портове.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Ресурсът е деактивиран", "memberPortalResourceDisabled": "Ресурсът е деактивиран",
"memberPortalShowingResources": "Показва {start}-{end} от {total} ресурси", "memberPortalShowingResources": "Показва {start}-{end} от {total} ресурси",
"resourceLauncherTitle": "Стартер за Ресурси", "resourceLauncherTitle": "Стартер за Ресурси",
"resourceLauncherDescription": "Преглеждайте детайлите на ресурса и ги стартирайте от едно място", "resourceSidebarLauncherTitle": "Стартирано устройство",
"resourceLauncherSearchPlaceholder": "Търсете във всички сайтове...", "resourceLauncherDescription": "Вижте всички налични ресурси и ги стартирайте от един централен център",
"resourceLauncherSearchPlaceholder": "Търсете вашите ресурси...",
"resourceLauncherDefaultView": "По Подразбиране", "resourceLauncherDefaultView": "По Подразбиране",
"resourceLauncherSaveView": "Запазете Изгледа", "resourceLauncherSaveView": "Запазете Изгледа",
"resourceLauncherSaveToCurrentView": "Запазете в Текущ Изглед", "resourceLauncherSaveToCurrentView": "Запазете в Текущ Изглед",
"resourceLauncherSaveDefaultPersonal": "Запази за мен",
"resourceLauncherResetView": "Нулирайте Изгледа", "resourceLauncherResetView": "Нулирайте Изгледа",
"resourceLauncherResetSystemDefault": "Възстанови към системните настройки",
"resourceLauncherSystemDefaultRestored": "Системните настройки са възстановени",
"resourceLauncherSystemDefaultRestoredDescription": "По подразбиране изгледът е възстановен към оригиналните настройки.",
"resourceLauncherSaveAsNewView": "Запазете като Нов Изглед", "resourceLauncherSaveAsNewView": "Запазете като Нов Изглед",
"resourceLauncherSaveAsNewViewDescription": "Дайте име на този изглед, за да запазите текущите си филтри и оформление.", "resourceLauncherSaveAsNewViewDescription": "Дайте име на този изглед, за да запазите текущите си филтри и оформление.",
"resourceLauncherSaveForEveryone": "Запазете за Всеки", "resourceLauncherSaveForEveryone": "Запазете за Всеки",
"resourceLauncherSaveForEveryoneDescription": "Споделете този изглед с всички членове на организацията. Когато е изключено, изгледът е видим само за вас.", "resourceLauncherSaveForEveryoneDescription": "Споделете този изглед с всички членове на организацията. Когато е изключено, изгледът е видим само за вас.",
"resourceLauncherMakePersonal": "Направи Личен", "resourceLauncherMakePersonal": "Направи Личен",
"resourceLauncherFilter": "Филтър", "resourceLauncherFilter": "Филтър",
"resourceLauncherFilterWithCount": "Филтър, {count} приложени",
"resourceLauncherSort": "Сортиране", "resourceLauncherSort": "Сортиране",
"resourceLauncherSortAscending": "Сортиране възходящо", "resourceLauncherSortAscending": "Сортиране възходящо",
"resourceLauncherSortDescending": "Сортиране низходящо", "resourceLauncherSortDescending": "Сортиране низходящо",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Групирай По", "resourceLauncherGroupBy": "Групирай По",
"resourceLauncherGroupBySite": "Сайт", "resourceLauncherGroupBySite": "Сайт",
"resourceLauncherGroupByLabel": "Етикет", "resourceLauncherGroupByLabel": "Етикет",
"resourceLauncherGroupByNone": "Няма",
"resourceLauncherLayout": "Оформление", "resourceLauncherLayout": "Оформление",
"resourceLauncherLayoutGrid": "Мрежа", "resourceLauncherLayoutGrid": "Мрежа",
"resourceLauncherLayoutList": "Списък", "resourceLauncherLayoutList": "Списък",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Показване на Тагове на Сайт", "resourceLauncherShowSiteTags": "Показване на Тагове на Сайт",
"resourceLauncherShowRecents": "Показване на Последни", "resourceLauncherShowRecents": "Показване на Последни",
"resourceLauncherDeleteView": "Изтриване на Изглед", "resourceLauncherDeleteView": "Изтриване на Изглед",
"resourceLauncherDeleteViewTitle": "Изтриване на изглед",
"resourceLauncherDeleteViewQuestion": "Сигурни ли сте, че искате да изтриете този изглед на стартиращото устройство?",
"resourceLauncherDeleteViewConfirm": "Изтриване на изглед",
"resourceLauncherViewAsAdmin": "Вижте като Админ", "resourceLauncherViewAsAdmin": "Вижте като Админ",
"resourceLauncherResourceDetailsDescription": "Вижте детайлите за този ресурс.", "resourceLauncherResourceDetailsDescription": "Информация и статус на връзката за този ресурс.",
"resourceLauncherResourceDetails": "Детайли за ресурса",
"resourceLauncherAuthMethodsDescription": "Методи на автентикация, активирани за този ресурс.",
"resourceLauncherPrivateClientRequired": "Свържете се с клиент на вашето устройство, за да получите частен достъп до този ресурс.",
"resourceLauncherPrivateClientRequiredTitle": "Изисква се връзка с клиента",
"resourceLauncherDownloadClient": "Изтеглете клиент",
"resourceLauncherFailedToLoadDetails": "Не може да се зареди информацията за ресурса. Може вече да нямате достъп до този ресурс.",
"resourceLauncherNoPortRestrictions": "Няма ограничения за порт",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Без Етикет", "resourceLauncherUnlabeled": "Без Етикет",
"resourceLauncherNoSite": "Няма Сайт", "resourceLauncherNoSite": "Няма Сайт",
"resourceLauncherNoResourcesInGroup": "Няма ресурси в тази група", "resourceLauncherNoResourcesInGroup": "Няма ресурси в тази група",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Няма Намерени Ресурси", "resourceLauncherEmptyStateNoResultsTitle": "Няма Намерени Ресурси",
"resourceLauncherEmptyStateNoResultsDescription": "Никакви ресурси не съвпадат с текущото ви търсене или филтри. Опитайте да ги коригирате, за да намерите това, което търсите.", "resourceLauncherEmptyStateNoResultsDescription": "Никакви ресурси не съвпадат с текущото ви търсене или филтри. Опитайте да ги коригирате, за да намерите това, което търсите.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Никакви ресурси не съвпадат с \"{query}\". Опитайте да коригирате търсенето или да изтриете филтри, за да видите всички ресурси.", "resourceLauncherEmptyStateNoResultsWithQuery": "Никакви ресурси не съвпадат с \"{query}\". Опитайте да коригирате търсенето или да изтриете филтри, за да видите всички ресурси.",
"resourceLauncherSearchFirstTitle": "Търсете или филтрирайте за да разгледате",
"resourceLauncherSearchFirstDescription": "Имате достъп до много ресурси. Използвайте търсене или филтър по сайт или етикет, за да намерите това, от което се нуждаете.",
"resourceLauncherSiteGroupingDisabled": "Групирането по сайт не е налично при този мащаб. Филтрирайте по сайт, за да групирате по-малък набор.",
"resourceLauncherLabelGroupingDisabled": "Групирането по етикет не е налично при този мащаб.",
"resourceLauncherCompactModeHint": "Показване на опростен списък за по-бързо разглеждане. Използвайте търсене или филтри за да стесните резултатите.",
"resourceLauncherCompactGroupingHint": "Прилагайте филтри за сайт или етикет, за да активирате групирането.",
"resourceLauncherCopiedToClipboard": "Копирано в клипборда", "resourceLauncherCopiedToClipboard": "Копирано в клипборда",
"resourceLauncherCopiedAccessDescription": "Достъпът до ресурса е копиран на вашия клипборд.", "resourceLauncherCopiedAccessDescription": "Достъпът до ресурса е копиран на вашия клипборд.",
"resourceLauncherViewNamePlaceholder": "Име на Изгледа", "resourceLauncherViewNamePlaceholder": "Име на Изгледа",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Proxy požadavky na syrové TCP/UDP pomocí čísla portu. Vyžaduje připojení stránek ke vzdálenému uzlu.", "resourceRawDescriptionCloud": "Proxy požadavky na syrové TCP/UDP pomocí čísla portu. Vyžaduje připojení stránek ke vzdálenému uzlu.",
"resourceCreate": "Vytvořit zdroj", "resourceCreate": "Vytvořit zdroj",
"resourceCreateDescription": "Postupujte podle níže uvedených kroků, abyste vytvořili a připojili nový zdroj", "resourceCreateDescription": "Postupujte podle níže uvedených kroků, abyste vytvořili a připojili nový zdroj",
"resourcePublicCreate": "Vytvořit veřejný zdroj",
"resourcePublicCreateDescription": "Postupujte podle kroků níže pro vytvoření nového veřejného zdroje přístupného přes webový prohlížeč",
"resourceCreateGeneralDescription": "Konfigurace základních nastavení zdroje včetně názvu a typu", "resourceCreateGeneralDescription": "Konfigurace základních nastavení zdroje včetně názvu a typu",
"resourceSeeAll": "Zobrazit všechny zdroje", "resourceSeeAll": "Zobrazit všechny zdroje",
"resourceCreateGeneral": "Obecné", "resourceCreateGeneral": "Obecné",
@@ -613,7 +615,8 @@
"idpNameInternal": "Interní", "idpNameInternal": "Interní",
"emailInvalid": "Neplatná e-mailová adresa", "emailInvalid": "Neplatná e-mailová adresa",
"inviteValidityDuration": "Zvolte prosím dobu trvání", "inviteValidityDuration": "Zvolte prosím dobu trvání",
"accessRoleSelectPlease": "Vyberte prosím roli", "accessRoleSelectPlease": "Uživatel musí patřit minimálně do jedné role.",
"accessRoleRequired": "Role je vyžadována",
"removeOwnAdminRoleConfirmTitle": "Odebrat přístup správce?", "removeOwnAdminRoleConfirmTitle": "Odebrat přístup správce?",
"removeOwnAdminRoleConfirmDescription": "Po uložení již nebudete mít oprávnění správce v této organizaci. Další administrátor vám může přístup obnovit, pokud bude potřeba.", "removeOwnAdminRoleConfirmDescription": "Po uložení již nebudete mít oprávnění správce v této organizaci. Další administrátor vám může přístup obnovit, pokud bude potřeba.",
"removeOwnAdminRoleConfirmButton": "Odebrat mé administrátorské oprávnění", "removeOwnAdminRoleConfirmButton": "Odebrat mé administrátorské oprávnění",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Základní Ověření Záhlaví", "policyAuthHeaderAuthTitle": "Základní Ověření Záhlaví",
"policyAuthHeaderAuthDescription": "Ověřit vlastní HTTP hlavičku názvu a hodnoty při každém požadavku", "policyAuthHeaderAuthDescription": "Ověřit vlastní HTTP hlavičku názvu a hodnoty při každém požadavku",
"policyAuthHeaderAuthSummary": "Nastaveno hlavička", "policyAuthHeaderAuthSummary": "Nastaveno hlavička",
"policyAuthHeaderName": "Název hlavičky", "policyAuthHeaderName": "Uživatelské jméno",
"policyAuthHeaderValue": "Očekávaná hodnota", "policyAuthHeaderValue": "Heslo",
"policyAuthSetPasscode": "Nastavit přístupový kód", "policyAuthSetPasscode": "Nastavit přístupový kód",
"policyAuthSetPincode": "Nastavit PIN kód", "policyAuthSetPincode": "Nastavit PIN kód",
"policyAuthSetEmailWhitelist": "Nastavit e-mailový whitelist", "policyAuthSetEmailWhitelist": "Nastavit e-mailový whitelist",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Nastavit zdrojový kód", "actionSetResourcePincode": "Nastavit zdrojový kód",
"actionSetResourceEmailWhitelist": "Nastavit seznam povolených dokumentů", "actionSetResourceEmailWhitelist": "Nastavit seznam povolených dokumentů",
"actionGetResourceEmailWhitelist": "Získat seznam povolených dokumentů", "actionGetResourceEmailWhitelist": "Získat seznam povolených dokumentů",
"actionGetResourcePolicy": "Získat zásady zdroje",
"actionUpdateResourcePolicy": "Aktualizovat zásady zdroje",
"actionSetResourcePolicyUsers": "Nastavte uživatele pro zásady zdroje",
"actionSetResourcePolicyRoles": "Nastavte role pro zásady zdroje",
"actionSetResourcePolicyPassword": "Nastavte heslo pro zásady zdroje",
"actionSetResourcePolicyPincode": "Nastavit PIN kód Zásady zdroje",
"actionSetResourcePolicyHeaderAuth": "Nastavit autentizaci hlavičky zásady zdroje",
"actionSetResourcePolicyWhitelist": "Nastavit seznam povolených e-mailů v zásadě zdroje",
"actionSetResourcePolicyRules": "Nastavit pravidla zásady zdroje",
"actionCreateTarget": "Create Target", "actionCreateTarget": "Create Target",
"actionDeleteTarget": "Odstranit cíl", "actionDeleteTarget": "Odstranit cíl",
"actionGetTarget": "Získat cíl", "actionGetTarget": "Získat cíl",
@@ -1507,6 +1519,30 @@
"navbar": "Navigation Menu", "navbar": "Navigation Menu",
"navbarDescription": "Hlavní navigační menu aplikace", "navbarDescription": "Hlavní navigační menu aplikace",
"navbarDocsLink": "Dokumentace", "navbarDocsLink": "Dokumentace",
"commandPaletteTitle": "Paleta příkazů",
"commandPaletteDescription": "Vyhledávejte stránky, organizace, zdroje a akce",
"commandPaletteSearchPlaceholder": "Hledat stránky, zdroje, akce...",
"commandPaletteNoResults": "Nebyly nalezeny žádné výsledky.",
"commandPaletteSearching": "Hledání...",
"commandPaletteNavigation": "Navigace",
"commandPaletteOrganizations": "Organizace",
"commandPaletteSites": "Lokality",
"commandPaletteResources": "Zdroje",
"commandPaletteUsers": "Uživatelé",
"commandPaletteClients": "Strojoví klienti",
"commandPaletteActions": "Akce",
"commandPaletteCreateSite": "Vytvořit lokalitu",
"commandPaletteCreateProxyResource": "Vytvořit veřejný zdroj",
"commandPaletteCreatePrivateResource": "Vytvořit privátní zdroj",
"commandPaletteCreateUser": "Vytvořit uživatele",
"commandPaletteCreateApiKey": "Vytvořit API klíč",
"commandPaletteCreateMachineClient": "Vytvořit strojového klienta",
"commandPaletteCreateAlertRule": "Vytvořit pravidlo upozornění",
"commandPaletteCreateIdentityProvider": "Vytvořit poskytovatele identity",
"commandPaletteToggleTheme": "Přepnout téma",
"commandPaletteChooseOrganization": "Vybrat organizaci",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "2FA nelze povolit", "otpErrorEnable": "2FA nelze povolit",
"otpErrorEnableDescription": "Došlo k chybě při povolování 2FA", "otpErrorEnableDescription": "Došlo k chybě při povolování 2FA",
"otpSetupCheckCode": "Zadejte 6místný kód", "otpSetupCheckCode": "Zadejte 6místný kód",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Správa", "sidebarManagement": "Správa",
"sidebarBillingAndLicenses": "Fakturace a licence", "sidebarBillingAndLicenses": "Fakturace a licence",
"sidebarLogsAnalytics": "Analytici", "sidebarLogsAnalytics": "Analytici",
"commandSites": "Lokality",
"commandActionModeInfo": "Napište \">\" pro otevření režimu akcí",
"commandResources": "Zdroje",
"commandProxyResources": "Veřejné zdroje",
"commandClientResources": "Privátní zdroje",
"commandClients": "Klienti",
"commandUserDevices": "Uživatelská zařízení",
"commandMachineClients": "Strojoví klienti",
"commandDomains": "Domény",
"commandRemoteExitNodes": "Vzdálené uzly",
"commandTeam": "Tým",
"commandUsers": "Uživatelé",
"commandRoles": "Role",
"commandInvitations": "Pozvánky",
"commandPolicies": "Sdílené zásady",
"commandResourcePolicies": "Zásady veřejných zdrojů",
"commandIdentityProviders": "Poskytovatelé identity",
"commandApprovals": "Žádosti o schválení",
"commandShareableLinks": "Sdílené odkazy",
"commandOrganization": "Organizace",
"commandLogsAndAnalytics": "Protokoly a analytika",
"commandLogsAnalytics": "Analytika",
"commandLogsRequest": "Protokoly požadavků na HTTP",
"commandLogsAccess": "Protokoly autentizace",
"commandLogsAction": "Protokoly akcí administrátora",
"commandLogsConnection": "Protokoly připojení",
"commandLogsStreaming": "Streamování událostí",
"commandManagement": "Řízení",
"commandAlerting": "Upozorňování",
"commandProvisioning": "Zajištění",
"commandBluePrints": "Blueprinty",
"commandApiKeys": "API klíče",
"commandBillingAndLicenses": "Účty a licence",
"commandBilling": "Účty",
"commandEnterpriseLicenses": "Licence",
"commandSettings": "Nastavení",
"commandLauncher": "Spouštěč",
"commandResourceLauncher": "Spouštěč zdrojů",
"commandSearchResults": "Výsledky hledání",
"alertingTitle": "Upozornění", "alertingTitle": "Upozornění",
"alertingDescription": "Definujte zdroje, spouštěče a akce pro oznámení", "alertingDescription": "Definujte zdroje, spouštěče a akce pro oznámení",
"alertingRules": "Pravidla upozornění", "alertingRules": "Pravidla upozornění",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domény", "billingDomains": "Domény",
"billingOrganizations": "Tělo", "billingOrganizations": "Tělo",
"billingRemoteExitNodes": "Vzdálené uzly", "billingRemoteExitNodes": "Vzdálené uzly",
"billingPublicResources": "Veřejné zdroje",
"billingPrivateResources": "Soukromé zdroje",
"billingMachineClients": "Strojní klienti",
"billingNoLimitConfigured": "Žádný limit nenastaven", "billingNoLimitConfigured": "Žádný limit nenastaven",
"billingEstimatedPeriod": "Odhadované období fakturace", "billingEstimatedPeriod": "Odhadované období fakturace",
"billingIncludedUsage": "Zahrnuto využití", "billingIncludedUsage": "Zahrnuto využití",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Kolik uživatelů můžete použít", "billingUsersInfo": "Kolik uživatelů můžete použít",
"billingDomainInfo": "Kolik domén můžete použít", "billingDomainInfo": "Kolik domén můžete použít",
"billingRemoteExitNodesInfo": "Kolik vzdálených uzlů můžete použít", "billingRemoteExitNodesInfo": "Kolik vzdálených uzlů můžete použít",
"billingPublicResourcesInfo": "Kolik veřejných zdrojů můžete využít",
"billingPrivateResourcesInfo": "Kolik soukromých zdrojů můžete využít",
"billingMachineClientsInfo": "Kolik strojních klientů můžete využít",
"billingLicenseKeys": "Licenční klíče", "billingLicenseKeys": "Licenční klíče",
"billingLicenseKeysDescription": "Spravovat předplatné licenčního klíče", "billingLicenseKeysDescription": "Spravovat předplatné licenčního klíče",
"billingLicenseSubscription": "Předplatné licence", "billingLicenseSubscription": "Předplatné licence",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Zavřít", "createInternalResourceDialogClose": "Zavřít",
"createInternalResourceDialogCreateClientResource": "Vytvořit soukromý zdroj", "createInternalResourceDialogCreateClientResource": "Vytvořit soukromý zdroj",
"createInternalResourceDialogCreateClientResourceDescription": "Vytvořte nový zdroj, který bude přístupný pouze klientům připojeným k organizaci", "createInternalResourceDialogCreateClientResourceDescription": "Vytvořte nový zdroj, který bude přístupný pouze klientům připojeným k organizaci",
"privateResourceCreatePageSeeAll": "Zobrazit všechny privátní zdroje",
"privateResourceAllowIcmpPing": "Povolit ICMP ping",
"privateResourceNetworkAccess": "Přístup k síti",
"privateResourceNetworkAccessDescription": "Ovládejte přístup k TCP/UDP portům a zda je pro tento zdroj povolen ICMP ping.",
"hostSettings": "Nastavení hostitele",
"cidrSettings": "Nastavení CIDR",
"createInternalResourceDialogResourceProperties": "Vlastnosti zdroje", "createInternalResourceDialogResourceProperties": "Vlastnosti zdroje",
"createInternalResourceDialogName": "Jméno", "createInternalResourceDialogName": "Jméno",
"createInternalResourceDialogSite": "Lokalita", "createInternalResourceDialogSite": "Lokalita",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Pro tuto organizaci nejsou k dispozici žádné uzly. Nejprve vytvořte uzel pro použití lokálních stránek.", "noRemoteExitNodesAvailableDescription": "Pro tuto organizaci nejsou k dispozici žádné uzly. Nejprve vytvořte uzel pro použití lokálních stránek.",
"exitNode": "Ukončit uzel", "exitNode": "Ukončit uzel",
"country": "L 343, 22.12.2009, s. 1).", "country": "L 343, 22.12.2009, s. 1).",
"countryIsNot": "Země není",
"rulesMatchCountry": "Aktuálně založené na zdrojové IP adrese", "rulesMatchCountry": "Aktuálně založené na zdrojové IP adrese",
"region": "Oblasti", "region": "Oblasti",
"selectRegion": "Vyberte region", "selectRegion": "Vyberte region",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "Je vyžadováno nastavení dvoufaktorového ověřování. Přihlaste se znovu pomocí {dashboardUrl}/autentizace/přihlášení dokončí tento krok. Poté se vraťte zde.", "twoFactorSetupRequired": "Je vyžadováno nastavení dvoufaktorového ověřování. Přihlaste se znovu pomocí {dashboardUrl}/autentizace/přihlášení dokončí tento krok. Poté se vraťte zde.",
"additionalSecurityRequired": "Vyžadováno další zabezpečení", "additionalSecurityRequired": "Vyžadováno další zabezpečení",
"organizationRequiresAdditionalSteps": "Tato organizace vyžaduje další bezpečnostní kroky, než budete moci přistupovat ke zdrojům.", "organizationRequiresAdditionalSteps": "Tato organizace vyžaduje další bezpečnostní kroky, než budete moci přistupovat ke zdrojům.",
"sessionExpired": "Session vypršela",
"sessionExpiredReauthRequired": "Vaše session vypršela podle bezpečnostní politiky organizace. Prosím, znovu se přihlaste, abyste mohli pokračovat.",
"reauthenticate": "Znovu autentizovat",
"completeTheseSteps": "Dokončete tyto kroky", "completeTheseSteps": "Dokončete tyto kroky",
"enableTwoFactorAuthentication": "Povolit dvoufaktorové ověření", "enableTwoFactorAuthentication": "Povolit dvoufaktorové ověření",
"completeSecuritySteps": "Dokončit bezpečnostní kroky", "completeSecuritySteps": "Dokončit bezpečnostní kroky",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Přidat uživatele", "editInternalResourceDialogAddUsers": "Přidat uživatele",
"editInternalResourceDialogAddClients": "Přidat klienty", "editInternalResourceDialogAddClients": "Přidat klienty",
"editInternalResourceDialogDestinationLabel": "Cíl", "editInternalResourceDialogDestinationLabel": "Cíl",
"editInternalResourceDialogDestinationDescription": "Určete cílovou adresu pro interní prostředek. Může se jednat o hostname, IP adresu, nebo rozsah CIDR v závislosti na vybraném režimu. Volitelně nastavte interní DNS alias pro snazší identifikaci.", "editInternalResourceDialogDestinationDescription": "Vyberte, kde bude tento zdroj spuštěn a jak ho klienti dosáhnou",
"internalResourceFormMultiSiteRoutingHelp": "Výběrem více webů se povolí odolné směrování a přepojení pro vysokou dostupnost.", "internalResourceFormMultiSiteRoutingHelp": "Výběrem více webů se povolí odolné směrování a přepojení pro vysokou dostupnost.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Zjistit více", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Zjistit více",
"editInternalResourceDialogPortRestrictionsDescription": "Omezte přístup na specifické TCP/UDP porty nebo povolte/blokujte všechny porty.", "editInternalResourceDialogPortRestrictionsDescription": "Omezte přístup na specifické TCP/UDP porty nebo povolte/blokujte všechny porty.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Zdroj je zakázán", "memberPortalResourceDisabled": "Zdroj je zakázán",
"memberPortalShowingResources": "Zobrazeny {start}-{end} z {total} zdrojů", "memberPortalShowingResources": "Zobrazeny {start}-{end} z {total} zdrojů",
"resourceLauncherTitle": "Spouštěč zdrojů", "resourceLauncherTitle": "Spouštěč zdrojů",
"resourceLauncherDescription": "Podívejte se na podrobnosti o zdrojích a spusťte je z jednoho místa", "resourceSidebarLauncherTitle": "Spouštěč",
"resourceLauncherSearchPlaceholder": "Hledat všechny lokality...", "resourceLauncherDescription": "Prohlédněte si všechny dostupné zdroje a spusťte je z jednoho centrálního hubu",
"resourceLauncherSearchPlaceholder": "Prohledejte vaše zdroje...",
"resourceLauncherDefaultView": "Výchozí", "resourceLauncherDefaultView": "Výchozí",
"resourceLauncherSaveView": "Uložit pohled", "resourceLauncherSaveView": "Uložit pohled",
"resourceLauncherSaveToCurrentView": "Uložit do aktuálního pohledu", "resourceLauncherSaveToCurrentView": "Uložit do aktuálního pohledu",
"resourceLauncherSaveDefaultPersonal": "Uložit pro mě",
"resourceLauncherResetView": "Obnovit pohled", "resourceLauncherResetView": "Obnovit pohled",
"resourceLauncherResetSystemDefault": "Obnovit na systémové nastavení",
"resourceLauncherSystemDefaultRestored": "Systémové nastavení bylo obnoveno",
"resourceLauncherSystemDefaultRestoredDescription": "Výchozí zobrazení bylo resetováno na původní nastavení.",
"resourceLauncherSaveAsNewView": "Uložit jako nový pohled", "resourceLauncherSaveAsNewView": "Uložit jako nový pohled",
"resourceLauncherSaveAsNewViewDescription": "Uložte tento pohled k uloženému filtrování a rozvržení.", "resourceLauncherSaveAsNewViewDescription": "Uložte tento pohled k uloženému filtrování a rozvržení.",
"resourceLauncherSaveForEveryone": "Uložit pro všechny", "resourceLauncherSaveForEveryone": "Uložit pro všechny",
"resourceLauncherSaveForEveryoneDescription": "Sdílejte tento pohled se všemi členy organizace. Pokud není zaškrtnuto, pohled je viditelný pouze vám.", "resourceLauncherSaveForEveryoneDescription": "Sdílejte tento pohled se všemi členy organizace. Pokud není zaškrtnuto, pohled je viditelný pouze vám.",
"resourceLauncherMakePersonal": "Udělat osobní", "resourceLauncherMakePersonal": "Udělat osobní",
"resourceLauncherFilter": "Filtr", "resourceLauncherFilter": "Filtr",
"resourceLauncherFilterWithCount": "Filtr, {count} aplikováno",
"resourceLauncherSort": "Řadit", "resourceLauncherSort": "Řadit",
"resourceLauncherSortAscending": "Řadit vzestupně", "resourceLauncherSortAscending": "Řadit vzestupně",
"resourceLauncherSortDescending": "Řadit sestupně", "resourceLauncherSortDescending": "Řadit sestupně",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Seskupit podle", "resourceLauncherGroupBy": "Seskupit podle",
"resourceLauncherGroupBySite": "Lokalita", "resourceLauncherGroupBySite": "Lokalita",
"resourceLauncherGroupByLabel": "Název", "resourceLauncherGroupByLabel": "Název",
"resourceLauncherGroupByNone": "Žádný",
"resourceLauncherLayout": "Rozvržení", "resourceLauncherLayout": "Rozvržení",
"resourceLauncherLayoutGrid": "Mřížka", "resourceLauncherLayoutGrid": "Mřížka",
"resourceLauncherLayoutList": "Seznam", "resourceLauncherLayoutList": "Seznam",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Zobrazit značky lokality", "resourceLauncherShowSiteTags": "Zobrazit značky lokality",
"resourceLauncherShowRecents": "Zobrazit nedávné", "resourceLauncherShowRecents": "Zobrazit nedávné",
"resourceLauncherDeleteView": "Smazat pohled", "resourceLauncherDeleteView": "Smazat pohled",
"resourceLauncherDeleteViewTitle": "Odstranění zobrazení",
"resourceLauncherDeleteViewQuestion": "Opravdu chcete smazat toto zobrazení launcheru?",
"resourceLauncherDeleteViewConfirm": "Odstranění zobrazení",
"resourceLauncherViewAsAdmin": "Zobrazit jako administrátor", "resourceLauncherViewAsAdmin": "Zobrazit jako administrátor",
"resourceLauncherResourceDetailsDescription": "Podívejte se na podrobnosti o tomto zdroji.", "resourceLauncherResourceDetailsDescription": "Informace o připojení a stavu pro tento zdroj.",
"resourceLauncherResourceDetails": "Podrobnosti o zdroji",
"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",
"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",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Bez nálepky", "resourceLauncherUnlabeled": "Bez nálepky",
"resourceLauncherNoSite": "Žádná lokalita", "resourceLauncherNoSite": "Žádná lokalita",
"resourceLauncherNoResourcesInGroup": "V této skupině nejsou žádné zdroje", "resourceLauncherNoResourcesInGroup": "V této skupině nejsou žádné zdroje",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Nebyl nalezen žádný zdroj", "resourceLauncherEmptyStateNoResultsTitle": "Nebyl nalezen žádný zdroj",
"resourceLauncherEmptyStateNoResultsDescription": "Žádný zdroj neodpovídá vašemu aktuálnímu vyhledávání nebo filtrům. Zkuste je upravit, abyste našli to, co hledáte.", "resourceLauncherEmptyStateNoResultsDescription": "Žádný zdroj neodpovídá vašemu aktuálnímu vyhledávání nebo filtrům. Zkuste je upravit, abyste našli to, co hledáte.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Žádné zdroje neodpovídají \"{query}\". Zkuste upravit vyhledávání nebo vymazat filtry, abyste viděli všechny zdroje.", "resourceLauncherEmptyStateNoResultsWithQuery": "Žádné zdroje neodpovídají \"{query}\". Zkuste upravit vyhledávání nebo vymazat filtry, abyste viděli všechny zdroje.",
"resourceLauncherSearchFirstTitle": "Hledat nebo filtrovat k procházení",
"resourceLauncherSearchFirstDescription": "Máte přístup k mnoha zdrojům. Použijte vyhledávání nebo filtr podle místa či štítku k nalezení toho, co potřebujete.",
"resourceLauncherSiteGroupingDisabled": "Na této úrovni není možné seskupení podle místa. Pro skupinování menší sady se použije filtr podle místa.",
"resourceLauncherLabelGroupingDisabled": "Na této úrovni není možné seskupení podle štítku.",
"resourceLauncherCompactModeHint": "Zobrazování zjednodušeného seznamu pro rychlejší procházení. K upřesnění výsledků použijte vyhledávání nebo filtry.",
"resourceLauncherCompactGroupingHint": "Aplikujte filtry místa nebo štítku, abyste povolili seskupování.",
"resourceLauncherCopiedToClipboard": "Zkopírováno do schránky", "resourceLauncherCopiedToClipboard": "Zkopírováno do schránky",
"resourceLauncherCopiedAccessDescription": "Přístup ke zdroji byl zkopírován do vaší schránky.", "resourceLauncherCopiedAccessDescription": "Přístup ke zdroji byl zkopírován do vaší schránky.",
"resourceLauncherViewNamePlaceholder": "Název pohledu", "resourceLauncherViewNamePlaceholder": "Název pohledu",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Proxyforespørgsler over rå TCP/UDP ved hjælp af et portnummer. Kræver, at sites opretter forbindelse til en ekstern node.", "resourceRawDescriptionCloud": "Proxyforespørgsler over rå TCP/UDP ved hjælp af et portnummer. Kræver, at sites opretter forbindelse til en ekstern node.",
"resourceCreate": "Opret ressource", "resourceCreate": "Opret ressource",
"resourceCreateDescription": "Følg trinene nedenfor for at oprette en ny ressource", "resourceCreateDescription": "Følg trinene nedenfor for at oprette en ny ressource",
"resourcePublicCreate": "Opret offentlig ressource",
"resourcePublicCreateDescription": "Følg nedenstående trin for at oprette en ny offentlig ressource, der er tilgængelig via en webbrowser",
"resourceCreateGeneralDescription": "Konfigurer de grunnleggende ressourceindstillingerne inklusive navnet og typen", "resourceCreateGeneralDescription": "Konfigurer de grunnleggende ressourceindstillingerne inklusive navnet og typen",
"resourceSeeAll": "Se alle ressourcer", "resourceSeeAll": "Se alle ressourcer",
"resourceCreateGeneral": "Generelt", "resourceCreateGeneral": "Generelt",
@@ -613,7 +615,8 @@
"idpNameInternal": "Intern", "idpNameInternal": "Intern",
"emailInvalid": "Ugyldig e-mailadresse", "emailInvalid": "Ugyldig e-mailadresse",
"inviteValidityDuration": "Vælg venligst en varighed", "inviteValidityDuration": "Vælg venligst en varighed",
"accessRoleSelectPlease": "Vælg venligst en rolle", "accessRoleSelectPlease": "En bruger skal tilhøre mindst én rolle.",
"accessRoleRequired": "Rolle påkrævet",
"removeOwnAdminRoleConfirmTitle": "Fjern din administratoradgang?", "removeOwnAdminRoleConfirmTitle": "Fjern din administratoradgang?",
"removeOwnAdminRoleConfirmDescription": "Du vil ikke længere have administratorrettigheder i denne organisation efter gemning. En anden administrator kan gendanne adgang hvis nødvendig.", "removeOwnAdminRoleConfirmDescription": "Du vil ikke længere have administratorrettigheder i denne organisation efter gemning. En anden administrator kan gendanne adgang hvis nødvendig.",
"removeOwnAdminRoleConfirmButton": "Fjern min administratoradgang", "removeOwnAdminRoleConfirmButton": "Fjern min administratoradgang",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Grunnleggende Header Autentificering", "policyAuthHeaderAuthTitle": "Grunnleggende Header Autentificering",
"policyAuthHeaderAuthDescription": "Bekræft et tilpasset HTTP-headernavn og værdi ved hver forespørgsel", "policyAuthHeaderAuthDescription": "Bekræft et tilpasset HTTP-headernavn og værdi ved hver forespørgsel",
"policyAuthHeaderAuthSummary": "Header konfigureret", "policyAuthHeaderAuthSummary": "Header konfigureret",
"policyAuthHeaderName": "Headernavn", "policyAuthHeaderName": "Brugernavn",
"policyAuthHeaderValue": "Forventet værdi", "policyAuthHeaderValue": "Adgangskode",
"policyAuthSetPasscode": "Angiv adgangskode", "policyAuthSetPasscode": "Angiv adgangskode",
"policyAuthSetPincode": "Sett PIN-kode", "policyAuthSetPincode": "Sett PIN-kode",
"policyAuthSetEmailWhitelist": "Angiv e-mail hviteliste", "policyAuthSetEmailWhitelist": "Angiv e-mail hviteliste",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Angiv ressource-PIN-kode", "actionSetResourcePincode": "Angiv ressource-PIN-kode",
"actionSetResourceEmailWhitelist": "Angiv e-mailwhitelist for ressource", "actionSetResourceEmailWhitelist": "Angiv e-mailwhitelist for ressource",
"actionGetResourceEmailWhitelist": "Hent e-mailwhitelist for ressource", "actionGetResourceEmailWhitelist": "Hent e-mailwhitelist for ressource",
"actionGetResourcePolicy": "Få ressourceretningslinjen",
"actionUpdateResourcePolicy": "Opdater ressourceretningslinjen",
"actionSetResourcePolicyUsers": "Angiv ressourceretningslinjens brugere",
"actionSetResourcePolicyRoles": "Angiv ressourceretningslinjens roller",
"actionSetResourcePolicyPassword": "Angiv ressourceretningslinjen for adgangskode",
"actionSetResourcePolicyPincode": "Angiv ressourceregler for PIN-kode",
"actionSetResourcePolicyHeaderAuth": "Angiv ressourceretningslinjens header-authentifikation",
"actionSetResourcePolicyWhitelist": "Angiv ressourceretningslinjen for e-mail whitelist",
"actionSetResourcePolicyRules": "Angiv ressourceretningslinjens regler",
"actionCreateTarget": "Opret mål", "actionCreateTarget": "Opret mål",
"actionDeleteTarget": "Slet mål", "actionDeleteTarget": "Slet mål",
"actionGetTarget": "Hent mål", "actionGetTarget": "Hent mål",
@@ -1507,6 +1519,30 @@
"navbar": "Navigationsmenu", "navbar": "Navigationsmenu",
"navbarDescription": "Hovednavigasjonsmeny for applikationen", "navbarDescription": "Hovednavigasjonsmeny for applikationen",
"navbarDocsLink": "Dokumentation", "navbarDocsLink": "Dokumentation",
"commandPaletteTitle": "Kommando-paletten",
"commandPaletteDescription": "Søg efter sider, organisationer, ressourcer og handlinger",
"commandPaletteSearchPlaceholder": "Søg i sider, ressourcer, handlinger...",
"commandPaletteNoResults": "Ingen resultater fundet.",
"commandPaletteSearching": "Søger...",
"commandPaletteNavigation": "Navigation",
"commandPaletteOrganizations": "Organisationer",
"commandPaletteSites": "Websteder",
"commandPaletteResources": "Ressourcer",
"commandPaletteUsers": "Brugere",
"commandPaletteClients": "Maskinklienter",
"commandPaletteActions": "Handlinger",
"commandPaletteCreateSite": "Opret site",
"commandPaletteCreateProxyResource": "Opret offentlig ressource",
"commandPaletteCreatePrivateResource": "Opret privat ressource",
"commandPaletteCreateUser": "Opret bruger",
"commandPaletteCreateApiKey": "Opret API-nøgle",
"commandPaletteCreateMachineClient": "Opret maskinklient",
"commandPaletteCreateAlertRule": "Opret varslingsregel",
"commandPaletteCreateIdentityProvider": "Opret identitetsudbyder",
"commandPaletteToggleTheme": "Skift tema",
"commandPaletteChooseOrganization": "Vælg organisation",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Kunne ikke aktivere 2FA", "otpErrorEnable": "Kunne ikke aktivere 2FA",
"otpErrorEnableDescription": "En fejl opstod under aktivering af 2FA", "otpErrorEnableDescription": "En fejl opstod under aktivering af 2FA",
"otpSetupCheckCode": "Indtast venligst en 6-sifret kode", "otpSetupCheckCode": "Indtast venligst en 6-sifret kode",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Administration", "sidebarManagement": "Administration",
"sidebarBillingAndLicenses": "Fakturering & licenser", "sidebarBillingAndLicenses": "Fakturering & licenser",
"sidebarLogsAnalytics": "Analyser", "sidebarLogsAnalytics": "Analyser",
"commandSites": "Websteder",
"commandActionModeInfo": "Skriv \">\" for at åbne handlingsmode",
"commandResources": "Ressourcer",
"commandProxyResources": "Offentlige ressourcer",
"commandClientResources": "Private ressourcer",
"commandClients": "Klienter",
"commandUserDevices": "Brugerenheder",
"commandMachineClients": "Maskinklienter",
"commandDomains": "Domæner",
"commandRemoteExitNodes": "Eksterne noder",
"commandTeam": "Team",
"commandUsers": "Brugere",
"commandRoles": "Roller",
"commandInvitations": "Invitationer",
"commandPolicies": "Delte politikker",
"commandResourcePolicies": "Offentlige ressourcepolitikker",
"commandIdentityProviders": "Identitetsudbydere",
"commandApprovals": "Godkendelsesanmodninger",
"commandShareableLinks": "Delbare links",
"commandOrganization": "Organisation",
"commandLogsAndAnalytics": "Logs og analyser",
"commandLogsAnalytics": "Analyser",
"commandLogsRequest": "HTTP-forespørgselslogs",
"commandLogsAccess": "Adgangslogs",
"commandLogsAction": "Handlingsloger",
"commandLogsConnection": "Forbindelseslogs",
"commandLogsStreaming": "Hændelsesstreaming",
"commandManagement": "Administration",
"commandAlerting": "Varsling",
"commandProvisioning": "Provisionering",
"commandBluePrints": "Blueprints",
"commandApiKeys": "API-nøgler",
"commandBillingAndLicenses": "Fakturering & licenser",
"commandBilling": "Fakturering",
"commandEnterpriseLicenses": "Licenser",
"commandSettings": "Indstillinger",
"commandLauncher": "Launcher",
"commandResourceLauncher": "Ressource-launcher",
"commandSearchResults": "Søgeresultater",
"alertingTitle": "Varsling", "alertingTitle": "Varsling",
"alertingDescription": "Definer kilder, triggere og handlinger for varsler", "alertingDescription": "Definer kilder, triggere og handlinger for varsler",
"alertingRules": "Varslingsregler", "alertingRules": "Varslingsregler",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domæner", "billingDomains": "Domæner",
"billingOrganizations": "Orger", "billingOrganizations": "Orger",
"billingRemoteExitNodes": "Eksterne noder", "billingRemoteExitNodes": "Eksterne noder",
"billingPublicResources": "Offentlige ressourcer",
"billingPrivateResources": "Private ressourcer",
"billingMachineClients": "Maskinklienter",
"billingNoLimitConfigured": "Ingen grænse konfigureret", "billingNoLimitConfigured": "Ingen grænse konfigureret",
"billingEstimatedPeriod": "Estimert faktureringsperiode", "billingEstimatedPeriod": "Estimert faktureringsperiode",
"billingIncludedUsage": "Inklusive Brug", "billingIncludedUsage": "Inklusive Brug",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Hvor mange brugere du kan bruge", "billingUsersInfo": "Hvor mange brugere du kan bruge",
"billingDomainInfo": "Hvor mange domæner du kan bruge", "billingDomainInfo": "Hvor mange domæner du kan bruge",
"billingRemoteExitNodesInfo": "Hvor mange fjernnoder du kan bruge", "billingRemoteExitNodesInfo": "Hvor mange fjernnoder du kan bruge",
"billingPublicResourcesInfo": "Hvor mange offentlige ressourcer du kan bruge",
"billingPrivateResourcesInfo": "Hvor mange private ressourcer du kan bruge",
"billingMachineClientsInfo": "Hvor mange maskinklienter du kan bruge",
"billingLicenseKeys": "Licensnøgler", "billingLicenseKeys": "Licensnøgler",
"billingLicenseKeysDescription": "Administrer dine licensnøgleabonnementer", "billingLicenseKeysDescription": "Administrer dine licensnøgleabonnementer",
"billingLicenseSubscription": "Licens abonnement", "billingLicenseSubscription": "Licens abonnement",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Luk", "createInternalResourceDialogClose": "Luk",
"createInternalResourceDialogCreateClientResource": "Opret privat ressource", "createInternalResourceDialogCreateClientResource": "Opret privat ressource",
"createInternalResourceDialogCreateClientResourceDescription": "Opret en ny ressource som kun vil være tilgængelig for kunder som er forbundet til organisationen", "createInternalResourceDialogCreateClientResourceDescription": "Opret en ny ressource som kun vil være tilgængelig for kunder som er forbundet til organisationen",
"privateResourceCreatePageSeeAll": "Se alle private ressourcer",
"privateResourceAllowIcmpPing": "Tillad ICMP-ping",
"privateResourceNetworkAccess": "Netværksadgang",
"privateResourceNetworkAccessDescription": "Styr TCP/UDP-portadgang og om ICMP-ping er tilladt for denne ressource.",
"hostSettings": "Værtindstillinger",
"cidrSettings": "CIDR-indstillinger",
"createInternalResourceDialogResourceProperties": "Ressourceegenskaber", "createInternalResourceDialogResourceProperties": "Ressourceegenskaber",
"createInternalResourceDialogName": "Navn", "createInternalResourceDialogName": "Navn",
"createInternalResourceDialogSite": "Websted", "createInternalResourceDialogSite": "Websted",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Ingen noder er tilgængelige for denne organisation. Opret en node først for at bruge lokale sites.", "noRemoteExitNodesAvailableDescription": "Ingen noder er tilgængelige for denne organisation. Opret en node først for at bruge lokale sites.",
"exitNode": "Exitnode", "exitNode": "Exitnode",
"country": "Land", "country": "Land",
"countryIsNot": "Country Is Not",
"rulesMatchCountry": "I øjeblikket baseret på kilde-IP", "rulesMatchCountry": "I øjeblikket baseret på kilde-IP",
"region": "Fylke", "region": "Fylke",
"selectRegion": "Vælg region", "selectRegion": "Vælg region",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "Opsætning af tofaktorgodkendelse er påkrævet. Log venligst ind igen via {dashboardUrl}/auth/login og fuldfør dette trin. Kom derefter tilbage hertil.", "twoFactorSetupRequired": "Opsætning af tofaktorgodkendelse er påkrævet. Log venligst ind igen via {dashboardUrl}/auth/login og fuldfør dette trin. Kom derefter tilbage hertil.",
"additionalSecurityRequired": "Ekstra sikkerhed kræves", "additionalSecurityRequired": "Ekstra sikkerhed kræves",
"organizationRequiresAdditionalSteps": "Denne organisation kræver yderligere sikkerhedstrin, før du får adgang til ressourcer.", "organizationRequiresAdditionalSteps": "Denne organisation kræver yderligere sikkerhedstrin, før du får adgang til ressourcer.",
"sessionExpired": "Session udløbet",
"sessionExpiredReauthRequired": "Din session er udløbet i henhold til din organisations sikkerhedspolitik. Genbekræft venligst for at fortsætte.",
"reauthenticate": "Re-autentificer",
"completeTheseSteps": "Fuldfør disse trinene", "completeTheseSteps": "Fuldfør disse trinene",
"enableTwoFactorAuthentication": "Aktivér to-faktor autentificering", "enableTwoFactorAuthentication": "Aktivér to-faktor autentificering",
"completeSecuritySteps": "Fuldfør sikkerhedstrinene", "completeSecuritySteps": "Fuldfør sikkerhedstrinene",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Tilføj brugere", "editInternalResourceDialogAddUsers": "Tilføj brugere",
"editInternalResourceDialogAddClients": "Tilføj klienter", "editInternalResourceDialogAddClients": "Tilføj klienter",
"editInternalResourceDialogDestinationLabel": "Destination", "editInternalResourceDialogDestinationLabel": "Destination",
"editInternalResourceDialogDestinationDescription": "Angiv destinationsadressen for den interne ressource. Dette kan være et værtsnavn, en IP-adresse eller et CIDR-område afhængigt af den valgte tilstand. Du kan også konfigurere et internt DNS-alias for nemmere identifikation.", "editInternalResourceDialogDestinationDescription": "Choose where this resource runs and how clients reach it",
"internalResourceFormMultiSiteRoutingHelp": "Valg af flere sites muliggør robust routing og failover for høj tilgængelighed.", "internalResourceFormMultiSiteRoutingHelp": "Valg af flere sites muliggør robust routing og failover for høj tilgængelighed.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Læs mere", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Læs mere",
"editInternalResourceDialogPortRestrictionsDescription": "Begrens adgang til specifikke TCP/UDP-porte eller tillade/blokere alle porte.", "editInternalResourceDialogPortRestrictionsDescription": "Begrens adgang til specifikke TCP/UDP-porte eller tillade/blokere alle porte.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Ressource deaktiveret", "memberPortalResourceDisabled": "Ressource deaktiveret",
"memberPortalShowingResources": "Viser {start}-{end} af {total} ressourcer", "memberPortalShowingResources": "Viser {start}-{end} af {total} ressourcer",
"resourceLauncherTitle": "Ressource Starter", "resourceLauncherTitle": "Ressource Starter",
"resourceLauncherDescription": "Se ressource detaljer og start dem fra ét sted", "resourceSidebarLauncherTitle": "Launcher",
"resourceLauncherSearchPlaceholder": "Søg i alle sites...", "resourceLauncherDescription": "Se alle tilgængelige ressourcer og start dem fra ét centralt knudepunkt",
"resourceLauncherSearchPlaceholder": "Søg i dine ressourcer...",
"resourceLauncherDefaultView": "Standard", "resourceLauncherDefaultView": "Standard",
"resourceLauncherSaveView": "Gem Visning", "resourceLauncherSaveView": "Gem Visning",
"resourceLauncherSaveToCurrentView": "Gem til nuværende visning", "resourceLauncherSaveToCurrentView": "Gem til nuværende visning",
"resourceLauncherSaveDefaultPersonal": "Gem for mig",
"resourceLauncherResetView": "Nulstil Visning", "resourceLauncherResetView": "Nulstil Visning",
"resourceLauncherResetSystemDefault": "Nulstil til systemstandard",
"resourceLauncherSystemDefaultRestored": "Systemstandard gendannet",
"resourceLauncherSystemDefaultRestoredDescription": "Standardvisningen er blevet nulstillet til de oprindelige indstillinger.",
"resourceLauncherSaveAsNewView": "Gem som Ny Visning", "resourceLauncherSaveAsNewView": "Gem som Ny Visning",
"resourceLauncherSaveAsNewViewDescription": "Giv denne visning et navn for at gemme dine nuværende filtre og layout.", "resourceLauncherSaveAsNewViewDescription": "Giv denne visning et navn for at gemme dine nuværende filtre og layout.",
"resourceLauncherSaveForEveryone": "Gem for Alle", "resourceLauncherSaveForEveryone": "Gem for Alle",
"resourceLauncherSaveForEveryoneDescription": "Del denne visning med alle organisationsmedlemmer. Når den er ikke markeret, er visningen kun synlig for dig.", "resourceLauncherSaveForEveryoneDescription": "Del denne visning med alle organisationsmedlemmer. Når den er ikke markeret, er visningen kun synlig for dig.",
"resourceLauncherMakePersonal": "Gør Personlig", "resourceLauncherMakePersonal": "Gør Personlig",
"resourceLauncherFilter": "Filter", "resourceLauncherFilter": "Filter",
"resourceLauncherFilterWithCount": "Filter, {count} anvendt",
"resourceLauncherSort": "Sortér", "resourceLauncherSort": "Sortér",
"resourceLauncherSortAscending": "Sortér stigende", "resourceLauncherSortAscending": "Sortér stigende",
"resourceLauncherSortDescending": "Sortér faldende", "resourceLauncherSortDescending": "Sortér faldende",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Gruppér Efter", "resourceLauncherGroupBy": "Gruppér Efter",
"resourceLauncherGroupBySite": "Websted", "resourceLauncherGroupBySite": "Websted",
"resourceLauncherGroupByLabel": "Etikett", "resourceLauncherGroupByLabel": "Etikett",
"resourceLauncherGroupByNone": "Ingen",
"resourceLauncherLayout": "Layout", "resourceLauncherLayout": "Layout",
"resourceLauncherLayoutGrid": "Gitter", "resourceLauncherLayoutGrid": "Gitter",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Vis Site Tags", "resourceLauncherShowSiteTags": "Vis Site Tags",
"resourceLauncherShowRecents": "Vis Seneste", "resourceLauncherShowRecents": "Vis Seneste",
"resourceLauncherDeleteView": "Slet Visning", "resourceLauncherDeleteView": "Slet Visning",
"resourceLauncherDeleteViewTitle": "Slet visning",
"resourceLauncherDeleteViewQuestion": "Er du sikker på, at du vil slette denne launchervisning?",
"resourceLauncherDeleteViewConfirm": "Slet visning",
"resourceLauncherViewAsAdmin": "Vis som Admin", "resourceLauncherViewAsAdmin": "Vis som Admin",
"resourceLauncherResourceDetailsDescription": "Se detaljer for denne ressource.", "resourceLauncherResourceDetailsDescription": "Forbindelsesoplysninger og status for denne ressource.",
"resourceLauncherResourceDetails": "Ressourcedetaljer",
"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",
"resourceLauncherDownloadClient": "Download klient",
"resourceLauncherFailedToLoadDetails": "Kunne ikke indlæse ressourcedetaljer. Du har muligvis ikke længere adgang til denne ressource.",
"resourceLauncherNoPortRestrictions": "Ingen portbegrænsninger",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Uden Etiket", "resourceLauncherUnlabeled": "Uden Etiket",
"resourceLauncherNoSite": "Ingen Site", "resourceLauncherNoSite": "Ingen Site",
"resourceLauncherNoResourcesInGroup": "Ingen ressourcer i denne gruppe", "resourceLauncherNoResourcesInGroup": "Ingen ressourcer i denne gruppe",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Ingen ressourcer fundet", "resourceLauncherEmptyStateNoResultsTitle": "Ingen ressourcer fundet",
"resourceLauncherEmptyStateNoResultsDescription": "Ingen ressourcer matcher din nuværende søgning eller filtre. Prøv at justere dem for at finde det, du leder efter.", "resourceLauncherEmptyStateNoResultsDescription": "Ingen ressourcer matcher din nuværende søgning eller filtre. Prøv at justere dem for at finde det, du leder efter.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Ingen ressourcer matcher \"{query}\". Prøv at justere din søgning eller rydde filtre for at se alle ressourcer.", "resourceLauncherEmptyStateNoResultsWithQuery": "Ingen ressourcer matcher \"{query}\". Prøv at justere din søgning eller rydde filtre for at se alle ressourcer.",
"resourceLauncherSearchFirstTitle": "Søg eller filtrer for at browse",
"resourceLauncherSearchFirstDescription": "Du har adgang til mange ressourcer. Brug søgning eller filtrer efter site eller label for at finde det, du har brug for.",
"resourceLauncherSiteGroupingDisabled": "Site-gruppering er ikke tilgængelig i denne skala. Filtrer efter site for at gruppere et mindre sæt.",
"resourceLauncherLabelGroupingDisabled": "Label-gruppering er ikke tilgængelig i denne skala.",
"resourceLauncherCompactModeHint": "Viser en forenklet liste for hurtigere browsing. Brug søgning eller filtre for at indsnævre resultater.",
"resourceLauncherCompactGroupingHint": "Anvend site- eller label-filters for at aktivere gruppering.",
"resourceLauncherCopiedToClipboard": "Kopieret til udklipsholderen", "resourceLauncherCopiedToClipboard": "Kopieret til udklipsholderen",
"resourceLauncherCopiedAccessDescription": "Ressourcetilgangen er kopieret til din udklipsholder.", "resourceLauncherCopiedAccessDescription": "Ressourcetilgangen er kopieret til din udklipsholder.",
"resourceLauncherViewNamePlaceholder": "Vis navn", "resourceLauncherViewNamePlaceholder": "Vis navn",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Proxy-Anfragen über rohe TCP/UDP mit Portnummer. Benötigt Sites, um sich mit einem entfernten Knoten zu verbinden.", "resourceRawDescriptionCloud": "Proxy-Anfragen über rohe TCP/UDP mit Portnummer. Benötigt Sites, um sich mit einem entfernten Knoten zu verbinden.",
"resourceCreate": "Ressource erstellen", "resourceCreate": "Ressource erstellen",
"resourceCreateDescription": "Folgen Sie den Schritten unten, um eine neue Ressource zu erstellen", "resourceCreateDescription": "Folgen Sie den Schritten unten, um eine neue Ressource zu erstellen",
"resourcePublicCreate": "Öffentliche Ressource erstellen",
"resourcePublicCreateDescription": "Befolgen Sie die unten aufgeführten Schritte, um eine neue öffentliche Ressource zu erstellen, auf die über einen Webbrowser zugegriffen werden kann",
"resourceCreateGeneralDescription": "Konfigurieren Sie die Grundeinstellungen der Ressource, einschließlich Name und Typ", "resourceCreateGeneralDescription": "Konfigurieren Sie die Grundeinstellungen der Ressource, einschließlich Name und Typ",
"resourceSeeAll": "Alle Ressourcen anzeigen", "resourceSeeAll": "Alle Ressourcen anzeigen",
"resourceCreateGeneral": "Allgemein", "resourceCreateGeneral": "Allgemein",
@@ -613,7 +615,8 @@
"idpNameInternal": "Intern", "idpNameInternal": "Intern",
"emailInvalid": "Ungültige E-Mail-Adresse", "emailInvalid": "Ungültige E-Mail-Adresse",
"inviteValidityDuration": "Bitte wählen Sie eine Dauer", "inviteValidityDuration": "Bitte wählen Sie eine Dauer",
"accessRoleSelectPlease": "Bitte wählen Sie eine Rolle", "accessRoleSelectPlease": "Ein Benutzer muss mindestens einer Rolle zugeordnet sein.",
"accessRoleRequired": "Rolle erforderlich",
"removeOwnAdminRoleConfirmTitle": "Möchten Sie Ihren Administratorzugriff entfernen?", "removeOwnAdminRoleConfirmTitle": "Möchten Sie Ihren Administratorzugriff entfernen?",
"removeOwnAdminRoleConfirmDescription": "Nach dem Speichern haben Sie keine Administratorrechte mehr in dieser Organisation. Ein anderer Administrator kann den Zugriff bei Bedarf wiederherstellen.", "removeOwnAdminRoleConfirmDescription": "Nach dem Speichern haben Sie keine Administratorrechte mehr in dieser Organisation. Ein anderer Administrator kann den Zugriff bei Bedarf wiederherstellen.",
"removeOwnAdminRoleConfirmButton": "Meinen Administratorzugriff entfernen", "removeOwnAdminRoleConfirmButton": "Meinen Administratorzugriff entfernen",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Grundlegende Header-Authentifizierung", "policyAuthHeaderAuthTitle": "Grundlegende Header-Authentifizierung",
"policyAuthHeaderAuthDescription": "Überprüfen Sie einen benutzerdefinierten HTTP-Headernamen und -wert bei jeder Anfrage", "policyAuthHeaderAuthDescription": "Überprüfen Sie einen benutzerdefinierten HTTP-Headernamen und -wert bei jeder Anfrage",
"policyAuthHeaderAuthSummary": "Header konfiguriert", "policyAuthHeaderAuthSummary": "Header konfiguriert",
"policyAuthHeaderName": "Header-Name", "policyAuthHeaderName": "Benutzername",
"policyAuthHeaderValue": "Erwarteter Wert", "policyAuthHeaderValue": "Passwort",
"policyAuthSetPasscode": "Passcode setzen", "policyAuthSetPasscode": "Passcode setzen",
"policyAuthSetPincode": "PIN-Code festlegen", "policyAuthSetPincode": "PIN-Code festlegen",
"policyAuthSetEmailWhitelist": "E-Mail-Whitelist festlegen", "policyAuthSetEmailWhitelist": "E-Mail-Whitelist festlegen",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Ressourcen-PIN festlegen", "actionSetResourcePincode": "Ressourcen-PIN festlegen",
"actionSetResourceEmailWhitelist": "Ressourcen-E-Mail-Whitelist festlegen", "actionSetResourceEmailWhitelist": "Ressourcen-E-Mail-Whitelist festlegen",
"actionGetResourceEmailWhitelist": "Ressourcen-E-Mail-Whitelist abrufen", "actionGetResourceEmailWhitelist": "Ressourcen-E-Mail-Whitelist abrufen",
"actionGetResourcePolicy": "Ressourcenrichtlinie abrufen",
"actionUpdateResourcePolicy": "Ressourcenrichtlinie aktualisieren",
"actionSetResourcePolicyUsers": "Ressourcenrichtlinienbenutzer festlegen",
"actionSetResourcePolicyRoles": "Rollen der Ressourcenrichtlinie festlegen",
"actionSetResourcePolicyPassword": "Passwort der Ressourcenrichtlinie festlegen",
"actionSetResourcePolicyPincode": "Ressourcenrichtlinie-PIN festlegen",
"actionSetResourcePolicyHeaderAuth": "Ressourcenrichtlinie für Header-Authentifizierung festlegen",
"actionSetResourcePolicyWhitelist": "E-Mail-Whitelist der Ressourcenrichtlinie festlegen",
"actionSetResourcePolicyRules": "Ressourcenrichtlinienregeln festlegen",
"actionCreateTarget": "Ziel erstellen", "actionCreateTarget": "Ziel erstellen",
"actionDeleteTarget": "Ziel löschen", "actionDeleteTarget": "Ziel löschen",
"actionGetTarget": "Ziel abrufen", "actionGetTarget": "Ziel abrufen",
@@ -1507,6 +1519,30 @@
"navbar": "Navigationsmenü", "navbar": "Navigationsmenü",
"navbarDescription": "Hauptnavigationsmenü für die Anwendung", "navbarDescription": "Hauptnavigationsmenü für die Anwendung",
"navbarDocsLink": "Dokumentation", "navbarDocsLink": "Dokumentation",
"commandPaletteTitle": "Befehlsfeld",
"commandPaletteDescription": "Nach Seiten, Organisationen, Ressourcen und Aktionen suchen",
"commandPaletteSearchPlaceholder": "Seiten, Ressourcen, Aktionen suchen...",
"commandPaletteNoResults": "Keine Ergebnisse gefunden.",
"commandPaletteSearching": "Suche...",
"commandPaletteNavigation": "Navigation",
"commandPaletteOrganizations": "Organisationen",
"commandPaletteSites": "Seiten",
"commandPaletteResources": "Ressourcen",
"commandPaletteUsers": "Benutzer",
"commandPaletteClients": "Maschinen-Clients",
"commandPaletteActions": "Aktionen",
"commandPaletteCreateSite": "Seite erstellen",
"commandPaletteCreateProxyResource": "Öffentliche Ressource erstellen",
"commandPaletteCreatePrivateResource": "Private Ressource erstellen",
"commandPaletteCreateUser": "Benutzer erstellen",
"commandPaletteCreateApiKey": "API-Schlüssel erstellen",
"commandPaletteCreateMachineClient": "Maschinen-Client erstellen",
"commandPaletteCreateAlertRule": "Alarmregel erstellen",
"commandPaletteCreateIdentityProvider": "Identitätsanbieter erstellen",
"commandPaletteToggleTheme": "Thema umschalten",
"commandPaletteChooseOrganization": "Organisation auswählen",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Strg K",
"otpErrorEnable": "2FA konnte nicht aktiviert werden", "otpErrorEnable": "2FA konnte nicht aktiviert werden",
"otpErrorEnableDescription": "Beim Aktivieren der 2FA ist ein Fehler aufgetreten", "otpErrorEnableDescription": "Beim Aktivieren der 2FA ist ein Fehler aufgetreten",
"otpSetupCheckCode": "Bitte geben Sie einen 6-stelligen Code ein", "otpSetupCheckCode": "Bitte geben Sie einen 6-stelligen Code ein",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Management", "sidebarManagement": "Management",
"sidebarBillingAndLicenses": "Abrechnung & Lizenzen", "sidebarBillingAndLicenses": "Abrechnung & Lizenzen",
"sidebarLogsAnalytics": "Analytik", "sidebarLogsAnalytics": "Analytik",
"commandSites": "Seiten",
"commandActionModeInfo": "Geben Sie \">\" ein, um den Aktionsmodus zu öffnen",
"commandResources": "Ressourcen",
"commandProxyResources": "Öffentliche Ressourcen",
"commandClientResources": "Private Ressourcen",
"commandClients": "Clients",
"commandUserDevices": "Benutzergeräte",
"commandMachineClients": "Maschinen-Clients",
"commandDomains": "Domänen",
"commandRemoteExitNodes": "Fernknoten",
"commandTeam": "Team",
"commandUsers": "Benutzer",
"commandRoles": "Rollen",
"commandInvitations": "Einladungen",
"commandPolicies": "Geteilte Richtlinien",
"commandResourcePolicies": "Öffentliche Ressourcenrichtlinien",
"commandIdentityProviders": "Identitätsanbieter",
"commandApprovals": "Genehmigungsanfragen",
"commandShareableLinks": "Teilbare Links",
"commandOrganization": "Organisation",
"commandLogsAndAnalytics": "Logs & Analysen",
"commandLogsAnalytics": "Analysen",
"commandLogsRequest": "HTTP-Anforderungsprotokolle",
"commandLogsAccess": "Zugriffsprotokolle",
"commandLogsAction": "Administrator-Aktionsprotokolle",
"commandLogsConnection": "Netzwerkprotokolle",
"commandLogsStreaming": "Ereignis-Streaming",
"commandManagement": "Verwaltung",
"commandAlerting": "Alarmierung",
"commandProvisioning": "Bereitstellung",
"commandBluePrints": "Blaupausen",
"commandApiKeys": "API-Schlüssel",
"commandBillingAndLicenses": "Abrechnung & Lizenzen",
"commandBilling": "Abrechnung",
"commandEnterpriseLicenses": "Lizenzen",
"commandSettings": "Einstellungen",
"commandLauncher": "Launcher",
"commandResourceLauncher": "Ressourcen-Launcher",
"commandSearchResults": "Suchergebnisse",
"alertingTitle": "Benachrichtigung", "alertingTitle": "Benachrichtigung",
"alertingDescription": "Quellen, Auslöser und Aktionen für Benachrichtigungen festlegen", "alertingDescription": "Quellen, Auslöser und Aktionen für Benachrichtigungen festlegen",
"alertingRules": "Benachrichtigungsregeln", "alertingRules": "Benachrichtigungsregeln",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domänen", "billingDomains": "Domänen",
"billingOrganizations": "Orden", "billingOrganizations": "Orden",
"billingRemoteExitNodes": "Entfernte Knoten", "billingRemoteExitNodes": "Entfernte Knoten",
"billingPublicResources": "Öffentliche Ressourcen",
"billingPrivateResources": "Private Ressourcen",
"billingMachineClients": "Maschinen-Clients",
"billingNoLimitConfigured": "Kein Limit konfiguriert", "billingNoLimitConfigured": "Kein Limit konfiguriert",
"billingEstimatedPeriod": "Geschätzter Abrechnungszeitraum", "billingEstimatedPeriod": "Geschätzter Abrechnungszeitraum",
"billingIncludedUsage": "Inklusive Nutzung", "billingIncludedUsage": "Inklusive Nutzung",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Wie viele Benutzer Sie verwenden können", "billingUsersInfo": "Wie viele Benutzer Sie verwenden können",
"billingDomainInfo": "Wie viele Domains Sie verwenden können", "billingDomainInfo": "Wie viele Domains Sie verwenden können",
"billingRemoteExitNodesInfo": "Wie viele entfernte Knoten Sie verwenden können", "billingRemoteExitNodesInfo": "Wie viele entfernte Knoten Sie verwenden können",
"billingPublicResourcesInfo": "Wie viele öffentliche Ressourcen Sie nutzen können",
"billingPrivateResourcesInfo": "Wie viele private Ressourcen Sie nutzen können",
"billingMachineClientsInfo": "Wie viele Maschinen-Clients Sie nutzen können",
"billingLicenseKeys": "Lizenzschlüssel", "billingLicenseKeys": "Lizenzschlüssel",
"billingLicenseKeysDescription": "Verwalten Sie Ihre Lizenzschlüssel Abonnements", "billingLicenseKeysDescription": "Verwalten Sie Ihre Lizenzschlüssel Abonnements",
"billingLicenseSubscription": "Lizenzabonnement", "billingLicenseSubscription": "Lizenzabonnement",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Schließen", "createInternalResourceDialogClose": "Schließen",
"createInternalResourceDialogCreateClientResource": "Private Ressource erstellen", "createInternalResourceDialogCreateClientResource": "Private Ressource erstellen",
"createInternalResourceDialogCreateClientResourceDescription": "Erstelle eine neue Ressource, die nur für Clients zugänglich ist, die mit der Organisation verbunden sind", "createInternalResourceDialogCreateClientResourceDescription": "Erstelle eine neue Ressource, die nur für Clients zugänglich ist, die mit der Organisation verbunden sind",
"privateResourceCreatePageSeeAll": "Alle privaten Ressourcen anzeigen",
"privateResourceAllowIcmpPing": "ICMP-Ping zulassen",
"privateResourceNetworkAccess": "Netzwerkzugriff",
"privateResourceNetworkAccessDescription": "TCP/UDP-Portzugriff kontrollieren und ICMP-Ping für diese Ressource zulassen.",
"hostSettings": "Host-Einstellungen",
"cidrSettings": "CIDR-Einstellungen",
"createInternalResourceDialogResourceProperties": "Ressourceneigenschaften", "createInternalResourceDialogResourceProperties": "Ressourceneigenschaften",
"createInternalResourceDialogName": "Name", "createInternalResourceDialogName": "Name",
"createInternalResourceDialogSite": "Standort", "createInternalResourceDialogSite": "Standort",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Für diese Organisation sind keine Knoten verfügbar. Erstellen Sie zuerst einen Knoten, um lokale Standorte zu verwenden.", "noRemoteExitNodesAvailableDescription": "Für diese Organisation sind keine Knoten verfügbar. Erstellen Sie zuerst einen Knoten, um lokale Standorte zu verwenden.",
"exitNode": "Exit-Node", "exitNode": "Exit-Node",
"country": "Land", "country": "Land",
"countryIsNot": "Land ist nicht",
"rulesMatchCountry": "Derzeit basierend auf der Quell-IP", "rulesMatchCountry": "Derzeit basierend auf der Quell-IP",
"region": "Region", "region": "Region",
"selectRegion": "Region wählen...", "selectRegion": "Region wählen...",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "Die Zwei-Faktor-Authentifizierung ist erforderlich. Bitte melden Sie sich erneut über {dashboardUrl}/auth/login an. Dann kommen Sie hierher zurück.", "twoFactorSetupRequired": "Die Zwei-Faktor-Authentifizierung ist erforderlich. Bitte melden Sie sich erneut über {dashboardUrl}/auth/login an. Dann kommen Sie hierher zurück.",
"additionalSecurityRequired": "Zusätzliche Sicherheit erforderlich", "additionalSecurityRequired": "Zusätzliche Sicherheit erforderlich",
"organizationRequiresAdditionalSteps": "Diese Organisation erfordert zusätzliche Sicherheitsschritte, bevor Sie auf Ressourcen zugreifen können.", "organizationRequiresAdditionalSteps": "Diese Organisation erfordert zusätzliche Sicherheitsschritte, bevor Sie auf Ressourcen zugreifen können.",
"sessionExpired": "Sitzung abgelaufen",
"sessionExpiredReauthRequired": "Ihre Sitzung ist gemäß der Sicherheitsrichtlinie Ihrer Organisation abgelaufen. Bitte authentifizieren Sie sich erneut, um fortzufahren.",
"reauthenticate": "Neu anmelden",
"completeTheseSteps": "Schließe diese Schritte ab", "completeTheseSteps": "Schließe diese Schritte ab",
"enableTwoFactorAuthentication": "Zwei-Faktor-Authentifizierung aktivieren", "enableTwoFactorAuthentication": "Zwei-Faktor-Authentifizierung aktivieren",
"completeSecuritySteps": "Schließe Sicherheitsschritte ab", "completeSecuritySteps": "Schließe Sicherheitsschritte ab",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Nutzer hinzufügen", "editInternalResourceDialogAddUsers": "Nutzer hinzufügen",
"editInternalResourceDialogAddClients": "Clients hinzufügen", "editInternalResourceDialogAddClients": "Clients hinzufügen",
"editInternalResourceDialogDestinationLabel": "Ziel", "editInternalResourceDialogDestinationLabel": "Ziel",
"editInternalResourceDialogDestinationDescription": "Geben Sie die Zieladresse für die interne Ressource an. Dies kann ein Hostname, eine IP-Adresse oder ein CIDR-Bereich sein, abhängig vom gewählten Modus. Legen Sie optional einen internen DNS-Alias für eine vereinfachte Identifizierung fest.", "editInternalResourceDialogDestinationDescription": "Wählen Sie aus, wo diese Ressource läuft und wie Clients darauf zugreifen können",
"internalResourceFormMultiSiteRoutingHelp": "Durch die Auswahl mehrerer Seiten wird ein ausfallsicheres Routing und Failover für hohe Verfügbarkeit ermöglicht.", "internalResourceFormMultiSiteRoutingHelp": "Durch die Auswahl mehrerer Seiten wird ein ausfallsicheres Routing und Failover für hohe Verfügbarkeit ermöglicht.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Mehr erfahren", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Mehr erfahren",
"editInternalResourceDialogPortRestrictionsDescription": "Den Zugriff auf bestimmte TCP/UDP-Ports beschränken oder alle Ports erlauben/blockieren.", "editInternalResourceDialogPortRestrictionsDescription": "Den Zugriff auf bestimmte TCP/UDP-Ports beschränken oder alle Ports erlauben/blockieren.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Ressource deaktiviert", "memberPortalResourceDisabled": "Ressource deaktiviert",
"memberPortalShowingResources": "Zeige {start}-{end} von {total} Ressourcen", "memberPortalShowingResources": "Zeige {start}-{end} von {total} Ressourcen",
"resourceLauncherTitle": "Ressourcenstarter", "resourceLauncherTitle": "Ressourcenstarter",
"resourceLauncherDescription": "Sehen Sie sich Ressourcendetails an und starten Sie sie von einem Ort aus", "resourceSidebarLauncherTitle": "Launcher",
"resourceLauncherSearchPlaceholder": "Alle Standorte durchsuchen...", "resourceLauncherDescription": "Alle verfügbaren Ressourcen anzeigen und von einem zentralen Hub aus starten",
"resourceLauncherSearchPlaceholder": "Suche deine Ressourcen...",
"resourceLauncherDefaultView": "Standard", "resourceLauncherDefaultView": "Standard",
"resourceLauncherSaveView": "Ansicht speichern", "resourceLauncherSaveView": "Ansicht speichern",
"resourceLauncherSaveToCurrentView": "In aktueller Ansicht speichern", "resourceLauncherSaveToCurrentView": "In aktueller Ansicht speichern",
"resourceLauncherSaveDefaultPersonal": "Für mich speichern",
"resourceLauncherResetView": "Ansicht zurücksetzen", "resourceLauncherResetView": "Ansicht zurücksetzen",
"resourceLauncherResetSystemDefault": "Auf Systemeinstellung zurücksetzen",
"resourceLauncherSystemDefaultRestored": "Systemstandard wurde wiederhergestellt",
"resourceLauncherSystemDefaultRestoredDescription": "Die Standardansicht wurde auf die ursprünglichen Einstellungen zurückgesetzt.",
"resourceLauncherSaveAsNewView": "Als neue Ansicht speichern", "resourceLauncherSaveAsNewView": "Als neue Ansicht speichern",
"resourceLauncherSaveAsNewViewDescription": "Geben Sie dieser Ansicht einen Namen, um Ihre aktuellen Filter und das Layout zu speichern.", "resourceLauncherSaveAsNewViewDescription": "Geben Sie dieser Ansicht einen Namen, um Ihre aktuellen Filter und das Layout zu speichern.",
"resourceLauncherSaveForEveryone": "Für alle speichern", "resourceLauncherSaveForEveryone": "Für alle speichern",
"resourceLauncherSaveForEveryoneDescription": "Teilen Sie diese Ansicht mit allen Organisationsmitgliedern. Wenn nicht aktiviert, ist die Ansicht nur für Sie sichtbar.", "resourceLauncherSaveForEveryoneDescription": "Teilen Sie diese Ansicht mit allen Organisationsmitgliedern. Wenn nicht aktiviert, ist die Ansicht nur für Sie sichtbar.",
"resourceLauncherMakePersonal": "Persönlich machen", "resourceLauncherMakePersonal": "Persönlich machen",
"resourceLauncherFilter": "Filter", "resourceLauncherFilter": "Filter",
"resourceLauncherFilterWithCount": "Filter, {count} applied",
"resourceLauncherSort": "Sortieren", "resourceLauncherSort": "Sortieren",
"resourceLauncherSortAscending": "Aufsteigend sortieren", "resourceLauncherSortAscending": "Aufsteigend sortieren",
"resourceLauncherSortDescending": "Absteigend sortieren", "resourceLauncherSortDescending": "Absteigend sortieren",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Gruppieren nach", "resourceLauncherGroupBy": "Gruppieren nach",
"resourceLauncherGroupBySite": "Standort", "resourceLauncherGroupBySite": "Standort",
"resourceLauncherGroupByLabel": "Etikett", "resourceLauncherGroupByLabel": "Etikett",
"resourceLauncherGroupByNone": "Keine",
"resourceLauncherLayout": "Layout", "resourceLauncherLayout": "Layout",
"resourceLauncherLayoutGrid": "Raster", "resourceLauncherLayoutGrid": "Raster",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Standort-Tags anzeigen", "resourceLauncherShowSiteTags": "Standort-Tags anzeigen",
"resourceLauncherShowRecents": "Kürzlich anzeigen", "resourceLauncherShowRecents": "Kürzlich anzeigen",
"resourceLauncherDeleteView": "Ansicht löschen", "resourceLauncherDeleteView": "Ansicht löschen",
"resourceLauncherDeleteViewTitle": "Ansicht löschen",
"resourceLauncherDeleteViewQuestion": "Sind Sie sicher, dass Sie diese Launcher-Ansicht löschen möchten?",
"resourceLauncherDeleteViewConfirm": "Ansicht löschen",
"resourceLauncherViewAsAdmin": "Ansicht als Administrator anzeigen", "resourceLauncherViewAsAdmin": "Ansicht als Administrator anzeigen",
"resourceLauncherResourceDetailsDescription": "Anzeigen von Details zu dieser Ressource.", "resourceLauncherResourceDetailsDescription": "Verbindungsinformationen und Status für diese Ressource.",
"resourceLauncherResourceDetails": "Ressourcendetails",
"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",
"resourceLauncherDownloadClient": "Client herunterladen",
"resourceLauncherFailedToLoadDetails": "Ressourcendetails konnten nicht geladen werden. Möglicherweise haben Sie keinen Zugriff mehr auf diese Ressource.",
"resourceLauncherNoPortRestrictions": "Keine Portbeschränkungen",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Nicht etikettiert", "resourceLauncherUnlabeled": "Nicht etikettiert",
"resourceLauncherNoSite": "Kein Standort", "resourceLauncherNoSite": "Kein Standort",
"resourceLauncherNoResourcesInGroup": "Keine Ressourcen in dieser Gruppe", "resourceLauncherNoResourcesInGroup": "Keine Ressourcen in dieser Gruppe",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Keine Ressourcen gefunden", "resourceLauncherEmptyStateNoResultsTitle": "Keine Ressourcen gefunden",
"resourceLauncherEmptyStateNoResultsDescription": "Keine Ressourcen entsprechen Ihrer aktuellen Suche oder den Filtern. Versuchen Sie, diese anzupassen, um zu finden, wonach Sie suchen.", "resourceLauncherEmptyStateNoResultsDescription": "Keine Ressourcen entsprechen Ihrer aktuellen Suche oder den Filtern. Versuchen Sie, diese anzupassen, um zu finden, wonach Sie suchen.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Keine Ressourcen entsprechen \"{query}\". Versuchen Sie, Ihre Suche anzupassen oder die Filter zu löschen, um alle Ressourcen anzuzeigen.", "resourceLauncherEmptyStateNoResultsWithQuery": "Keine Ressourcen entsprechen \"{query}\". Versuchen Sie, Ihre Suche anzupassen oder die Filter zu löschen, um alle Ressourcen anzuzeigen.",
"resourceLauncherSearchFirstTitle": "Suchen oder Filtern zum Durchsuchen",
"resourceLauncherSearchFirstDescription": "Sie haben Zugriff auf viele Ressourcen. Verwenden Sie die Suche oder filtern Sie nach Websites oder Labels, um das zu finden, was Sie brauchen.",
"resourceLauncherSiteGroupingDisabled": "Website-Gruppierung ist in diesem Maßstab nicht verfügbar. Filtern Sie nach Standort, um eine kleinere Gruppe zu bilden.",
"resourceLauncherLabelGroupingDisabled": "Label-Gruppierung ist in diesem Maßstab nicht verfügbar.",
"resourceLauncherCompactModeHint": "Vereinfachte Liste für schnelleres Durchsuchen anzeigen. Verwenden Sie Suche oder Filter, um die Ergebnisse einzugrenzen.",
"resourceLauncherCompactGroupingHint": "Treffen Sie Standort- oder Labelfilter an, um Gruppierungen zu aktivieren.",
"resourceLauncherCopiedToClipboard": "In die Zwischenablage kopiert", "resourceLauncherCopiedToClipboard": "In die Zwischenablage kopiert",
"resourceLauncherCopiedAccessDescription": "Der Ressourcenzugriff wurde in Ihre Zwischenablage kopiert.", "resourceLauncherCopiedAccessDescription": "Der Ressourcenzugriff wurde in Ihre Zwischenablage kopiert.",
"resourceLauncherViewNamePlaceholder": "Ansichtsname", "resourceLauncherViewNamePlaceholder": "Ansichtsname",
+79 -2
View File
@@ -615,7 +615,8 @@
"idpNameInternal": "Internal", "idpNameInternal": "Internal",
"emailInvalid": "Invalid email address", "emailInvalid": "Invalid email address",
"inviteValidityDuration": "Please select a duration", "inviteValidityDuration": "Please select a duration",
"accessRoleSelectPlease": "Please select a role", "accessRoleSelectPlease": "A user must belong to at least one role.",
"accessRoleRequired": "Role required",
"removeOwnAdminRoleConfirmTitle": "Remove your administrator access?", "removeOwnAdminRoleConfirmTitle": "Remove your administrator access?",
"removeOwnAdminRoleConfirmDescription": "You will no longer have administrator permissions in this organization after saving. Another administrator can restore access if needed.", "removeOwnAdminRoleConfirmDescription": "You will no longer have administrator permissions in this organization after saving. Another administrator can restore access if needed.",
"removeOwnAdminRoleConfirmButton": "Remove My Administrator Access", "removeOwnAdminRoleConfirmButton": "Remove My Administrator Access",
@@ -1433,6 +1434,15 @@
"actionSetResourcePincode": "Set Resource Pincode", "actionSetResourcePincode": "Set Resource Pincode",
"actionSetResourceEmailWhitelist": "Set Resource Email Whitelist", "actionSetResourceEmailWhitelist": "Set Resource Email Whitelist",
"actionGetResourceEmailWhitelist": "Get Resource Email Whitelist", "actionGetResourceEmailWhitelist": "Get Resource Email Whitelist",
"actionGetResourcePolicy": "Get Resource Policy",
"actionUpdateResourcePolicy": "Update Resource Policy",
"actionSetResourcePolicyUsers": "Set Resource Policy Users",
"actionSetResourcePolicyRoles": "Set Resource Policy Roles",
"actionSetResourcePolicyPassword": "Set Resource Policy Password",
"actionSetResourcePolicyPincode": "Set Resource Policy Pincode",
"actionSetResourcePolicyHeaderAuth": "Set Resource Policy Header Authentication",
"actionSetResourcePolicyWhitelist": "Set Resource Policy Email Whitelist",
"actionSetResourcePolicyRules": "Set Resource Policy Rules",
"actionCreateTarget": "Create Target", "actionCreateTarget": "Create Target",
"actionDeleteTarget": "Delete Target", "actionDeleteTarget": "Delete Target",
"actionGetTarget": "Get Target", "actionGetTarget": "Get Target",
@@ -1509,6 +1519,30 @@
"navbar": "Navigation Menu", "navbar": "Navigation Menu",
"navbarDescription": "Main navigation menu for the application", "navbarDescription": "Main navigation menu for the application",
"navbarDocsLink": "Documentation", "navbarDocsLink": "Documentation",
"commandPaletteTitle": "Command Palette",
"commandPaletteDescription": "Search for pages, organizations, resources, and actions",
"commandPaletteSearchPlaceholder": "Search pages, resources, actions...",
"commandPaletteNoResults": "No results found.",
"commandPaletteSearching": "Searching...",
"commandPaletteNavigation": "Navigation",
"commandPaletteOrganizations": "Organizations",
"commandPaletteSites": "Sites",
"commandPaletteResources": "Resources",
"commandPaletteUsers": "Users",
"commandPaletteClients": "Machine Clients",
"commandPaletteActions": "Actions",
"commandPaletteCreateSite": "Create Site",
"commandPaletteCreateProxyResource": "Create Public Resource",
"commandPaletteCreatePrivateResource": "Create Private Resource",
"commandPaletteCreateUser": "Create User",
"commandPaletteCreateApiKey": "Create API Key",
"commandPaletteCreateMachineClient": "Create Machine Client",
"commandPaletteCreateAlertRule": "Create Alert Rule",
"commandPaletteCreateIdentityProvider": "Create Identity Provider",
"commandPaletteToggleTheme": "Toggle Theme",
"commandPaletteChooseOrganization": "Choose Organization",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Unable to enable 2FA", "otpErrorEnable": "Unable to enable 2FA",
"otpErrorEnableDescription": "An error occurred while enabling 2FA", "otpErrorEnableDescription": "An error occurred while enabling 2FA",
"otpSetupCheckCode": "Please enter a 6-digit code", "otpSetupCheckCode": "Please enter a 6-digit code",
@@ -1586,6 +1620,45 @@
"sidebarManagement": "Management", "sidebarManagement": "Management",
"sidebarBillingAndLicenses": "Billing & Licenses", "sidebarBillingAndLicenses": "Billing & Licenses",
"sidebarLogsAnalytics": "Analytics", "sidebarLogsAnalytics": "Analytics",
"commandSites": "Sites",
"commandActionModeInfo": "Type \">\" To Open Action Mode",
"commandResources": "Resources",
"commandProxyResources": "Public Resources",
"commandClientResources": "Private Resources",
"commandClients": "Clients",
"commandUserDevices": "User Devices",
"commandMachineClients": "Machine Clients",
"commandDomains": "Domains",
"commandRemoteExitNodes": "Remote Nodes",
"commandTeam": "Team",
"commandUsers": "Users",
"commandRoles": "Roles",
"commandInvitations": "Invitations",
"commandPolicies": "Shared Policies",
"commandResourcePolicies": "Public Resources Policies",
"commandIdentityProviders": "Identity Providers",
"commandApprovals": "Approval Requests",
"commandShareableLinks": "Shareable Links",
"commandOrganization": "Organization",
"commandLogsAndAnalytics": "Logs & Analytics",
"commandLogsAnalytics": "Analytics",
"commandLogsRequest": "HTTP Request Logs",
"commandLogsAccess": "Authentication Logs",
"commandLogsAction": "Admin Action Logs",
"commandLogsConnection": "Network Logs",
"commandLogsStreaming": "Event Streaming",
"commandManagement": "Management",
"commandAlerting": "Alerting",
"commandProvisioning": "Provisioning",
"commandBluePrints": "Blueprints",
"commandApiKeys": "API Keys",
"commandBillingAndLicenses": "Billing & Licenses",
"commandBilling": "Billing",
"commandEnterpriseLicenses": "Licenses",
"commandSettings": "Settings",
"commandLauncher": "Launcher",
"commandResourceLauncher": "Resource Launcher",
"commandSearchResults": "Search Results",
"alertingTitle": "Alerting", "alertingTitle": "Alerting",
"alertingDescription": "Define sources, triggers, and actions for notifications", "alertingDescription": "Define sources, triggers, and actions for notifications",
"alertingRules": "Alert rules", "alertingRules": "Alert rules",
@@ -2473,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.",
"exitNode": "Exit Node", "exitNode": "Exit Node",
"country": "Country", "country": "Country",
"countryIsNot": "Country Is Not",
"rulesMatchCountry": "Currently based on source IP", "rulesMatchCountry": "Currently based on source IP",
"region": "Region", "region": "Region",
"selectRegion": "Select region", "selectRegion": "Select region",
@@ -2682,6 +2756,9 @@
"twoFactorSetupRequired": "Two-factor authentication setup is required. Please log in again via {dashboardUrl}/auth/login complete this step. Then, come back here.", "twoFactorSetupRequired": "Two-factor authentication setup is required. Please log in again via {dashboardUrl}/auth/login complete this step. Then, come back here.",
"additionalSecurityRequired": "Additional Security Required", "additionalSecurityRequired": "Additional Security Required",
"organizationRequiresAdditionalSteps": "This organization requires additional security steps before you can access resources.", "organizationRequiresAdditionalSteps": "This organization requires additional security steps before you can access resources.",
"sessionExpired": "Session Expired",
"sessionExpiredReauthRequired": "Your session has expired per your organization's security policy. Please re-authenticate to continue.",
"reauthenticate": "Re-authenticate",
"completeTheseSteps": "Complete these steps", "completeTheseSteps": "Complete these steps",
"enableTwoFactorAuthentication": "Enable two-factor authentication", "enableTwoFactorAuthentication": "Enable two-factor authentication",
"completeSecuritySteps": "Complete Security Steps", "completeSecuritySteps": "Complete Security Steps",
@@ -3191,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Add Users", "editInternalResourceDialogAddUsers": "Add Users",
"editInternalResourceDialogAddClients": "Add Clients", "editInternalResourceDialogAddClients": "Add Clients",
"editInternalResourceDialogDestinationLabel": "Destination", "editInternalResourceDialogDestinationLabel": "Destination",
"editInternalResourceDialogDestinationDescription": "Choose where this resource runs and how clients reach it. Selecting multiple sites will create a high availability resource that can be accessed from any of the selected sites.", "editInternalResourceDialogDestinationDescription": "Choose where this resource runs and how clients reach it",
"internalResourceFormMultiSiteRoutingHelp": "Selecting multiple sites enables resilient routing and failover for high availability.", "internalResourceFormMultiSiteRoutingHelp": "Selecting multiple sites enables resilient routing and failover for high availability.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Learn more", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Learn more",
"editInternalResourceDialogPortRestrictionsDescription": "Restrict access to specific TCP/UDP ports or allow/block all ports.", "editInternalResourceDialogPortRestrictionsDescription": "Restrict access to specific TCP/UDP ports or allow/block all ports.",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Las peticiones de proxy sobre TCP/UDP crudas usando un número de puerto. Requiere que los sitios se conecten a un nodo remoto.", "resourceRawDescriptionCloud": "Las peticiones de proxy sobre TCP/UDP crudas usando un número de puerto. Requiere que los sitios se conecten a un nodo remoto.",
"resourceCreate": "Crear Recurso", "resourceCreate": "Crear Recurso",
"resourceCreateDescription": "Siga los siguientes pasos para crear un nuevo recurso", "resourceCreateDescription": "Siga los siguientes pasos para crear un nuevo recurso",
"resourcePublicCreate": "Crear recurso público",
"resourcePublicCreateDescription": "Siga los pasos a continuación para crear un nuevo recurso público accesible a través de un navegador web",
"resourceCreateGeneralDescription": "Configurar la configuración básica del recurso, incluido el nombre y el tipo", "resourceCreateGeneralDescription": "Configurar la configuración básica del recurso, incluido el nombre y el tipo",
"resourceSeeAll": "Ver todos los recursos", "resourceSeeAll": "Ver todos los recursos",
"resourceCreateGeneral": "General", "resourceCreateGeneral": "General",
@@ -613,7 +615,8 @@
"idpNameInternal": "Interno", "idpNameInternal": "Interno",
"emailInvalid": "Dirección de correo inválida", "emailInvalid": "Dirección de correo inválida",
"inviteValidityDuration": "Por favor, seleccione una duración", "inviteValidityDuration": "Por favor, seleccione una duración",
"accessRoleSelectPlease": "Por favor, seleccione un rol", "accessRoleSelectPlease": "Un usuario debe pertenecer al menos a un rol.",
"accessRoleRequired": "Rol requerido",
"removeOwnAdminRoleConfirmTitle": "¿Eliminar su acceso de administrador?", "removeOwnAdminRoleConfirmTitle": "¿Eliminar su acceso de administrador?",
"removeOwnAdminRoleConfirmDescription": "Ya no tendrá permisos de administrador en esta organización después de guardar. Otro administrador puede restaurar el acceso si es necesario.", "removeOwnAdminRoleConfirmDescription": "Ya no tendrá permisos de administrador en esta organización después de guardar. Otro administrador puede restaurar el acceso si es necesario.",
"removeOwnAdminRoleConfirmButton": "Eliminar Mi Acceso de Administrador", "removeOwnAdminRoleConfirmButton": "Eliminar Mi Acceso de Administrador",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Autenticación Básica del Encabezado", "policyAuthHeaderAuthTitle": "Autenticación Básica del Encabezado",
"policyAuthHeaderAuthDescription": "Valida un nombre y valor de encabezado HTTP personalizado en cada petición", "policyAuthHeaderAuthDescription": "Valida un nombre y valor de encabezado HTTP personalizado en cada petición",
"policyAuthHeaderAuthSummary": "Encabezado configurado", "policyAuthHeaderAuthSummary": "Encabezado configurado",
"policyAuthHeaderName": "Nombre del encabezado", "policyAuthHeaderName": "Usuario",
"policyAuthHeaderValue": "Valor esperado", "policyAuthHeaderValue": "Contraseña",
"policyAuthSetPasscode": "Establecer Código de Acceso", "policyAuthSetPasscode": "Establecer Código de Acceso",
"policyAuthSetPincode": "Establecer Código PIN", "policyAuthSetPincode": "Establecer Código PIN",
"policyAuthSetEmailWhitelist": "Establecer Lista Blanca de Correo", "policyAuthSetEmailWhitelist": "Establecer Lista Blanca de Correo",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Establecer Pincode del recurso", "actionSetResourcePincode": "Establecer Pincode del recurso",
"actionSetResourceEmailWhitelist": "Establecer lista blanca de correo de recursos", "actionSetResourceEmailWhitelist": "Establecer lista blanca de correo de recursos",
"actionGetResourceEmailWhitelist": "Obtener correo electrónico de recursos", "actionGetResourceEmailWhitelist": "Obtener correo electrónico de recursos",
"actionGetResourcePolicy": "Obtener política de recursos",
"actionUpdateResourcePolicy": "Actualizar política de recursos",
"actionSetResourcePolicyUsers": "Definir política de recursos para usuarios",
"actionSetResourcePolicyRoles": "Definir roles de política de recursos",
"actionSetResourcePolicyPassword": "Definir contraseña de política de recursos",
"actionSetResourcePolicyPincode": "Definir Pincode de política de recursos",
"actionSetResourcePolicyHeaderAuth": "Definir autenticación de encabezado de política de recursos",
"actionSetResourcePolicyWhitelist": "Definir lista blanca de correos de política de recursos",
"actionSetResourcePolicyRules": "Definir reglas de política de recursos",
"actionCreateTarget": "Crear destino", "actionCreateTarget": "Crear destino",
"actionDeleteTarget": "Eliminar destino", "actionDeleteTarget": "Eliminar destino",
"actionGetTarget": "Obtener objetivo", "actionGetTarget": "Obtener objetivo",
@@ -1507,6 +1519,30 @@
"navbar": "Menú de navegación", "navbar": "Menú de navegación",
"navbarDescription": "Menú de navegación principal para la aplicación", "navbarDescription": "Menú de navegación principal para la aplicación",
"navbarDocsLink": "Documentación", "navbarDocsLink": "Documentación",
"commandPaletteTitle": "Paleta de Comandos",
"commandPaletteDescription": "Buscar páginas, organizaciones, recursos y acciones",
"commandPaletteSearchPlaceholder": "Buscar páginas, recursos, acciones...",
"commandPaletteNoResults": "No se han encontrado resultados.",
"commandPaletteSearching": "Buscando...",
"commandPaletteNavigation": "Navegación",
"commandPaletteOrganizations": "Organizaciones",
"commandPaletteSites": "Sitios",
"commandPaletteResources": "Recursos",
"commandPaletteUsers": "Usuarios",
"commandPaletteClients": "Clientes de Máquina",
"commandPaletteActions": "Acciones",
"commandPaletteCreateSite": "Crear Sitio",
"commandPaletteCreateProxyResource": "Crear recurso público",
"commandPaletteCreatePrivateResource": "Crear recurso privado",
"commandPaletteCreateUser": "Crear Usuario",
"commandPaletteCreateApiKey": "Crear Clave API",
"commandPaletteCreateMachineClient": "Crear Cliente de Máquina",
"commandPaletteCreateAlertRule": "Crear Regla de Alerta",
"commandPaletteCreateIdentityProvider": "Crear proveedor de identidad",
"commandPaletteToggleTheme": "Cambiar tema",
"commandPaletteChooseOrganization": "Elegir organización",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "No se puede habilitar 2FA", "otpErrorEnable": "No se puede habilitar 2FA",
"otpErrorEnableDescription": "Se ha producido un error al habilitar 2FA", "otpErrorEnableDescription": "Se ha producido un error al habilitar 2FA",
"otpSetupCheckCode": "Por favor, introduzca un código de 6 dígitos", "otpSetupCheckCode": "Por favor, introduzca un código de 6 dígitos",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Gestión", "sidebarManagement": "Gestión",
"sidebarBillingAndLicenses": "Facturación y licencias", "sidebarBillingAndLicenses": "Facturación y licencias",
"sidebarLogsAnalytics": "Analíticas", "sidebarLogsAnalytics": "Analíticas",
"commandSites": "Sitios",
"commandActionModeInfo": "Escriba \">\" Para abrir el modo de acción",
"commandResources": "Recursos",
"commandProxyResources": "Recursos Públicos",
"commandClientResources": "Recursos Privados",
"commandClients": "Clientes",
"commandUserDevices": "Dispositivos de Usuario",
"commandMachineClients": "Clientes de Máquina",
"commandDomains": "Dominios",
"commandRemoteExitNodes": "Nodos Remotos",
"commandTeam": "Equipo",
"commandUsers": "Usuarios",
"commandRoles": "Roles",
"commandInvitations": "Invitaciones",
"commandPolicies": "Políticas Compartidas",
"commandResourcePolicies": "Políticas de Recursos Públicos",
"commandIdentityProviders": "Proveedores de identidad",
"commandApprovals": "Solicitudes de Aprobación",
"commandShareableLinks": "Enlaces compartibles",
"commandOrganization": "Organización",
"commandLogsAndAnalytics": "Registros y Análisis",
"commandLogsAnalytics": "Análisis",
"commandLogsRequest": "Registros de Solicitud HTTP",
"commandLogsAccess": "Registros de acceso",
"commandLogsAction": "Registros de acción de administrador",
"commandLogsConnection": "Registros de conexión",
"commandLogsStreaming": "Transmisión de Eventos",
"commandManagement": "Gestión",
"commandAlerting": "Alertas",
"commandProvisioning": "Aprovisionamiento",
"commandBluePrints": "Planos",
"commandApiKeys": "Claves API",
"commandBillingAndLicenses": "Facturación y Licencias",
"commandBilling": "Facturación",
"commandEnterpriseLicenses": "Licencias",
"commandSettings": "Ajustes",
"commandLauncher": "Lanzador",
"commandResourceLauncher": "Lanzador de Recursos",
"commandSearchResults": "Resultados de búsqueda",
"alertingTitle": "Alertas", "alertingTitle": "Alertas",
"alertingDescription": "Definir fuentes, disparadores y acciones para notificaciones", "alertingDescription": "Definir fuentes, disparadores y acciones para notificaciones",
"alertingRules": "Reglas de alerta", "alertingRules": "Reglas de alerta",
@@ -1915,6 +1990,9 @@
"billingDomains": "Dominios", "billingDomains": "Dominios",
"billingOrganizations": "Orgánico", "billingOrganizations": "Orgánico",
"billingRemoteExitNodes": "Nodos remotos", "billingRemoteExitNodes": "Nodos remotos",
"billingPublicResources": "Recursos Públicos",
"billingPrivateResources": "Recursos Privados",
"billingMachineClients": "Clientes de Máquina",
"billingNoLimitConfigured": "No se ha configurado ningún límite", "billingNoLimitConfigured": "No se ha configurado ningún límite",
"billingEstimatedPeriod": "Período de facturación estimado", "billingEstimatedPeriod": "Período de facturación estimado",
"billingIncludedUsage": "Uso incluido", "billingIncludedUsage": "Uso incluido",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Cuántos usuarios puedes usar", "billingUsersInfo": "Cuántos usuarios puedes usar",
"billingDomainInfo": "Cuántos dominios puedes usar", "billingDomainInfo": "Cuántos dominios puedes usar",
"billingRemoteExitNodesInfo": "Cuántos nodos remotos puedes usar", "billingRemoteExitNodesInfo": "Cuántos nodos remotos puedes usar",
"billingPublicResourcesInfo": "Cuántos recursos públicos puedes usar",
"billingPrivateResourcesInfo": "Cuántos recursos privados puedes usar",
"billingMachineClientsInfo": "Cuántos clientes de máquina puedes usar",
"billingLicenseKeys": "Claves de licencia", "billingLicenseKeys": "Claves de licencia",
"billingLicenseKeysDescription": "Administrar las suscripciones de su clave de licencia", "billingLicenseKeysDescription": "Administrar las suscripciones de su clave de licencia",
"billingLicenseSubscription": "Suscripción de licencia", "billingLicenseSubscription": "Suscripción de licencia",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Cerrar", "createInternalResourceDialogClose": "Cerrar",
"createInternalResourceDialogCreateClientResource": "Crear recurso privado", "createInternalResourceDialogCreateClientResource": "Crear recurso privado",
"createInternalResourceDialogCreateClientResourceDescription": "Crear un nuevo recurso que sólo será accesible a los clientes conectados a la organización", "createInternalResourceDialogCreateClientResourceDescription": "Crear un nuevo recurso que sólo será accesible a los clientes conectados a la organización",
"privateResourceCreatePageSeeAll": "Ver todos los recursos privados",
"privateResourceAllowIcmpPing": "Permitir ping ICMP",
"privateResourceNetworkAccess": "Acceso de red",
"privateResourceNetworkAccessDescription": "Controlar el acceso a puertos TCP/UDP y si se permite ping ICMP para este recurso.",
"hostSettings": "Configuraciones del anfitrión",
"cidrSettings": "Configuraciones CIDR",
"createInternalResourceDialogResourceProperties": "Propiedades del recurso", "createInternalResourceDialogResourceProperties": "Propiedades del recurso",
"createInternalResourceDialogName": "Nombre", "createInternalResourceDialogName": "Nombre",
"createInternalResourceDialogSite": "Sitio", "createInternalResourceDialogSite": "Sitio",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "No hay nodos disponibles para esta organización. Crea un nodo primero para usar sitios locales.", "noRemoteExitNodesAvailableDescription": "No hay nodos disponibles para esta organización. Crea un nodo primero para usar sitios locales.",
"exitNode": "Nodo de Salida", "exitNode": "Nodo de Salida",
"country": "País", "country": "País",
"countryIsNot": "El país no es",
"rulesMatchCountry": "Actualmente basado en IP de origen", "rulesMatchCountry": "Actualmente basado en IP de origen",
"region": "Región", "region": "Región",
"selectRegion": "Seleccionar región", "selectRegion": "Seleccionar región",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "La configuración de autenticación de doble factor es requerida. Por favor, inicia sesión de nuevo a través de {dashboardUrl}/auth/login completa este paso. Luego, vuelve aquí.", "twoFactorSetupRequired": "La configuración de autenticación de doble factor es requerida. Por favor, inicia sesión de nuevo a través de {dashboardUrl}/auth/login completa este paso. Luego, vuelve aquí.",
"additionalSecurityRequired": "Seguridad adicional requerida", "additionalSecurityRequired": "Seguridad adicional requerida",
"organizationRequiresAdditionalSteps": "Esta organización requiere pasos de seguridad adicionales antes de poder acceder a los recursos.", "organizationRequiresAdditionalSteps": "Esta organización requiere pasos de seguridad adicionales antes de poder acceder a los recursos.",
"sessionExpired": "Sesión Expirada",
"sessionExpiredReauthRequired": "Su sesión ha expirado según la política de seguridad de su organización. Por favor, vuelva a autenticarse para continuar.",
"reauthenticate": "Volver a autenticar",
"completeTheseSteps": "Completa estos pasos", "completeTheseSteps": "Completa estos pasos",
"enableTwoFactorAuthentication": "Habilitar autenticación de doble factor", "enableTwoFactorAuthentication": "Habilitar autenticación de doble factor",
"completeSecuritySteps": "Pasos de seguridad completos", "completeSecuritySteps": "Pasos de seguridad completos",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Agregar usuarios", "editInternalResourceDialogAddUsers": "Agregar usuarios",
"editInternalResourceDialogAddClients": "Agregar clientes", "editInternalResourceDialogAddClients": "Agregar clientes",
"editInternalResourceDialogDestinationLabel": "Destino", "editInternalResourceDialogDestinationLabel": "Destino",
"editInternalResourceDialogDestinationDescription": "Especifique la dirección de destino para el recurso interno. Puede ser un nombre de host, dirección IP o rango CIDR dependiendo del modo seleccionado. Opcionalmente establezca un alias DNS interno para una identificación más fácil.", "editInternalResourceDialogDestinationDescription": "Elija dónde se ejecuta este recurso y cómo lo alcanzan los clientes",
"internalResourceFormMultiSiteRoutingHelp": "Seleccionar múltiples sitios habilita el enrutamiento resistente y la conmutación por error para alta disponibilidad.", "internalResourceFormMultiSiteRoutingHelp": "Seleccionar múltiples sitios habilita el enrutamiento resistente y la conmutación por error para alta disponibilidad.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Más información", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Más información",
"editInternalResourceDialogPortRestrictionsDescription": "Restringir el acceso a puertos TCP/UDP específicos o permitir/bloquear todos los puertos.", "editInternalResourceDialogPortRestrictionsDescription": "Restringir el acceso a puertos TCP/UDP específicos o permitir/bloquear todos los puertos.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Recurso Deshabilitado", "memberPortalResourceDisabled": "Recurso Deshabilitado",
"memberPortalShowingResources": "Mostrando {start}-{end} de {total} recursos", "memberPortalShowingResources": "Mostrando {start}-{end} de {total} recursos",
"resourceLauncherTitle": "Lanzador de Recursos", "resourceLauncherTitle": "Lanzador de Recursos",
"resourceLauncherDescription": "Ve los detalles de los recursos y lánzalos desde un solo lugar", "resourceSidebarLauncherTitle": "Lanzador",
"resourceLauncherSearchPlaceholder": "Buscar en todos los sitios...", "resourceLauncherDescription": "Ver todos los recursos disponibles y lanzarlos desde un único centro",
"resourceLauncherSearchPlaceholder": "Buscar tus recursos...",
"resourceLauncherDefaultView": "Predeterminado", "resourceLauncherDefaultView": "Predeterminado",
"resourceLauncherSaveView": "Guardar Vista", "resourceLauncherSaveView": "Guardar Vista",
"resourceLauncherSaveToCurrentView": "Guardar en la Vista Actual", "resourceLauncherSaveToCurrentView": "Guardar en la Vista Actual",
"resourceLauncherSaveDefaultPersonal": "Guardar para mí",
"resourceLauncherResetView": "Restablecer Vista", "resourceLauncherResetView": "Restablecer Vista",
"resourceLauncherResetSystemDefault": "Restaurar a la configuración predeterminada del sistema",
"resourceLauncherSystemDefaultRestored": "Configuración del sistema restaurada",
"resourceLauncherSystemDefaultRestoredDescription": "La vista predeterminada se ha restablecido a la configuración original.",
"resourceLauncherSaveAsNewView": "Guardar como Nueva Vista", "resourceLauncherSaveAsNewView": "Guardar como Nueva Vista",
"resourceLauncherSaveAsNewViewDescription": "Ponle un nombre a esta vista para guardar tus filtros y diseño actuales.", "resourceLauncherSaveAsNewViewDescription": "Ponle un nombre a esta vista para guardar tus filtros y diseño actuales.",
"resourceLauncherSaveForEveryone": "Guardar para Todos", "resourceLauncherSaveForEveryone": "Guardar para Todos",
"resourceLauncherSaveForEveryoneDescription": "Comparte esta vista con todos los miembros de la organización. Si está desmarcado, la vista solo es visible para ti.", "resourceLauncherSaveForEveryoneDescription": "Comparte esta vista con todos los miembros de la organización. Si está desmarcado, la vista solo es visible para ti.",
"resourceLauncherMakePersonal": "Hacer Personal", "resourceLauncherMakePersonal": "Hacer Personal",
"resourceLauncherFilter": "Filtro", "resourceLauncherFilter": "Filtro",
"resourceLauncherFilterWithCount": "Filtro, {count} aplicado",
"resourceLauncherSort": "Ordenar", "resourceLauncherSort": "Ordenar",
"resourceLauncherSortAscending": "Ordenar Ascendente", "resourceLauncherSortAscending": "Ordenar Ascendente",
"resourceLauncherSortDescending": "Ordenar Descendente", "resourceLauncherSortDescending": "Ordenar Descendente",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Agrupar Por", "resourceLauncherGroupBy": "Agrupar Por",
"resourceLauncherGroupBySite": "Sitio", "resourceLauncherGroupBySite": "Sitio",
"resourceLauncherGroupByLabel": "Etiqueta", "resourceLauncherGroupByLabel": "Etiqueta",
"resourceLauncherGroupByNone": "Ninguna",
"resourceLauncherLayout": "Disposición", "resourceLauncherLayout": "Disposición",
"resourceLauncherLayoutGrid": "Cuadrícula", "resourceLauncherLayoutGrid": "Cuadrícula",
"resourceLauncherLayoutList": "Lista", "resourceLauncherLayoutList": "Lista",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Mostrar Etiquetas del Sitio", "resourceLauncherShowSiteTags": "Mostrar Etiquetas del Sitio",
"resourceLauncherShowRecents": "Mostrar Recientes", "resourceLauncherShowRecents": "Mostrar Recientes",
"resourceLauncherDeleteView": "Eliminar Vista", "resourceLauncherDeleteView": "Eliminar Vista",
"resourceLauncherDeleteViewTitle": "Eliminar Vista",
"resourceLauncherDeleteViewQuestion": "¿Está seguro de que desea eliminar esta vista de lanzador?",
"resourceLauncherDeleteViewConfirm": "Eliminar Vista",
"resourceLauncherViewAsAdmin": "Ver como Administrador", "resourceLauncherViewAsAdmin": "Ver como Administrador",
"resourceLauncherResourceDetailsDescription": "Ver detalles de este recurso.", "resourceLauncherResourceDetailsDescription": "Información de conexión y estado de este recurso.",
"resourceLauncherResourceDetails": "Detalles del recurso",
"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",
"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",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Sin Etiqueta", "resourceLauncherUnlabeled": "Sin Etiqueta",
"resourceLauncherNoSite": "Sin Sitio", "resourceLauncherNoSite": "Sin Sitio",
"resourceLauncherNoResourcesInGroup": "No hay recursos en este grupo", "resourceLauncherNoResourcesInGroup": "No hay recursos en este grupo",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "No se Encontraron Recursos", "resourceLauncherEmptyStateNoResultsTitle": "No se Encontraron Recursos",
"resourceLauncherEmptyStateNoResultsDescription": "No hay recursos que coincidan con tu búsqueda o filtros actuales. Intenta ajustarlos para encontrar lo que buscas.", "resourceLauncherEmptyStateNoResultsDescription": "No hay recursos que coincidan con tu búsqueda o filtros actuales. Intenta ajustarlos para encontrar lo que buscas.",
"resourceLauncherEmptyStateNoResultsWithQuery": "No hay recursos que coincidan con \"{query}\". Intenta ajustar tu búsqueda o borrar filtros para ver todos los recursos.", "resourceLauncherEmptyStateNoResultsWithQuery": "No hay recursos que coincidan con \"{query}\". Intenta ajustar tu búsqueda o borrar filtros para ver todos los recursos.",
"resourceLauncherSearchFirstTitle": "Buscar o filtrar para navegar",
"resourceLauncherSearchFirstDescription": "Tiene acceso a muchos recursos. Use la búsqueda o filtre por sitio o etiqueta para encontrar lo que necesita.",
"resourceLauncherSiteGroupingDisabled": "La agrupación por sitios no está disponible en esta escala. Filtre por sitio para agrupar un conjunto más pequeño.",
"resourceLauncherLabelGroupingDisabled": "La agrupación por etiquetas no está disponible en esta escala.",
"resourceLauncherCompactModeHint": "Mostrando una lista simplificada para una navegación más rápida. Use la búsqueda o los filtros para limitar los resultados.",
"resourceLauncherCompactGroupingHint": "Aplique filtros de sitio o etiqueta para habilitar la agrupación.",
"resourceLauncherCopiedToClipboard": "Copiado al portapapeles", "resourceLauncherCopiedToClipboard": "Copiado al portapapeles",
"resourceLauncherCopiedAccessDescription": "El acceso al recurso ha sido copiado a tu portapapeles.", "resourceLauncherCopiedAccessDescription": "El acceso al recurso ha sido copiado a tu portapapeles.",
"resourceLauncherViewNamePlaceholder": "Nombre de la Vista", "resourceLauncherViewNamePlaceholder": "Nombre de la Vista",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Requêtes de proxy sur TCP/UDP brute en utilisant un numéro de port. Nécessite des sites pour se connecter à un noeud distant.", "resourceRawDescriptionCloud": "Requêtes de proxy sur TCP/UDP brute en utilisant un numéro de port. Nécessite des sites pour se connecter à un noeud distant.",
"resourceCreate": "Créer une ressource", "resourceCreate": "Créer une ressource",
"resourceCreateDescription": "Suivez les étapes ci-dessous pour créer une nouvelle ressource", "resourceCreateDescription": "Suivez les étapes ci-dessous pour créer une nouvelle ressource",
"resourcePublicCreate": "Créer une ressource publique",
"resourcePublicCreateDescription": "Suivez les étapes ci-dessous pour créer une nouvelle ressource publique accessible via un navigateur web",
"resourceCreateGeneralDescription": "Configurer les paramètres de ressource de base, y compris le nom et le type", "resourceCreateGeneralDescription": "Configurer les paramètres de ressource de base, y compris le nom et le type",
"resourceSeeAll": "Voir toutes les ressources", "resourceSeeAll": "Voir toutes les ressources",
"resourceCreateGeneral": "Général", "resourceCreateGeneral": "Général",
@@ -613,7 +615,8 @@
"idpNameInternal": "Interne", "idpNameInternal": "Interne",
"emailInvalid": "Adresse e-mail invalide", "emailInvalid": "Adresse e-mail invalide",
"inviteValidityDuration": "Veuillez sélectionner une durée", "inviteValidityDuration": "Veuillez sélectionner une durée",
"accessRoleSelectPlease": "Veuillez sélectionner un rôle", "accessRoleSelectPlease": "Un utilisateur doit appartenir à au moins un rôle.",
"accessRoleRequired": "Rôle requis",
"removeOwnAdminRoleConfirmTitle": "Retirer votre accès administrateur ?", "removeOwnAdminRoleConfirmTitle": "Retirer votre accès administrateur ?",
"removeOwnAdminRoleConfirmDescription": "Vous n'aurez plus de droits d'administrateur dans cette organisation après avoir enregistré. Un autre administrateur pourra restaurer cet accès si nécessaire.", "removeOwnAdminRoleConfirmDescription": "Vous n'aurez plus de droits d'administrateur dans cette organisation après avoir enregistré. Un autre administrateur pourra restaurer cet accès si nécessaire.",
"removeOwnAdminRoleConfirmButton": "Retirer mon accès administrateur", "removeOwnAdminRoleConfirmButton": "Retirer mon accès administrateur",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Authentification de l'en-tête de base", "policyAuthHeaderAuthTitle": "Authentification de l'en-tête de base",
"policyAuthHeaderAuthDescription": "Validez un nom et une valeur d'en-tête HTTP personnalisé à chaque requête", "policyAuthHeaderAuthDescription": "Validez un nom et une valeur d'en-tête HTTP personnalisé à chaque requête",
"policyAuthHeaderAuthSummary": "En-tête configuré", "policyAuthHeaderAuthSummary": "En-tête configuré",
"policyAuthHeaderName": "Nom de l'en-tête", "policyAuthHeaderName": "Nom d'utilisateur",
"policyAuthHeaderValue": "Valeur attendue", "policyAuthHeaderValue": "Mot de passe",
"policyAuthSetPasscode": "Définir le code confidentiel", "policyAuthSetPasscode": "Définir le code confidentiel",
"policyAuthSetPincode": "Définir le code PIN", "policyAuthSetPincode": "Définir le code PIN",
"policyAuthSetEmailWhitelist": "Définir la liste blanche des e-mails", "policyAuthSetEmailWhitelist": "Définir la liste blanche des e-mails",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Définir le code PIN de la ressource", "actionSetResourcePincode": "Définir le code PIN de la ressource",
"actionSetResourceEmailWhitelist": "Définir la liste blanche des emails de la ressource", "actionSetResourceEmailWhitelist": "Définir la liste blanche des emails de la ressource",
"actionGetResourceEmailWhitelist": "Obtenir la liste blanche des emails de la ressource", "actionGetResourceEmailWhitelist": "Obtenir la liste blanche des emails de la ressource",
"actionGetResourcePolicy": "Obtenir une politique de ressources",
"actionUpdateResourcePolicy": "Mettre à jour la politique de ressources",
"actionSetResourcePolicyUsers": "Définir les utilisateurs de la politique de ressources",
"actionSetResourcePolicyRoles": "Définir les rôles de la politique de ressources",
"actionSetResourcePolicyPassword": "Définir le mot de passe de la politique de ressources",
"actionSetResourcePolicyPincode": "Définir le code PIN de la politique de ressources",
"actionSetResourcePolicyHeaderAuth": "Définir l'authentification des en-têtes de la politique de ressources",
"actionSetResourcePolicyWhitelist": "Définir la liste blanche des emails de la politique de ressources",
"actionSetResourcePolicyRules": "Définir les règles de la politique de ressources",
"actionCreateTarget": "Créer une cible", "actionCreateTarget": "Créer une cible",
"actionDeleteTarget": "Supprimer une cible", "actionDeleteTarget": "Supprimer une cible",
"actionGetTarget": "Obtenir une cible", "actionGetTarget": "Obtenir une cible",
@@ -1507,6 +1519,30 @@
"navbar": "Menu de navigation", "navbar": "Menu de navigation",
"navbarDescription": "Menu de navigation principal de l'application", "navbarDescription": "Menu de navigation principal de l'application",
"navbarDocsLink": "Documentation", "navbarDocsLink": "Documentation",
"commandPaletteTitle": "Palette de commandes",
"commandPaletteDescription": "Rechercher des pages, organisations, ressources et actions",
"commandPaletteSearchPlaceholder": "Rechercher des pages, ressources, actions...",
"commandPaletteNoResults": "Aucun résultat trouvé.",
"commandPaletteSearching": "Recherche en cours...",
"commandPaletteNavigation": "Navigation",
"commandPaletteOrganizations": "Organisations",
"commandPaletteSites": "Sites",
"commandPaletteResources": "Ressource",
"commandPaletteUsers": "Utilisateurs",
"commandPaletteClients": "Liste des clients",
"commandPaletteActions": "Actions",
"commandPaletteCreateSite": "Créer un site",
"commandPaletteCreateProxyResource": "Créer une ressource publique",
"commandPaletteCreatePrivateResource": "Créer une ressource privée",
"commandPaletteCreateUser": "Créer un utilisateur",
"commandPaletteCreateApiKey": "Créer une clé API",
"commandPaletteCreateMachineClient": "Créer un client machine",
"commandPaletteCreateAlertRule": "Créer une règle d'alerte",
"commandPaletteCreateIdentityProvider": "Créer un fournisseur d'identité",
"commandPaletteToggleTheme": "Changer de thème",
"commandPaletteChooseOrganization": "Choisir une organisation",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Impossible d'activer l'A2F", "otpErrorEnable": "Impossible d'activer l'A2F",
"otpErrorEnableDescription": "Une erreur s'est produite lors de l'activation de l'A2F", "otpErrorEnableDescription": "Une erreur s'est produite lors de l'activation de l'A2F",
"otpSetupCheckCode": "Veuillez entrer un code à 6 chiffres", "otpSetupCheckCode": "Veuillez entrer un code à 6 chiffres",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Gestion", "sidebarManagement": "Gestion",
"sidebarBillingAndLicenses": "Facturation & Licences", "sidebarBillingAndLicenses": "Facturation & Licences",
"sidebarLogsAnalytics": "Analyses", "sidebarLogsAnalytics": "Analyses",
"commandSites": "Nœuds",
"commandActionModeInfo": "Tapez \">\" Pour ouvrir le mode action",
"commandResources": "Ressource",
"commandProxyResources": "Ressources publiques",
"commandClientResources": "Ressources privées",
"commandClients": "Clients",
"commandUserDevices": "Appareils utilisateur",
"commandMachineClients": "Clients machine",
"commandDomains": "Domaines",
"commandRemoteExitNodes": "Nœuds distants",
"commandTeam": "Équipe",
"commandUsers": "Utilisateurs",
"commandRoles": "Rôles",
"commandInvitations": "Invitations",
"commandPolicies": "Politiques partagées",
"commandResourcePolicies": "Politiques de ressources publiques",
"commandIdentityProviders": "Fournisseurs d'identité",
"commandApprovals": "Demandes d'approbation",
"commandShareableLinks": "Liens partageables",
"commandOrganization": "Organisation",
"commandLogsAndAnalytics": "Journaux & Analyses",
"commandLogsAnalytics": "Analyses",
"commandLogsRequest": "Journaux des requêtes HTTP",
"commandLogsAccess": "Journaux d'authentification",
"commandLogsAction": "Journaux des actions administratives",
"commandLogsConnection": "Journaux de connexion",
"commandLogsStreaming": "Diffusion d'événements",
"commandManagement": "Gestion",
"commandAlerting": "Alerte",
"commandProvisioning": "Provisionnement",
"commandBluePrints": "Configs",
"commandApiKeys": "Clés d'API",
"commandBillingAndLicenses": "Facturation & Licences",
"commandBilling": "Facturation",
"commandEnterpriseLicenses": "Licence",
"commandSettings": "Réglages",
"commandLauncher": "Lanceur",
"commandResourceLauncher": "Lanceur de ressources",
"commandSearchResults": "Résultats de recherche",
"alertingTitle": "Alertes", "alertingTitle": "Alertes",
"alertingDescription": "Définissez des sources, des déclencheurs et des actions pour les notifications", "alertingDescription": "Définissez des sources, des déclencheurs et des actions pour les notifications",
"alertingRules": "Règles d'alerte", "alertingRules": "Règles d'alerte",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domaines", "billingDomains": "Domaines",
"billingOrganizations": "Organes", "billingOrganizations": "Organes",
"billingRemoteExitNodes": "Nœuds distants", "billingRemoteExitNodes": "Nœuds distants",
"billingPublicResources": "Ressources publiques",
"billingPrivateResources": "Ressources privées",
"billingMachineClients": "Clients machine",
"billingNoLimitConfigured": "Aucune limite configurée", "billingNoLimitConfigured": "Aucune limite configurée",
"billingEstimatedPeriod": "Période de facturation estimée", "billingEstimatedPeriod": "Période de facturation estimée",
"billingIncludedUsage": "Utilisation incluse", "billingIncludedUsage": "Utilisation incluse",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Combien d'utilisateurs vous pouvez utiliser", "billingUsersInfo": "Combien d'utilisateurs vous pouvez utiliser",
"billingDomainInfo": "Combien de domaines vous pouvez utiliser", "billingDomainInfo": "Combien de domaines vous pouvez utiliser",
"billingRemoteExitNodesInfo": "Combien de nœuds distants vous pouvez utiliser", "billingRemoteExitNodesInfo": "Combien de nœuds distants vous pouvez utiliser",
"billingPublicResourcesInfo": "Combien de ressources publiques pouvez-vous utiliser",
"billingPrivateResourcesInfo": "Combien de ressources privées pouvez-vous utiliser",
"billingMachineClientsInfo": "Combien de clients machine pouvez-vous utiliser",
"billingLicenseKeys": "Clés de licence", "billingLicenseKeys": "Clés de licence",
"billingLicenseKeysDescription": "Gérer vos abonnements à la clé de licence", "billingLicenseKeysDescription": "Gérer vos abonnements à la clé de licence",
"billingLicenseSubscription": "Abonnement à la licence", "billingLicenseSubscription": "Abonnement à la licence",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Fermer", "createInternalResourceDialogClose": "Fermer",
"createInternalResourceDialogCreateClientResource": "Créer une ressource privée", "createInternalResourceDialogCreateClientResource": "Créer une ressource privée",
"createInternalResourceDialogCreateClientResourceDescription": "Créer une nouvelle ressource qui ne sera accessible qu'aux clients connectés à l'organisation", "createInternalResourceDialogCreateClientResourceDescription": "Créer une nouvelle ressource qui ne sera accessible qu'aux clients connectés à l'organisation",
"privateResourceCreatePageSeeAll": "Voir toutes les ressources privées",
"privateResourceAllowIcmpPing": "Autoriser le ping ICMP",
"privateResourceNetworkAccess": "Accès au réseau",
"privateResourceNetworkAccessDescription": "Contrôler l'accès aux ports TCP/UDP et si le ping ICMP est autorisé pour cette ressource.",
"hostSettings": "Paramètres de l'hôte",
"cidrSettings": "Paramètres CIDR",
"createInternalResourceDialogResourceProperties": "Propriétés de la ressource", "createInternalResourceDialogResourceProperties": "Propriétés de la ressource",
"createInternalResourceDialogName": "Nom", "createInternalResourceDialogName": "Nom",
"createInternalResourceDialogSite": "Site", "createInternalResourceDialogSite": "Site",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Aucun noeud n'est disponible pour cette organisation. Créez d'abord un noeud pour utiliser des sites locaux.", "noRemoteExitNodesAvailableDescription": "Aucun noeud n'est disponible pour cette organisation. Créez d'abord un noeud pour utiliser des sites locaux.",
"exitNode": "Nœud de sortie", "exitNode": "Nœud de sortie",
"country": "Pays", "country": "Pays",
"countryIsNot": "Le pays n'est pas",
"rulesMatchCountry": "Actuellement basé sur l'IP source", "rulesMatchCountry": "Actuellement basé sur l'IP source",
"region": "Région", "region": "Région",
"selectRegion": "Sélectionner une région", "selectRegion": "Sélectionner une région",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "La configuration d'authentification à deux facteurs est requise. Veuillez vous reconnecter via {dashboardUrl}/auth/login terminé cette étape. Puis revenez ici.", "twoFactorSetupRequired": "La configuration d'authentification à deux facteurs est requise. Veuillez vous reconnecter via {dashboardUrl}/auth/login terminé cette étape. Puis revenez ici.",
"additionalSecurityRequired": "Sécurité supplémentaire requise", "additionalSecurityRequired": "Sécurité supplémentaire requise",
"organizationRequiresAdditionalSteps": "Cette organisation nécessite des étapes de sécurité supplémentaires avant de pouvoir accéder aux ressources.", "organizationRequiresAdditionalSteps": "Cette organisation nécessite des étapes de sécurité supplémentaires avant de pouvoir accéder aux ressources.",
"sessionExpired": "Session expirée",
"sessionExpiredReauthRequired": "Votre session a expiré selon la politique de sécurité de votre organisation. Veuillez vous ré-authentifier pour continuer.",
"reauthenticate": "Se ré-authentifier",
"completeTheseSteps": "Compléter ces étapes", "completeTheseSteps": "Compléter ces étapes",
"enableTwoFactorAuthentication": "Activer l'authentification à deux facteurs", "enableTwoFactorAuthentication": "Activer l'authentification à deux facteurs",
"completeSecuritySteps": "Compléter les étapes de sécurité", "completeSecuritySteps": "Compléter les étapes de sécurité",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Ajouter des utilisateurs", "editInternalResourceDialogAddUsers": "Ajouter des utilisateurs",
"editInternalResourceDialogAddClients": "Ajouter des clients", "editInternalResourceDialogAddClients": "Ajouter des clients",
"editInternalResourceDialogDestinationLabel": "Destination", "editInternalResourceDialogDestinationLabel": "Destination",
"editInternalResourceDialogDestinationDescription": "Indiquez l'adresse de destination pour la ressource interne. Cela peut être un nom d'hôte, une adresse IP ou une plage CIDR selon le mode sélectionné. Définissez éventuellement un alias DNS interne pour une identification plus facile.", "editInternalResourceDialogDestinationDescription": "Choisissez où cette ressource fonctionne et comment les clients l'atteignent",
"internalResourceFormMultiSiteRoutingHelp": "La sélection de plusieurs sites permet un routage résilient et un basculement pour une haute disponibilité.", "internalResourceFormMultiSiteRoutingHelp": "La sélection de plusieurs sites permet un routage résilient et un basculement pour une haute disponibilité.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "En savoir plus", "internalResourceFormMultiSiteRoutingHelpLearnMore": "En savoir plus",
"editInternalResourceDialogPortRestrictionsDescription": "Restreindre l'accès à des ports TCP/UDP spécifiques ou autoriser/bloquer tous les ports.", "editInternalResourceDialogPortRestrictionsDescription": "Restreindre l'accès à des ports TCP/UDP spécifiques ou autoriser/bloquer tous les ports.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Ressource désactivée", "memberPortalResourceDisabled": "Ressource désactivée",
"memberPortalShowingResources": "Affichage de {start}-{end} sur {total} ressources", "memberPortalShowingResources": "Affichage de {start}-{end} sur {total} ressources",
"resourceLauncherTitle": "Lanceur de ressources", "resourceLauncherTitle": "Lanceur de ressources",
"resourceLauncherDescription": "Afficher les détails des ressources et les lancer depuis un seul endroit", "resourceSidebarLauncherTitle": "Lanceur",
"resourceLauncherSearchPlaceholder": "Rechercher sur tous les sites...", "resourceLauncherDescription": "Afficher toutes les ressources disponibles et les lancer depuis un hub central",
"resourceLauncherSearchPlaceholder": "Chercher vos ressources...",
"resourceLauncherDefaultView": "Par défaut", "resourceLauncherDefaultView": "Par défaut",
"resourceLauncherSaveView": "Enregistrer la vue", "resourceLauncherSaveView": "Enregistrer la vue",
"resourceLauncherSaveToCurrentView": "Enregistrer dans la vue actuelle", "resourceLauncherSaveToCurrentView": "Enregistrer dans la vue actuelle",
"resourceLauncherSaveDefaultPersonal": "Sauvegarder pour moi",
"resourceLauncherResetView": "Réinitialiser la vue", "resourceLauncherResetView": "Réinitialiser la vue",
"resourceLauncherResetSystemDefault": "Réinitialiser aux paramètres système par défaut",
"resourceLauncherSystemDefaultRestored": "Paramètre système par défaut restauré",
"resourceLauncherSystemDefaultRestoredDescription": "La vue par défaut a été réinitialisée aux paramètres d'origine.",
"resourceLauncherSaveAsNewView": "Enregistrer comme nouvelle vue", "resourceLauncherSaveAsNewView": "Enregistrer comme nouvelle vue",
"resourceLauncherSaveAsNewViewDescription": "Donnez un nom à cette vue pour enregistrer vos filtres et mise en page actuels.", "resourceLauncherSaveAsNewViewDescription": "Donnez un nom à cette vue pour enregistrer vos filtres et mise en page actuels.",
"resourceLauncherSaveForEveryone": "Enregistrer pour tout le monde", "resourceLauncherSaveForEveryone": "Enregistrer pour tout le monde",
"resourceLauncherSaveForEveryoneDescription": "Partagez cette vue avec tous les membres de l'organisation. Lorsque décochée, la vue est visible uniquement par vous.", "resourceLauncherSaveForEveryoneDescription": "Partagez cette vue avec tous les membres de l'organisation. Lorsque décochée, la vue est visible uniquement par vous.",
"resourceLauncherMakePersonal": "Rendre personnel", "resourceLauncherMakePersonal": "Rendre personnel",
"resourceLauncherFilter": "Filtrer", "resourceLauncherFilter": "Filtrer",
"resourceLauncherFilterWithCount": "Filtrer, {count} appliqué",
"resourceLauncherSort": "Trier", "resourceLauncherSort": "Trier",
"resourceLauncherSortAscending": "Trier par ordre croissant", "resourceLauncherSortAscending": "Trier par ordre croissant",
"resourceLauncherSortDescending": "Trier par ordre décroissant", "resourceLauncherSortDescending": "Trier par ordre décroissant",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Grouper par", "resourceLauncherGroupBy": "Grouper par",
"resourceLauncherGroupBySite": "Nœud", "resourceLauncherGroupBySite": "Nœud",
"resourceLauncherGroupByLabel": "Étiquette", "resourceLauncherGroupByLabel": "Étiquette",
"resourceLauncherGroupByNone": "Aucun",
"resourceLauncherLayout": "Mise en page", "resourceLauncherLayout": "Mise en page",
"resourceLauncherLayoutGrid": "Grille", "resourceLauncherLayoutGrid": "Grille",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Afficher les tags de site", "resourceLauncherShowSiteTags": "Afficher les tags de site",
"resourceLauncherShowRecents": "Afficher les récents", "resourceLauncherShowRecents": "Afficher les récents",
"resourceLauncherDeleteView": "Supprimer la vue", "resourceLauncherDeleteView": "Supprimer la vue",
"resourceLauncherDeleteViewTitle": "Supprimer la vue",
"resourceLauncherDeleteViewQuestion": "Êtes-vous sûr de vouloir supprimer cette vue de lancement ?",
"resourceLauncherDeleteViewConfirm": "Supprimer la vue",
"resourceLauncherViewAsAdmin": "Voir en tant qu'admin", "resourceLauncherViewAsAdmin": "Voir en tant qu'admin",
"resourceLauncherResourceDetailsDescription": "Afficher les détails pour cette ressource.", "resourceLauncherResourceDetailsDescription": "Informations de connexion et statut pour cette ressource.",
"resourceLauncherResourceDetails": "Détails de la ressource",
"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",
"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",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Non étiqueté", "resourceLauncherUnlabeled": "Non étiqueté",
"resourceLauncherNoSite": "Aucun nœud", "resourceLauncherNoSite": "Aucun nœud",
"resourceLauncherNoResourcesInGroup": "Aucune ressource dans ce groupe", "resourceLauncherNoResourcesInGroup": "Aucune ressource dans ce groupe",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Aucune ressource trouvée", "resourceLauncherEmptyStateNoResultsTitle": "Aucune ressource trouvée",
"resourceLauncherEmptyStateNoResultsDescription": "Aucune ressource ne correspond à votre recherche ou filtre actuel. Essayez de les ajuster pour trouver ce que vous cherchez.", "resourceLauncherEmptyStateNoResultsDescription": "Aucune ressource ne correspond à votre recherche ou filtre actuel. Essayez de les ajuster pour trouver ce que vous cherchez.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Aucune ressource ne correspond à \"{query}\". Essayez d'ajuster votre recherche ou de supprimer les filtres pour voir toutes les ressources.", "resourceLauncherEmptyStateNoResultsWithQuery": "Aucune ressource ne correspond à \"{query}\". Essayez d'ajuster votre recherche ou de supprimer les filtres pour voir toutes les ressources.",
"resourceLauncherSearchFirstTitle": "Rechercher ou filtrer pour parcourir",
"resourceLauncherSearchFirstDescription": "Vous avez accès à de nombreuses ressources. Utilisez la recherche ou filtrez par site ou étiquette pour trouver ce dont vous avez besoin.",
"resourceLauncherSiteGroupingDisabled": "Le regroupement par site n'est pas disponible à cette échelle. Filtrez par site pour regrouper un ensemble plus restreint.",
"resourceLauncherLabelGroupingDisabled": "Le regroupement par étiquette n'est pas disponible à cette échelle.",
"resourceLauncherCompactModeHint": "Affichage d'une liste simplifiée pour une navigation plus rapide. Utilisez la recherche ou les filtres pour affiner les résultats.",
"resourceLauncherCompactGroupingHint": "Appliquer des filtres par site ou étiquette pour activer le regroupement.",
"resourceLauncherCopiedToClipboard": "Copié dans le presse-papiers", "resourceLauncherCopiedToClipboard": "Copié dans le presse-papiers",
"resourceLauncherCopiedAccessDescription": "L'accès à la ressource a été copié dans votre presse-papiers.", "resourceLauncherCopiedAccessDescription": "L'accès à la ressource a été copié dans votre presse-papiers.",
"resourceLauncherViewNamePlaceholder": "Nom de la vue", "resourceLauncherViewNamePlaceholder": "Nom de la vue",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Richiesta proxy su TCP/UDP grezzo utilizzando un numero di porta. Richiede siti per connettersi a un nodo remoto.", "resourceRawDescriptionCloud": "Richiesta proxy su TCP/UDP grezzo utilizzando un numero di porta. Richiede siti per connettersi a un nodo remoto.",
"resourceCreate": "Crea Risorsa", "resourceCreate": "Crea Risorsa",
"resourceCreateDescription": "Segui i passaggi seguenti per creare una nuova risorsa", "resourceCreateDescription": "Segui i passaggi seguenti per creare una nuova risorsa",
"resourcePublicCreate": "Crea Risorsa Pubblica",
"resourcePublicCreateDescription": "Segui i passaggi seguenti per creare una nuova risorsa pubblica accessibile tramite un browser web",
"resourceCreateGeneralDescription": "Configura le impostazioni generali delle risorse, inclusi il nome e il tipo", "resourceCreateGeneralDescription": "Configura le impostazioni generali delle risorse, inclusi il nome e il tipo",
"resourceSeeAll": "Vedi Tutte Le Risorse", "resourceSeeAll": "Vedi Tutte Le Risorse",
"resourceCreateGeneral": "Generale", "resourceCreateGeneral": "Generale",
@@ -613,7 +615,8 @@
"idpNameInternal": "Interno", "idpNameInternal": "Interno",
"emailInvalid": "Indirizzo email non valido", "emailInvalid": "Indirizzo email non valido",
"inviteValidityDuration": "Seleziona una durata", "inviteValidityDuration": "Seleziona una durata",
"accessRoleSelectPlease": "Seleziona un ruolo", "accessRoleSelectPlease": "Un utente deve appartenere ad almeno un ruolo.",
"accessRoleRequired": "Ruolo richiesto",
"removeOwnAdminRoleConfirmTitle": "Rimuovere il tuo accesso amministrativo?", "removeOwnAdminRoleConfirmTitle": "Rimuovere il tuo accesso amministrativo?",
"removeOwnAdminRoleConfirmDescription": "Non avrai più i permessi di amministratore in questa organizzazione dopo il salvataggio. Un altro amministratore può ripristinare l'accesso se necessario.", "removeOwnAdminRoleConfirmDescription": "Non avrai più i permessi di amministratore in questa organizzazione dopo il salvataggio. Un altro amministratore può ripristinare l'accesso se necessario.",
"removeOwnAdminRoleConfirmButton": "Rimuovere il Mio Accesso Amministrativo", "removeOwnAdminRoleConfirmButton": "Rimuovere il Mio Accesso Amministrativo",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Autenticazione Header Base", "policyAuthHeaderAuthTitle": "Autenticazione Header Base",
"policyAuthHeaderAuthDescription": "Convalida un nome e un valore di intestazione HTTP personalizzato su ogni richiesta", "policyAuthHeaderAuthDescription": "Convalida un nome e un valore di intestazione HTTP personalizzato su ogni richiesta",
"policyAuthHeaderAuthSummary": "Intestazione configurata", "policyAuthHeaderAuthSummary": "Intestazione configurata",
"policyAuthHeaderName": "Nome dell'intestazione", "policyAuthHeaderName": "Nome utente",
"policyAuthHeaderValue": "Valore atteso", "policyAuthHeaderValue": "Password",
"policyAuthSetPasscode": "Imposta Codice di Accesso", "policyAuthSetPasscode": "Imposta Codice di Accesso",
"policyAuthSetPincode": "Imposta Codice PIN", "policyAuthSetPincode": "Imposta Codice PIN",
"policyAuthSetEmailWhitelist": "Imposta Lista Autorizzazioni Email", "policyAuthSetEmailWhitelist": "Imposta Lista Autorizzazioni Email",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Imposta Codice PIN Risorsa", "actionSetResourcePincode": "Imposta Codice PIN Risorsa",
"actionSetResourceEmailWhitelist": "Imposta Lista Autorizzazioni Email Risorsa", "actionSetResourceEmailWhitelist": "Imposta Lista Autorizzazioni Email Risorsa",
"actionGetResourceEmailWhitelist": "Ottieni Lista Autorizzazioni Email Risorsa", "actionGetResourceEmailWhitelist": "Ottieni Lista Autorizzazioni Email Risorsa",
"actionGetResourcePolicy": "Ottieni la Politica della Risorsa",
"actionUpdateResourcePolicy": "Aggiorna la Politica della Risorsa",
"actionSetResourcePolicyUsers": "Imposta Utenti della Politica Risorsa",
"actionSetResourcePolicyRoles": "Imposta Ruoli della Politica Risorsa",
"actionSetResourcePolicyPassword": "Imposta Password della Politica Risorsa",
"actionSetResourcePolicyPincode": "Imposta Codice PIN della Politica Risorsa",
"actionSetResourcePolicyHeaderAuth": "Imposta Autenticazione Header della Politica Risorsa",
"actionSetResourcePolicyWhitelist": "Imposta Lista Autorizzazioni Email della Politica Risorsa",
"actionSetResourcePolicyRules": "Imposta Regole della Politica Risorsa",
"actionCreateTarget": "Crea Target", "actionCreateTarget": "Crea Target",
"actionDeleteTarget": "Elimina Target", "actionDeleteTarget": "Elimina Target",
"actionGetTarget": "Ottieni Target", "actionGetTarget": "Ottieni Target",
@@ -1507,6 +1519,30 @@
"navbar": "Menu di Navigazione", "navbar": "Menu di Navigazione",
"navbarDescription": "Menu di navigazione principale dell'applicazione", "navbarDescription": "Menu di navigazione principale dell'applicazione",
"navbarDocsLink": "Documentazione", "navbarDocsLink": "Documentazione",
"commandPaletteTitle": "Tavolozza dei Comandi",
"commandPaletteDescription": "Cerca pagine, organizzazioni, risorse e azioni",
"commandPaletteSearchPlaceholder": "Cerca pagine, risorse, azioni...",
"commandPaletteNoResults": "Nessun risultato trovato.",
"commandPaletteSearching": "Ricerca...",
"commandPaletteNavigation": "Navigazione",
"commandPaletteOrganizations": "Organizzazioni",
"commandPaletteSites": "Siti",
"commandPaletteResources": "Risorse",
"commandPaletteUsers": "Utenti",
"commandPaletteClients": "Client Macchina",
"commandPaletteActions": "Azioni",
"commandPaletteCreateSite": "Crea Sito",
"commandPaletteCreateProxyResource": "Crea Risorsa Pubblica",
"commandPaletteCreatePrivateResource": "Crea Risorsa Privata",
"commandPaletteCreateUser": "Crea Utente",
"commandPaletteCreateApiKey": "Crea Chiave API",
"commandPaletteCreateMachineClient": "Crea Client Macchina",
"commandPaletteCreateAlertRule": "Crea Regola di Avviso",
"commandPaletteCreateIdentityProvider": "Crea Provider di Identità",
"commandPaletteToggleTheme": "Attiva/Disattiva Tema",
"commandPaletteChooseOrganization": "Scegli Organizzazione",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Impossibile abilitare 2FA", "otpErrorEnable": "Impossibile abilitare 2FA",
"otpErrorEnableDescription": "Si è verificato un errore durante l'abilitazione di 2FA", "otpErrorEnableDescription": "Si è verificato un errore durante l'abilitazione di 2FA",
"otpSetupCheckCode": "Inserisci un codice a 6 cifre", "otpSetupCheckCode": "Inserisci un codice a 6 cifre",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Gestione", "sidebarManagement": "Gestione",
"sidebarBillingAndLicenses": "Fatturazione E Licenze", "sidebarBillingAndLicenses": "Fatturazione E Licenze",
"sidebarLogsAnalytics": "Analisi", "sidebarLogsAnalytics": "Analisi",
"commandSites": "Siti",
"commandActionModeInfo": "Digita \">\" Per Aprire la Modalità Azione",
"commandResources": "Risorse",
"commandProxyResources": "Risorse Pubbliche",
"commandClientResources": "Risorse Private",
"commandClients": "Client",
"commandUserDevices": "Dispositivi Utente",
"commandMachineClients": "Client Macchina",
"commandDomains": "Domini",
"commandRemoteExitNodes": "Nodi Remoti",
"commandTeam": "Squadra",
"commandUsers": "Utenti",
"commandRoles": "Ruoli",
"commandInvitations": "Inviti",
"commandPolicies": "Politiche Condivise",
"commandResourcePolicies": "Politiche delle Risorse Pubbliche",
"commandIdentityProviders": "Fornitori di Identità",
"commandApprovals": "Richieste di Approvazione",
"commandShareableLinks": "Link Condivisibili",
"commandOrganization": "Organizzazione",
"commandLogsAndAnalytics": "Log & Analisi",
"commandLogsAnalytics": "Analisi",
"commandLogsRequest": "Log di Richieste HTTP",
"commandLogsAccess": "Log di Autenticazione",
"commandLogsAction": "Log delle Azioni Amministrative",
"commandLogsConnection": "Log di Connessione",
"commandLogsStreaming": "Streaming di Eventi",
"commandManagement": "Gestione",
"commandAlerting": "Avvisi",
"commandProvisioning": "Provisioning",
"commandBluePrints": "Modelli",
"commandApiKeys": "Chiavi API",
"commandBillingAndLicenses": "Fatturazione & Licenze",
"commandBilling": "Fatturazione",
"commandEnterpriseLicenses": "Licenze",
"commandSettings": "Impostazioni",
"commandLauncher": "Avvio",
"commandResourceLauncher": "Launcher delle Risorse",
"commandSearchResults": "Risultati della Ricerca",
"alertingTitle": "Allerta", "alertingTitle": "Allerta",
"alertingDescription": "Definisci fonti, trigger e azioni per le notifiche", "alertingDescription": "Definisci fonti, trigger e azioni per le notifiche",
"alertingRules": "Regole di allerta", "alertingRules": "Regole di allerta",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domini", "billingDomains": "Domini",
"billingOrganizations": "Organi", "billingOrganizations": "Organi",
"billingRemoteExitNodes": "Nodi Remoti", "billingRemoteExitNodes": "Nodi Remoti",
"billingPublicResources": "Risorse Pubbliche",
"billingPrivateResources": "Risorse Private",
"billingMachineClients": "Client Macchina",
"billingNoLimitConfigured": "Nessun limite configurato", "billingNoLimitConfigured": "Nessun limite configurato",
"billingEstimatedPeriod": "Periodo di Fatturazione Stimato", "billingEstimatedPeriod": "Periodo di Fatturazione Stimato",
"billingIncludedUsage": "Utilizzo Incluso", "billingIncludedUsage": "Utilizzo Incluso",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Quanti utenti puoi usare", "billingUsersInfo": "Quanti utenti puoi usare",
"billingDomainInfo": "Quanti domini puoi usare", "billingDomainInfo": "Quanti domini puoi usare",
"billingRemoteExitNodesInfo": "Quanti nodi remoti puoi usare", "billingRemoteExitNodesInfo": "Quanti nodi remoti puoi usare",
"billingPublicResourcesInfo": "Quante risorse pubbliche puoi utilizzare",
"billingPrivateResourcesInfo": "Quante risorse private puoi utilizzare",
"billingMachineClientsInfo": "Quanti client macchina puoi utilizzare",
"billingLicenseKeys": "Chiavi di Licenza", "billingLicenseKeys": "Chiavi di Licenza",
"billingLicenseKeysDescription": "Gestisci le sottoscrizioni alla chiave di licenza", "billingLicenseKeysDescription": "Gestisci le sottoscrizioni alla chiave di licenza",
"billingLicenseSubscription": "Abbonamento Licenza", "billingLicenseSubscription": "Abbonamento Licenza",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Chiudi", "createInternalResourceDialogClose": "Chiudi",
"createInternalResourceDialogCreateClientResource": "Crea Risorsa Privata", "createInternalResourceDialogCreateClientResource": "Crea Risorsa Privata",
"createInternalResourceDialogCreateClientResourceDescription": "Crea una nuova risorsa che sarà accessibile solo ai client connessi all'organizzazione", "createInternalResourceDialogCreateClientResourceDescription": "Crea una nuova risorsa che sarà accessibile solo ai client connessi all'organizzazione",
"privateResourceCreatePageSeeAll": "Vedi Tutte le Risorse Private",
"privateResourceAllowIcmpPing": "Consenti ICMP Ping",
"privateResourceNetworkAccess": "Accesso alla Rete",
"privateResourceNetworkAccessDescription": "Controlla l'accesso alle porte TCP/UDP e se ICMP ping è consentito per questa risorsa.",
"hostSettings": "Impostazioni dell'Host",
"cidrSettings": "Impostazioni CIDR",
"createInternalResourceDialogResourceProperties": "Proprietà della Risorsa", "createInternalResourceDialogResourceProperties": "Proprietà della Risorsa",
"createInternalResourceDialogName": "Nome", "createInternalResourceDialogName": "Nome",
"createInternalResourceDialogSite": "Sito", "createInternalResourceDialogSite": "Sito",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Non ci sono nodi disponibili per questa organizzazione. Crea un nodo prima per usare i siti locali.", "noRemoteExitNodesAvailableDescription": "Non ci sono nodi disponibili per questa organizzazione. Crea un nodo prima per usare i siti locali.",
"exitNode": "Nodo di Uscita", "exitNode": "Nodo di Uscita",
"country": "Paese", "country": "Paese",
"countryIsNot": "Paese Non È",
"rulesMatchCountry": "Attualmente basato sull'IP di origine", "rulesMatchCountry": "Attualmente basato sull'IP di origine",
"region": "Regione", "region": "Regione",
"selectRegion": "Seleziona regione", "selectRegion": "Seleziona regione",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "È richiesta la configurazione di autenticazione a due fattori. Effettua nuovamente l'accesso tramite {dashboardUrl}/auth/login completa questo passaggio. Quindi, torna qui.", "twoFactorSetupRequired": "È richiesta la configurazione di autenticazione a due fattori. Effettua nuovamente l'accesso tramite {dashboardUrl}/auth/login completa questo passaggio. Quindi, torna qui.",
"additionalSecurityRequired": "Necessaria Sicurezza Aggiuntiva", "additionalSecurityRequired": "Necessaria Sicurezza Aggiuntiva",
"organizationRequiresAdditionalSteps": "Questa organizzazione richiede ulteriori passi di sicurezza prima di poter accedere alle risorse.", "organizationRequiresAdditionalSteps": "Questa organizzazione richiede ulteriori passi di sicurezza prima di poter accedere alle risorse.",
"sessionExpired": "Sessione Scaduta",
"sessionExpiredReauthRequired": "La tua sessione è scaduta in conformità con la politica di sicurezza della tua organizzazione. Effettua nuovamente l'autenticazione per continuare.",
"reauthenticate": "Riautenticazione",
"completeTheseSteps": "Completa questi passaggi", "completeTheseSteps": "Completa questi passaggi",
"enableTwoFactorAuthentication": "Abilita autenticazione a due fattori", "enableTwoFactorAuthentication": "Abilita autenticazione a due fattori",
"completeSecuritySteps": "Passi Di Sicurezza Completa", "completeSecuritySteps": "Passi Di Sicurezza Completa",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Aggiungi Utenti", "editInternalResourceDialogAddUsers": "Aggiungi Utenti",
"editInternalResourceDialogAddClients": "Aggiungi Clienti", "editInternalResourceDialogAddClients": "Aggiungi Clienti",
"editInternalResourceDialogDestinationLabel": "Destinazione", "editInternalResourceDialogDestinationLabel": "Destinazione",
"editInternalResourceDialogDestinationDescription": "Specifica l'indirizzo di destinazione per la risorsa interna. Può essere un hostname, indirizzo IP o un intervallo CIDR a seconda della modalità selezionata. Opzionalmente imposta un alias DNS interno per una più facile identificazione.", "editInternalResourceDialogDestinationDescription": "Scegli dove eseguire questa risorsa e come i client lo raggiungono",
"internalResourceFormMultiSiteRoutingHelp": "Selezionare più siti consente un routing resiliente e Failover per alta disponibilità.", "internalResourceFormMultiSiteRoutingHelp": "Selezionare più siti consente un routing resiliente e Failover per alta disponibilità.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Scopri di più", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Scopri di più",
"editInternalResourceDialogPortRestrictionsDescription": "Limita l'accesso a porte TCP/UDP specifiche o consenti/blocca tutte le porte.", "editInternalResourceDialogPortRestrictionsDescription": "Limita l'accesso a porte TCP/UDP specifiche o consenti/blocca tutte le porte.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Risorsa Disabilitata", "memberPortalResourceDisabled": "Risorsa Disabilitata",
"memberPortalShowingResources": "Mostrando {start}-{end} di {total} risorse", "memberPortalShowingResources": "Mostrando {start}-{end} di {total} risorse",
"resourceLauncherTitle": "Lanscia Risorse", "resourceLauncherTitle": "Lanscia Risorse",
"resourceLauncherDescription": "Visualizza i dettagli delle risorse e lanciale da un solo posto", "resourceSidebarLauncherTitle": "Avvio",
"resourceLauncherSearchPlaceholder": "Cerca tutti i siti...", "resourceLauncherDescription": "Visualizza tutte le risorse disponibili e avviale da un unico hub centrale",
"resourceLauncherSearchPlaceholder": "Cerca le tue risorse...",
"resourceLauncherDefaultView": "Predefinito", "resourceLauncherDefaultView": "Predefinito",
"resourceLauncherSaveView": "Salva Visualizzazione", "resourceLauncherSaveView": "Salva Visualizzazione",
"resourceLauncherSaveToCurrentView": "Salva alla Visualizzazione Corrente", "resourceLauncherSaveToCurrentView": "Salva alla Visualizzazione Corrente",
"resourceLauncherSaveDefaultPersonal": "Salva per Me",
"resourceLauncherResetView": "Reimposta Visualizzazione", "resourceLauncherResetView": "Reimposta Visualizzazione",
"resourceLauncherResetSystemDefault": "Ripristina le Impostazioni di Sistema",
"resourceLauncherSystemDefaultRestored": "Ripristinato il default di sistema",
"resourceLauncherSystemDefaultRestoredDescription": "La vista predefinita è stata reimpostata alle impostazioni originali.",
"resourceLauncherSaveAsNewView": "Salva come Nuova Visualizzazione", "resourceLauncherSaveAsNewView": "Salva come Nuova Visualizzazione",
"resourceLauncherSaveAsNewViewDescription": "Dai un nome a questa visualizzazione per salvare i tuoi filtri e layout attuali.", "resourceLauncherSaveAsNewViewDescription": "Dai un nome a questa visualizzazione per salvare i tuoi filtri e layout attuali.",
"resourceLauncherSaveForEveryone": "Salva per Tutti", "resourceLauncherSaveForEveryone": "Salva per Tutti",
"resourceLauncherSaveForEveryoneDescription": "Condividi questa visualizzazione con tutti i membri dell'organizzazione. Quando non è selezionata, la visualizzazione è visibile solo a te.", "resourceLauncherSaveForEveryoneDescription": "Condividi questa visualizzazione con tutti i membri dell'organizzazione. Quando non è selezionata, la visualizzazione è visibile solo a te.",
"resourceLauncherMakePersonal": "Rendi Personale", "resourceLauncherMakePersonal": "Rendi Personale",
"resourceLauncherFilter": "Filtro", "resourceLauncherFilter": "Filtro",
"resourceLauncherFilterWithCount": "Filtro, {count} applicato/i",
"resourceLauncherSort": "Ordina", "resourceLauncherSort": "Ordina",
"resourceLauncherSortAscending": "Ordina in ordine crescente", "resourceLauncherSortAscending": "Ordina in ordine crescente",
"resourceLauncherSortDescending": "Ordina in ordine decrescente", "resourceLauncherSortDescending": "Ordina in ordine decrescente",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Raggruppa per", "resourceLauncherGroupBy": "Raggruppa per",
"resourceLauncherGroupBySite": "Sito", "resourceLauncherGroupBySite": "Sito",
"resourceLauncherGroupByLabel": "Etichetta", "resourceLauncherGroupByLabel": "Etichetta",
"resourceLauncherGroupByNone": "Nessuno",
"resourceLauncherLayout": "Layout", "resourceLauncherLayout": "Layout",
"resourceLauncherLayoutGrid": "Griglia", "resourceLauncherLayoutGrid": "Griglia",
"resourceLauncherLayoutList": "Lista", "resourceLauncherLayoutList": "Lista",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Mostra Tag di Sito", "resourceLauncherShowSiteTags": "Mostra Tag di Sito",
"resourceLauncherShowRecents": "Mostra Recenti", "resourceLauncherShowRecents": "Mostra Recenti",
"resourceLauncherDeleteView": "Elimina Visualizzazione", "resourceLauncherDeleteView": "Elimina Visualizzazione",
"resourceLauncherDeleteViewTitle": "Elimina Vista",
"resourceLauncherDeleteViewQuestion": "Sei sicuro di voler eliminare questa vista del launcher?",
"resourceLauncherDeleteViewConfirm": "Elimina Vista",
"resourceLauncherViewAsAdmin": "Visualizza come Admin", "resourceLauncherViewAsAdmin": "Visualizza come Admin",
"resourceLauncherResourceDetailsDescription": "Visualizza i dettagli per questa risorsa.", "resourceLauncherResourceDetailsDescription": "Informazioni e stato della connessione per questa risorsa.",
"resourceLauncherResourceDetails": "Dettagli Risorsa",
"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",
"resourceLauncherDownloadClient": "Scarica client",
"resourceLauncherFailedToLoadDetails": "Impossibile caricare i dettagli della risorsa. Potresti non avere più accesso a questa risorsa.",
"resourceLauncherNoPortRestrictions": "Nessuna restrizione di porta",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Non Etichettato", "resourceLauncherUnlabeled": "Non Etichettato",
"resourceLauncherNoSite": "Nessun Sito", "resourceLauncherNoSite": "Nessun Sito",
"resourceLauncherNoResourcesInGroup": "Nessuna risorsa in questo gruppo", "resourceLauncherNoResourcesInGroup": "Nessuna risorsa in questo gruppo",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Nessuna risorsa trovata", "resourceLauncherEmptyStateNoResultsTitle": "Nessuna risorsa trovata",
"resourceLauncherEmptyStateNoResultsDescription": "Nessuna risorsa corrisponde alla tua ricerca o ai tuoi filtri attuali. Prova a modificarli per trovare ciò che stai cercando.", "resourceLauncherEmptyStateNoResultsDescription": "Nessuna risorsa corrisponde alla tua ricerca o ai tuoi filtri attuali. Prova a modificarli per trovare ciò che stai cercando.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Nessuna risorsa corrisponde a \"{query}\". Prova a modificare la tua ricerca o a cancellare i filtri per vedere tutte le risorse.", "resourceLauncherEmptyStateNoResultsWithQuery": "Nessuna risorsa corrisponde a \"{query}\". Prova a modificare la tua ricerca o a cancellare i filtri per vedere tutte le risorse.",
"resourceLauncherSearchFirstTitle": "Cerca o Filtra per Navigare",
"resourceLauncherSearchFirstDescription": "Hai accesso a molte risorse. Usa la ricerca o filtra per sito o etichetta per trovare ciò di cui hai bisogno.",
"resourceLauncherSiteGroupingDisabled": "Raggruppamento per sito non disponibile su questa scala. Filtra per sito per raggruppare un set più piccolo.",
"resourceLauncherLabelGroupingDisabled": "Raggruppamento per etichetta non disponibile su questa scala.",
"resourceLauncherCompactModeHint": "Mostrando un elenco semplificato per una navigazione più veloce. Usa la ricerca o i filtri per restringere i risultati.",
"resourceLauncherCompactGroupingHint": "Applica filtri di sito o etichetta per abilitare il raggruppamento.",
"resourceLauncherCopiedToClipboard": "Copiato negli appunti", "resourceLauncherCopiedToClipboard": "Copiato negli appunti",
"resourceLauncherCopiedAccessDescription": "L'accesso alla risorsa è stato copiato nei tuoi appunti.", "resourceLauncherCopiedAccessDescription": "L'accesso alla risorsa è stato copiato nei tuoi appunti.",
"resourceLauncherViewNamePlaceholder": "Nome Visualizzazione", "resourceLauncherViewNamePlaceholder": "Nome Visualizzazione",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "포트 번호를 사용하여 원격 노드에 연결해야 합니다. 원격 노드에서 리소스를 사용하려면 사용자 지정 도메인을 사용하십시오.", "resourceRawDescriptionCloud": "포트 번호를 사용하여 원격 노드에 연결해야 합니다. 원격 노드에서 리소스를 사용하려면 사용자 지정 도메인을 사용하십시오.",
"resourceCreate": "리소스 생성", "resourceCreate": "리소스 생성",
"resourceCreateDescription": "아래 단계를 따라 새 리소스를 생성하세요.", "resourceCreateDescription": "아래 단계를 따라 새 리소스를 생성하세요.",
"resourcePublicCreate": "공용 리소스 생성",
"resourcePublicCreateDescription": "웹 브라우저를 통해 접근할 수 있는 새로운 공용 리소스를 생성하려면 아래 단계를 따르십시오",
"resourceCreateGeneralDescription": "이름 및 유형을 포함한 기본 리소스 설정 구성", "resourceCreateGeneralDescription": "이름 및 유형을 포함한 기본 리소스 설정 구성",
"resourceSeeAll": "모든 리소스 보기", "resourceSeeAll": "모든 리소스 보기",
"resourceCreateGeneral": "일반", "resourceCreateGeneral": "일반",
@@ -613,7 +615,8 @@
"idpNameInternal": "내부", "idpNameInternal": "내부",
"emailInvalid": "유효하지 않은 이메일 주소입니다.", "emailInvalid": "유효하지 않은 이메일 주소입니다.",
"inviteValidityDuration": "지속 시간을 선택하십시오.", "inviteValidityDuration": "지속 시간을 선택하십시오.",
"accessRoleSelectPlease": "역할을 선택하세요", "accessRoleSelectPlease": "사용자는 적어도 하나의 역할에 속해야 합니다.",
"accessRoleRequired": "역할 필요",
"removeOwnAdminRoleConfirmTitle": "관리자 권한을 제거하시겠습니까?", "removeOwnAdminRoleConfirmTitle": "관리자 권한을 제거하시겠습니까?",
"removeOwnAdminRoleConfirmDescription": "저장 후 이 조직에 대한 관리자 권한이 없어집니다. 필요한 경우 다른 관리자가 접근 권한을 복구할 수 있습니다.", "removeOwnAdminRoleConfirmDescription": "저장 후 이 조직에 대한 관리자 권한이 없어집니다. 필요한 경우 다른 관리자가 접근 권한을 복구할 수 있습니다.",
"removeOwnAdminRoleConfirmButton": "내 관리자 권한 제거", "removeOwnAdminRoleConfirmButton": "내 관리자 권한 제거",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "기본 헤더 인증", "policyAuthHeaderAuthTitle": "기본 헤더 인증",
"policyAuthHeaderAuthDescription": "각 요청에서 맞춤 HTTP 헤더 이름 및 값을 검증", "policyAuthHeaderAuthDescription": "각 요청에서 맞춤 HTTP 헤더 이름 및 값을 검증",
"policyAuthHeaderAuthSummary": "헤더 구성됨", "policyAuthHeaderAuthSummary": "헤더 구성됨",
"policyAuthHeaderName": "헤더 이름", "policyAuthHeaderName": "사용자 이름",
"policyAuthHeaderValue": "예상 값", "policyAuthHeaderValue": "비밀번호",
"policyAuthSetPasscode": "패스코드 설정", "policyAuthSetPasscode": "패스코드 설정",
"policyAuthSetPincode": "PIN 코드 설정", "policyAuthSetPincode": "PIN 코드 설정",
"policyAuthSetEmailWhitelist": "이메일 화이트리스트 설정", "policyAuthSetEmailWhitelist": "이메일 화이트리스트 설정",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "리소스 핀코드 설정", "actionSetResourcePincode": "리소스 핀코드 설정",
"actionSetResourceEmailWhitelist": "리소스 이메일 화이트리스트 설정", "actionSetResourceEmailWhitelist": "리소스 이메일 화이트리스트 설정",
"actionGetResourceEmailWhitelist": "리소스 이메일 화이트리스트 가져오기", "actionGetResourceEmailWhitelist": "리소스 이메일 화이트리스트 가져오기",
"actionGetResourcePolicy": "리소스 정책 가져오기",
"actionUpdateResourcePolicy": "리소스 정책 업데이트",
"actionSetResourcePolicyUsers": "리소스 정책 사용자 설정",
"actionSetResourcePolicyRoles": "리소스 정책 역할 설정",
"actionSetResourcePolicyPassword": "리소스 정책 비밀번호 설정",
"actionSetResourcePolicyPincode": "리소스 정책 핀코드 설정",
"actionSetResourcePolicyHeaderAuth": "리소스 정책 헤더 인증 설정",
"actionSetResourcePolicyWhitelist": "리소스 정책 이메일 화이트리스트 설정",
"actionSetResourcePolicyRules": "리소스 정책 규칙 설정",
"actionCreateTarget": "대상 만들기", "actionCreateTarget": "대상 만들기",
"actionDeleteTarget": "대상 삭제", "actionDeleteTarget": "대상 삭제",
"actionGetTarget": "대상 가져오기", "actionGetTarget": "대상 가져오기",
@@ -1507,6 +1519,30 @@
"navbar": "탐색 메뉴", "navbar": "탐색 메뉴",
"navbarDescription": "애플리케이션의 주요 탐색 메뉴", "navbarDescription": "애플리케이션의 주요 탐색 메뉴",
"navbarDocsLink": "문서", "navbarDocsLink": "문서",
"commandPaletteTitle": "명령 팔레트",
"commandPaletteDescription": "페이지, 조직, 리소스 및 작업을 검색합니다",
"commandPaletteSearchPlaceholder": "페이지, 리소스, 작업 검색...",
"commandPaletteNoResults": "결과를 찾을 수 없습니다.",
"commandPaletteSearching": "검색 중...",
"commandPaletteNavigation": "탐색",
"commandPaletteOrganizations": "조직",
"commandPaletteSites": "사이트",
"commandPaletteResources": "리소스",
"commandPaletteUsers": "사용자",
"commandPaletteClients": "머신 클라이언트",
"commandPaletteActions": "작업",
"commandPaletteCreateSite": "사이트 생성",
"commandPaletteCreateProxyResource": "공용 리소스 생성",
"commandPaletteCreatePrivateResource": "개인 리소스 생성",
"commandPaletteCreateUser": "사용자 생성",
"commandPaletteCreateApiKey": "API 키 생성",
"commandPaletteCreateMachineClient": "머신 클라이언트 생성",
"commandPaletteCreateAlertRule": "경고 규칙 생성",
"commandPaletteCreateIdentityProvider": "신원 공급자 생성",
"commandPaletteToggleTheme": "테마 전환",
"commandPaletteChooseOrganization": "조직 선택",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "2FA를 활성화할 수 없습니다.", "otpErrorEnable": "2FA를 활성화할 수 없습니다.",
"otpErrorEnableDescription": "2FA를 활성화하는 동안 오류가 발생했습니다", "otpErrorEnableDescription": "2FA를 활성화하는 동안 오류가 발생했습니다",
"otpSetupCheckCode": "6자리 코드를 입력하세요", "otpSetupCheckCode": "6자리 코드를 입력하세요",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "관리", "sidebarManagement": "관리",
"sidebarBillingAndLicenses": "결제 및 라이선스", "sidebarBillingAndLicenses": "결제 및 라이선스",
"sidebarLogsAnalytics": "분석", "sidebarLogsAnalytics": "분석",
"commandSites": "사이트",
"commandActionModeInfo": "동작 모드 열기 위해 \">\" 입력",
"commandResources": "리소스",
"commandProxyResources": "공용 리소스",
"commandClientResources": "개인 리소스",
"commandClients": "클라이언트",
"commandUserDevices": "사용자 기기",
"commandMachineClients": "머신 클라이언트",
"commandDomains": "도메인",
"commandRemoteExitNodes": "원격 노드",
"commandTeam": "팀",
"commandUsers": "사용자",
"commandRoles": "역할",
"commandInvitations": "초대",
"commandPolicies": "공유 정책",
"commandResourcePolicies": "공용 리소스 정책",
"commandIdentityProviders": "신원 공급자",
"commandApprovals": "승인 요청",
"commandShareableLinks": "공유 가능한 링크",
"commandOrganization": "조직",
"commandLogsAndAnalytics": "로그 및 분석",
"commandLogsAnalytics": "분석",
"commandLogsRequest": "HTTP 요청 로그",
"commandLogsAccess": "인증 로그",
"commandLogsAction": "관리자 작업 로그",
"commandLogsConnection": "네트워크 로그",
"commandLogsStreaming": "이벤트 스트리밍",
"commandManagement": "관리",
"commandAlerting": "경보",
"commandProvisioning": "프로비저닝",
"commandBluePrints": "블루밍",
"commandApiKeys": "API 키",
"commandBillingAndLicenses": "청구 및 라이선스",
"commandBilling": "청구",
"commandEnterpriseLicenses": "라이선스",
"commandSettings": "설정",
"commandLauncher": "런처",
"commandResourceLauncher": "리소스 런처",
"commandSearchResults": "검색 결과",
"alertingTitle": "알림", "alertingTitle": "알림",
"alertingDescription": "알림에 대한 소스, 트리거 및 작업 정의", "alertingDescription": "알림에 대한 소스, 트리거 및 작업 정의",
"alertingRules": "알림 규칙", "alertingRules": "알림 규칙",
@@ -1915,6 +1990,9 @@
"billingDomains": "도메인", "billingDomains": "도메인",
"billingOrganizations": "조직", "billingOrganizations": "조직",
"billingRemoteExitNodes": "원격 노드", "billingRemoteExitNodes": "원격 노드",
"billingPublicResources": "공용 리소스",
"billingPrivateResources": "개인 리소스",
"billingMachineClients": "머신 클라이언트",
"billingNoLimitConfigured": "구성된 한도가 없습니다.", "billingNoLimitConfigured": "구성된 한도가 없습니다.",
"billingEstimatedPeriod": "예상 청구 기간", "billingEstimatedPeriod": "예상 청구 기간",
"billingIncludedUsage": "포함 사용량", "billingIncludedUsage": "포함 사용량",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "사용할 수 있는 사용자 수", "billingUsersInfo": "사용할 수 있는 사용자 수",
"billingDomainInfo": "사용할 수 있는 도메인 수", "billingDomainInfo": "사용할 수 있는 도메인 수",
"billingRemoteExitNodesInfo": "사용할 수 있는 원격 노드 수", "billingRemoteExitNodesInfo": "사용할 수 있는 원격 노드 수",
"billingPublicResourcesInfo": "사용할 수 있는 공용 리소스 수",
"billingPrivateResourcesInfo": "사용할 수 있는 개인 리소스 수",
"billingMachineClientsInfo": "사용할 수 있는 머신 클라이언트 수",
"billingLicenseKeys": "라이센스 키", "billingLicenseKeys": "라이센스 키",
"billingLicenseKeysDescription": "라이센스 키 구독을 관리하세요", "billingLicenseKeysDescription": "라이센스 키 구독을 관리하세요",
"billingLicenseSubscription": "라이센스 구독", "billingLicenseSubscription": "라이센스 구독",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "닫기", "createInternalResourceDialogClose": "닫기",
"createInternalResourceDialogCreateClientResource": "사이트 리소스 생성", "createInternalResourceDialogCreateClientResource": "사이트 리소스 생성",
"createInternalResourceDialogCreateClientResourceDescription": "선택한 사이트에 연결된 클라이언트에 접근할 새 리소스를 생성합니다", "createInternalResourceDialogCreateClientResourceDescription": "선택한 사이트에 연결된 클라이언트에 접근할 새 리소스를 생성합니다",
"privateResourceCreatePageSeeAll": "모든 개인 리소스 보기",
"privateResourceAllowIcmpPing": "ICMP 핑 허용",
"privateResourceNetworkAccess": "네트워크 접근",
"privateResourceNetworkAccessDescription": "이 리소스에 대한 TCP/UDP 포트 접근과 ICMP 핑이 허용되는지 여부를 제어합니다.",
"hostSettings": "호스트 설정",
"cidrSettings": "CIDR 설정",
"createInternalResourceDialogResourceProperties": "리소스 속성", "createInternalResourceDialogResourceProperties": "리소스 속성",
"createInternalResourceDialogName": "이름", "createInternalResourceDialogName": "이름",
"createInternalResourceDialogSite": "사이트", "createInternalResourceDialogSite": "사이트",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "이 조직에 사용 가능한 노드가 없습니다. 로컬 사이트를 사용하려면 먼저 노드를 생성하세요.", "noRemoteExitNodesAvailableDescription": "이 조직에 사용 가능한 노드가 없습니다. 로컬 사이트를 사용하려면 먼저 노드를 생성하세요.",
"exitNode": "종단 노드", "exitNode": "종단 노드",
"country": "국가", "country": "국가",
"countryIsNot": "국가가 아닙니다",
"rulesMatchCountry": "현재 소스 IP를 기반으로 합니다", "rulesMatchCountry": "현재 소스 IP를 기반으로 합니다",
"region": "지역", "region": "지역",
"selectRegion": "지역 선택", "selectRegion": "지역 선택",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "이중 인증 설정이 필요합니다. 이 단계를 완료하려면 {dashboardUrl}/auth/login 통해 다시 로그인하십시오. 그런 다음 여기로 돌아오세요.", "twoFactorSetupRequired": "이중 인증 설정이 필요합니다. 이 단계를 완료하려면 {dashboardUrl}/auth/login 통해 다시 로그인하십시오. 그런 다음 여기로 돌아오세요.",
"additionalSecurityRequired": "추가 보안 필요", "additionalSecurityRequired": "추가 보안 필요",
"organizationRequiresAdditionalSteps": "이 조직은 자원에 접근하기 전에 추가 보안 단계를 요구합니다.", "organizationRequiresAdditionalSteps": "이 조직은 자원에 접근하기 전에 추가 보안 단계를 요구합니다.",
"sessionExpired": "세션 만료",
"sessionExpiredReauthRequired": "조직의 보안 정책에 따라 세션이 만료되었습니다. 계속하려면 재인증하십시오.",
"reauthenticate": "재 인증",
"completeTheseSteps": "이 단계를 완료하십시오", "completeTheseSteps": "이 단계를 완료하십시오",
"enableTwoFactorAuthentication": "이중 인증 활성화", "enableTwoFactorAuthentication": "이중 인증 활성화",
"completeSecuritySteps": "보안 단계 완료", "completeSecuritySteps": "보안 단계 완료",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "사용자 추가", "editInternalResourceDialogAddUsers": "사용자 추가",
"editInternalResourceDialogAddClients": "클라이언트 추가", "editInternalResourceDialogAddClients": "클라이언트 추가",
"editInternalResourceDialogDestinationLabel": "대상지", "editInternalResourceDialogDestinationLabel": "대상지",
"editInternalResourceDialogDestinationDescription": "내부 리소스의 목적지 주소를 지정하세요. 선택한 모드에 따라 이 주소는 호스트명, IP 주소, 또는 CIDR 범위가 될 수 있습니다. 더욱 쉽게 식별할 수 있도록 내부 DNS 별칭을 설정할 수 있습니다.", "editInternalResourceDialogDestinationDescription": " 리소스가 실행되는 위치와 고객이 도달하는 방법 선택",
"internalResourceFormMultiSiteRoutingHelp": "다중 사이트를 선택하면 높은 가용성을 위해 회복력 있는 라우팅 및 페일오버가 가능해집니다.", "internalResourceFormMultiSiteRoutingHelp": "다중 사이트를 선택하면 높은 가용성을 위해 회복력 있는 라우팅 및 페일오버가 가능해집니다.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "자세히 알아보기", "internalResourceFormMultiSiteRoutingHelpLearnMore": "자세히 알아보기",
"editInternalResourceDialogPortRestrictionsDescription": "특정 TCP/UDP 포트에 대한 접근을 제한하거나 모든 포트를 허용/차단하십시오.", "editInternalResourceDialogPortRestrictionsDescription": "특정 TCP/UDP 포트에 대한 접근을 제한하거나 모든 포트를 허용/차단하십시오.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "리소스 비활성화됨", "memberPortalResourceDisabled": "리소스 비활성화됨",
"memberPortalShowingResources": "{start}-{end} 중 {total}개의 리소스를 표시 중", "memberPortalShowingResources": "{start}-{end} 중 {total}개의 리소스를 표시 중",
"resourceLauncherTitle": "리소스 런처", "resourceLauncherTitle": "리소스 런처",
"resourceLauncherDescription": "리소스 세부 정보를 보고 한 곳에서 실행하세요", "resourceSidebarLauncherTitle": "런처",
"resourceLauncherSearchPlaceholder": "모든 사이트 검색...", "resourceLauncherDescription": "모든 사용 가능한 리소스를 보고 중앙 허브에서 실행",
"resourceLauncherSearchPlaceholder": "리소스를 검색하세요...",
"resourceLauncherDefaultView": "기본값", "resourceLauncherDefaultView": "기본값",
"resourceLauncherSaveView": "보기를 저장", "resourceLauncherSaveView": "보기를 저장",
"resourceLauncherSaveToCurrentView": "현재 보기로 저장", "resourceLauncherSaveToCurrentView": "현재 보기로 저장",
"resourceLauncherSaveDefaultPersonal": "내게 저장",
"resourceLauncherResetView": "보기를 재설정", "resourceLauncherResetView": "보기를 재설정",
"resourceLauncherResetSystemDefault": "시스템 기본값으로 재설정",
"resourceLauncherSystemDefaultRestored": "시스템 기본값이 복원되었습니다",
"resourceLauncherSystemDefaultRestoredDescription": "기본 보기가 원래 설정으로 재설정되었습니다.",
"resourceLauncherSaveAsNewView": "새 보기로 저장", "resourceLauncherSaveAsNewView": "새 보기로 저장",
"resourceLauncherSaveAsNewViewDescription": "현재 필터와 레이아웃을 저장할 이름을 입력하세요.", "resourceLauncherSaveAsNewViewDescription": "현재 필터와 레이아웃을 저장할 이름을 입력하세요.",
"resourceLauncherSaveForEveryone": "모두에게 저장", "resourceLauncherSaveForEveryone": "모두에게 저장",
"resourceLauncherSaveForEveryoneDescription": "이 보기를 모든 조직 구성원과 공유합니다. 체크 해제하면 해당 뷰는 사용자에게만 표시됩니다.", "resourceLauncherSaveForEveryoneDescription": "이 보기를 모든 조직 구성원과 공유합니다. 체크 해제하면 해당 뷰는 사용자에게만 표시됩니다.",
"resourceLauncherMakePersonal": "개인적으로 만들기", "resourceLauncherMakePersonal": "개인적으로 만들기",
"resourceLauncherFilter": "필터", "resourceLauncherFilter": "필터",
"resourceLauncherFilterWithCount": "필터, {count} 적용됨",
"resourceLauncherSort": "정렬", "resourceLauncherSort": "정렬",
"resourceLauncherSortAscending": "오름차순 정렬", "resourceLauncherSortAscending": "오름차순 정렬",
"resourceLauncherSortDescending": "내림차순 정렬", "resourceLauncherSortDescending": "내림차순 정렬",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "그룹화 기준", "resourceLauncherGroupBy": "그룹화 기준",
"resourceLauncherGroupBySite": "사이트", "resourceLauncherGroupBySite": "사이트",
"resourceLauncherGroupByLabel": "레이블", "resourceLauncherGroupByLabel": "레이블",
"resourceLauncherGroupByNone": "없음",
"resourceLauncherLayout": "레이아웃", "resourceLauncherLayout": "레이아웃",
"resourceLauncherLayoutGrid": "그리드", "resourceLauncherLayoutGrid": "그리드",
"resourceLauncherLayoutList": "목록", "resourceLauncherLayoutList": "목록",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "사이트 태그 표시", "resourceLauncherShowSiteTags": "사이트 태그 표시",
"resourceLauncherShowRecents": "최근 항목 표시", "resourceLauncherShowRecents": "최근 항목 표시",
"resourceLauncherDeleteView": "보기 삭제", "resourceLauncherDeleteView": "보기 삭제",
"resourceLauncherDeleteViewTitle": "뷰 삭제",
"resourceLauncherDeleteViewQuestion": "이 런처 뷰를 삭제하시겠습니까?",
"resourceLauncherDeleteViewConfirm": "뷰 삭제",
"resourceLauncherViewAsAdmin": "관리자로 보기", "resourceLauncherViewAsAdmin": "관리자로 보기",
"resourceLauncherResourceDetailsDescription": "이 리소스의 세부정보를 봅니다.", "resourceLauncherResourceDetailsDescription": "이 리소스에 대한 연결 정보 및 상태입니다.",
"resourceLauncherResourceDetails": "리소스 세부 정보",
"resourceLauncherAuthMethodsDescription": "이 리소스에 활성화된 인증 방법입니다.",
"resourceLauncherPrivateClientRequired": "이 리소스에 개인적으로 접근하려면 기기에서 클라이언트로 연결하십시오.",
"resourceLauncherPrivateClientRequiredTitle": "클라이언트 연결 필요",
"resourceLauncherDownloadClient": "클라이언트 다운로드",
"resourceLauncherFailedToLoadDetails": "리소스 세부 정보를 로드할 수 없습니다. 더 이상 이 리소스에 접근할 수 없을 수 있습니다.",
"resourceLauncherNoPortRestrictions": "포트 제한 없음",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "레이블 없음", "resourceLauncherUnlabeled": "레이블 없음",
"resourceLauncherNoSite": "사이트 없음", "resourceLauncherNoSite": "사이트 없음",
"resourceLauncherNoResourcesInGroup": "이 그룹에는 리소스가 없습니다", "resourceLauncherNoResourcesInGroup": "이 그룹에는 리소스가 없습니다",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "리소스를 찾을 수 없음", "resourceLauncherEmptyStateNoResultsTitle": "리소스를 찾을 수 없음",
"resourceLauncherEmptyStateNoResultsDescription": "현재 검색이나 필터에 맞는 리소스가 없습니다. 필터를 조정하여 찾으려는 항목을 확인해보세요.", "resourceLauncherEmptyStateNoResultsDescription": "현재 검색이나 필터에 맞는 리소스가 없습니다. 필터를 조정하여 찾으려는 항목을 확인해보세요.",
"resourceLauncherEmptyStateNoResultsWithQuery": "\"{query}\"와 일치하는 리소스가 없습니다. 검색을 조정하거나 필터를 지워서 모든 리소스를 확인해보세요.", "resourceLauncherEmptyStateNoResultsWithQuery": "\"{query}\"와 일치하는 리소스가 없습니다. 검색을 조정하거나 필터를 지워서 모든 리소스를 확인해보세요.",
"resourceLauncherSearchFirstTitle": "검색 또는 필터로 탐색하기",
"resourceLauncherSearchFirstDescription": "많은 리소스에 접근할 수 있습니다. 필요한 것을 찾기 위해 사이트 또는 라벨로 검색하십시오.",
"resourceLauncherSiteGroupingDisabled": "이 규모에서는 사이트 그룹화가 불가능합니다. 더 작은 그룹을 위해 사이트로 필터링하십시오.",
"resourceLauncherLabelGroupingDisabled": "이 규모에서는 라벨 그룹화가 불가능합니다.",
"resourceLauncherCompactModeHint": "더 빠른 탐색을 위해 단순화된 목록을 표시하고 있습니다. 검색하거나 필터를 사용하여 결과를 좁히십시오.",
"resourceLauncherCompactGroupingHint": "그룹핑을 활성화하려면 사이트 또는 라벨 필터를 적용하십시오.",
"resourceLauncherCopiedToClipboard": "클립보드에 복사됨", "resourceLauncherCopiedToClipboard": "클립보드에 복사됨",
"resourceLauncherCopiedAccessDescription": "리소스 액세스가 클립보드에 복사되었습니다.", "resourceLauncherCopiedAccessDescription": "리소스 액세스가 클립보드에 복사되었습니다.",
"resourceLauncherViewNamePlaceholder": "보기 이름", "resourceLauncherViewNamePlaceholder": "보기 이름",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Proxy forespørsler om rå TCP/UDP ved hjelp av et portnummer. Krever sider for å koble til en ekstern node.", "resourceRawDescriptionCloud": "Proxy forespørsler om rå TCP/UDP ved hjelp av et portnummer. Krever sider for å koble til en ekstern node.",
"resourceCreate": "Opprett ressurs", "resourceCreate": "Opprett ressurs",
"resourceCreateDescription": "Følg trinnene nedenfor for å opprette en ny ressurs", "resourceCreateDescription": "Følg trinnene nedenfor for å opprette en ny ressurs",
"resourcePublicCreate": "Opprett offentlig ressurs",
"resourcePublicCreateDescription": "Følg trinnene nedenfor for å opprette en ny offentlig ressurs som er tilgjengelig via en nettleser",
"resourceCreateGeneralDescription": "Konfigurer de grunnleggende ressursinnstillingene inkludert navnet og typen", "resourceCreateGeneralDescription": "Konfigurer de grunnleggende ressursinnstillingene inkludert navnet og typen",
"resourceSeeAll": "Se alle ressurser", "resourceSeeAll": "Se alle ressurser",
"resourceCreateGeneral": "Generelt", "resourceCreateGeneral": "Generelt",
@@ -613,7 +615,8 @@
"idpNameInternal": "Intern", "idpNameInternal": "Intern",
"emailInvalid": "Ugyldig e-postadresse", "emailInvalid": "Ugyldig e-postadresse",
"inviteValidityDuration": "Vennligst velg en varighet", "inviteValidityDuration": "Vennligst velg en varighet",
"accessRoleSelectPlease": "Vennligst velg en rolle", "accessRoleSelectPlease": "En bruker må tilhøre minst en rolle.",
"accessRoleRequired": "Rolle påkrevd",
"removeOwnAdminRoleConfirmTitle": "Fjern din administratoradgang?", "removeOwnAdminRoleConfirmTitle": "Fjern din administratoradgang?",
"removeOwnAdminRoleConfirmDescription": "Du vil ikke lenger ha administratorrettigheter i denne organisasjonen etter lagring. En annen administrator kan gjenopprette tilgang hvis nødvendig.", "removeOwnAdminRoleConfirmDescription": "Du vil ikke lenger ha administratorrettigheter i denne organisasjonen etter lagring. En annen administrator kan gjenopprette tilgang hvis nødvendig.",
"removeOwnAdminRoleConfirmButton": "Fjern min administratoradgang", "removeOwnAdminRoleConfirmButton": "Fjern min administratoradgang",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Grunnleggende Header Autentisering", "policyAuthHeaderAuthTitle": "Grunnleggende Header Autentisering",
"policyAuthHeaderAuthDescription": "Bekreft et tilpasset HTTP-headernavn og verdi ved hver forespørsel", "policyAuthHeaderAuthDescription": "Bekreft et tilpasset HTTP-headernavn og verdi ved hver forespørsel",
"policyAuthHeaderAuthSummary": "Header konfigurert", "policyAuthHeaderAuthSummary": "Header konfigurert",
"policyAuthHeaderName": "Headernavn", "policyAuthHeaderName": "Brukernavn",
"policyAuthHeaderValue": "Forventet verdi", "policyAuthHeaderValue": "Passord",
"policyAuthSetPasscode": "Angi passordkode", "policyAuthSetPasscode": "Angi passordkode",
"policyAuthSetPincode": "Sett PIN-kode", "policyAuthSetPincode": "Sett PIN-kode",
"policyAuthSetEmailWhitelist": "Angi e-post hviteliste", "policyAuthSetEmailWhitelist": "Angi e-post hviteliste",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Angi ressurspinkode", "actionSetResourcePincode": "Angi ressurspinkode",
"actionSetResourceEmailWhitelist": "Angi e-post-hviteliste for ressurs", "actionSetResourceEmailWhitelist": "Angi e-post-hviteliste for ressurs",
"actionGetResourceEmailWhitelist": "Hent e-post-hviteliste for ressurs", "actionGetResourceEmailWhitelist": "Hent e-post-hviteliste for ressurs",
"actionGetResourcePolicy": "Hent ressursregel",
"actionUpdateResourcePolicy": "Oppdater ressursregel",
"actionSetResourcePolicyUsers": "Sett ressursregel for brukere",
"actionSetResourcePolicyRoles": "Sett ressursregel for roller",
"actionSetResourcePolicyPassword": "Sett ressursregel for passord",
"actionSetResourcePolicyPincode": "Sett ressursregel for pinkode",
"actionSetResourcePolicyHeaderAuth": "Sett ressursregel for header-autentisering",
"actionSetResourcePolicyWhitelist": "Sett ressursregel for hvitlisting av e-post",
"actionSetResourcePolicyRules": "Sett ressursregel for regler",
"actionCreateTarget": "Opprett mål", "actionCreateTarget": "Opprett mål",
"actionDeleteTarget": "Slett mål", "actionDeleteTarget": "Slett mål",
"actionGetTarget": "Hent mål", "actionGetTarget": "Hent mål",
@@ -1507,6 +1519,30 @@
"navbar": "Navigasjonsmeny", "navbar": "Navigasjonsmeny",
"navbarDescription": "Hovednavigasjonsmeny for applikasjonen", "navbarDescription": "Hovednavigasjonsmeny for applikasjonen",
"navbarDocsLink": "Dokumentasjon", "navbarDocsLink": "Dokumentasjon",
"commandPaletteTitle": "Kommando-palett",
"commandPaletteDescription": "Søk etter sider, organisasjoner, ressurser, og handlinger",
"commandPaletteSearchPlaceholder": "Søk sider, ressurser, handlinger...",
"commandPaletteNoResults": "Ingen resultater funnet.",
"commandPaletteSearching": "Søker...",
"commandPaletteNavigation": "Navigasjon",
"commandPaletteOrganizations": "Organisasjoner",
"commandPaletteSites": "Områder",
"commandPaletteResources": "Ressurser",
"commandPaletteUsers": "Brukere",
"commandPaletteClients": "Maskinklienter",
"commandPaletteActions": "Handlinger",
"commandPaletteCreateSite": "Opprett område",
"commandPaletteCreateProxyResource": "Opprett offentlig ressurs",
"commandPaletteCreatePrivateResource": "Opprett privat ressurs",
"commandPaletteCreateUser": "Opprett bruker",
"commandPaletteCreateApiKey": "Opprett API-nøkkel",
"commandPaletteCreateMachineClient": "Opprett maskinklient",
"commandPaletteCreateAlertRule": "Opprett varslingsregel",
"commandPaletteCreateIdentityProvider": "Opprett identitetsleverandør",
"commandPaletteToggleTheme": "Bytt tema",
"commandPaletteChooseOrganization": "Velg organisasjon",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Kunne ikke aktivere 2FA", "otpErrorEnable": "Kunne ikke aktivere 2FA",
"otpErrorEnableDescription": "En feil oppstod under aktivering av 2FA", "otpErrorEnableDescription": "En feil oppstod under aktivering av 2FA",
"otpSetupCheckCode": "Vennligst skriv inn en 6-sifret kode", "otpSetupCheckCode": "Vennligst skriv inn en 6-sifret kode",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Administrasjon", "sidebarManagement": "Administrasjon",
"sidebarBillingAndLicenses": "Fakturering & lisenser", "sidebarBillingAndLicenses": "Fakturering & lisenser",
"sidebarLogsAnalytics": "Analyser", "sidebarLogsAnalytics": "Analyser",
"commandSites": "Områder",
"commandActionModeInfo": "Skriv \">\" for å åpne handlingsmodus",
"commandResources": "Ressurser",
"commandProxyResources": "Offentlige ressurser",
"commandClientResources": "Private ressurser",
"commandClients": "Klienter",
"commandUserDevices": "Bruker enheter",
"commandMachineClients": "Maskinklienter",
"commandDomains": "Domener",
"commandRemoteExitNodes": "Eksterne noder",
"commandTeam": "Lag",
"commandUsers": "Brukere",
"commandRoles": "Roller",
"commandInvitations": "Invitasjoner",
"commandPolicies": "Delte regler",
"commandResourcePolicies": "Offentlige ressurser regler",
"commandIdentityProviders": "Identitetsleverandører",
"commandApprovals": "Godkjenningsforespørsler",
"commandShareableLinks": "Delbare lenker",
"commandOrganization": "Organisasjon",
"commandLogsAndAnalytics": "Logg & Analyse",
"commandLogsAnalytics": "Analyse",
"commandLogsRequest": "HTTP forespørselslogger",
"commandLogsAccess": "Logger for autentisering",
"commandLogsAction": "Handlingslogger",
"commandLogsConnection": "Loggfiler for tilkobling",
"commandLogsStreaming": "Strømming",
"commandManagement": "Administrasjon",
"commandAlerting": "Varsler",
"commandProvisioning": "Forsyning",
"commandBluePrints": "Blåkopier",
"commandApiKeys": "API-nøkler",
"commandBillingAndLicenses": "Fakturering & Lisenser",
"commandBilling": "Fakturering",
"commandEnterpriseLicenses": "Lisenser",
"commandSettings": "Innstillinger",
"commandLauncher": "Oppstarter",
"commandResourceLauncher": "Ressurs Oppstarter",
"commandSearchResults": "Søkeresultater",
"alertingTitle": "Varsling", "alertingTitle": "Varsling",
"alertingDescription": "Definer kilder, triggere og handlinger for varsler", "alertingDescription": "Definer kilder, triggere og handlinger for varsler",
"alertingRules": "Varslingsregler", "alertingRules": "Varslingsregler",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domener", "billingDomains": "Domener",
"billingOrganizations": "Orger", "billingOrganizations": "Orger",
"billingRemoteExitNodes": "Eksterne Noder", "billingRemoteExitNodes": "Eksterne Noder",
"billingPublicResources": "Offentlige ressurser",
"billingPrivateResources": "Private ressurser",
"billingMachineClients": "Maskinklienter",
"billingNoLimitConfigured": "Ingen grense konfigurert", "billingNoLimitConfigured": "Ingen grense konfigurert",
"billingEstimatedPeriod": "Estimert faktureringsperiode", "billingEstimatedPeriod": "Estimert faktureringsperiode",
"billingIncludedUsage": "Inkludert Bruk", "billingIncludedUsage": "Inkludert Bruk",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Hvor mange brukere du kan bruke", "billingUsersInfo": "Hvor mange brukere du kan bruke",
"billingDomainInfo": "Hvor mange domener du kan bruke", "billingDomainInfo": "Hvor mange domener du kan bruke",
"billingRemoteExitNodesInfo": "Hvor mange fjernnoder du kan bruke", "billingRemoteExitNodesInfo": "Hvor mange fjernnoder du kan bruke",
"billingPublicResourcesInfo": "Hvor mange offentlige ressurser du kan bruke",
"billingPrivateResourcesInfo": "Hvor mange private ressurser du kan bruke",
"billingMachineClientsInfo": "Hvor mange maskinklienter du kan bruke",
"billingLicenseKeys": "Lisensnøkler", "billingLicenseKeys": "Lisensnøkler",
"billingLicenseKeysDescription": "Administrer dine lisensnøkkelabonnementer", "billingLicenseKeysDescription": "Administrer dine lisensnøkkelabonnementer",
"billingLicenseSubscription": "Lisens abonnement", "billingLicenseSubscription": "Lisens abonnement",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Lukk", "createInternalResourceDialogClose": "Lukk",
"createInternalResourceDialogCreateClientResource": "Opprett privat ressurs", "createInternalResourceDialogCreateClientResource": "Opprett privat ressurs",
"createInternalResourceDialogCreateClientResourceDescription": "Opprett en ny ressurs som bare vil være tilgjengelig for kunder som er koblet til organisasjonen", "createInternalResourceDialogCreateClientResourceDescription": "Opprett en ny ressurs som bare vil være tilgjengelig for kunder som er koblet til organisasjonen",
"privateResourceCreatePageSeeAll": "Se alle private ressurser",
"privateResourceAllowIcmpPing": "Tillat ICMP Ping",
"privateResourceNetworkAccess": "Nettverkstilgang",
"privateResourceNetworkAccessDescription": "Kontroller TCP/UDP porttilgang og om ICMP ping tillates for denne ressursen.",
"hostSettings": "Vertinnstillinger",
"cidrSettings": "CIDR-innstillinger",
"createInternalResourceDialogResourceProperties": "Ressursegenskaper", "createInternalResourceDialogResourceProperties": "Ressursegenskaper",
"createInternalResourceDialogName": "Navn", "createInternalResourceDialogName": "Navn",
"createInternalResourceDialogSite": "Område", "createInternalResourceDialogSite": "Område",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Ingen noder er tilgjengelige for denne organisasjonen. Opprett en node først for å bruke lokale nettsteder.", "noRemoteExitNodesAvailableDescription": "Ingen noder er tilgjengelige for denne organisasjonen. Opprett en node først for å bruke lokale nettsteder.",
"exitNode": "Utgangsnode", "exitNode": "Utgangsnode",
"country": "Land", "country": "Land",
"countryIsNot": "Land ikke",
"rulesMatchCountry": "For tiden basert på kilde IP", "rulesMatchCountry": "For tiden basert på kilde IP",
"region": "Fylke", "region": "Fylke",
"selectRegion": "Velg region", "selectRegion": "Velg region",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "To-faktor autentiseringsoppsett er nødvendig. Vennligst logg inn igjen via {dashboardUrl}/auth/login og fullfør dette steget. Kom deretter tilbake her.", "twoFactorSetupRequired": "To-faktor autentiseringsoppsett er nødvendig. Vennligst logg inn igjen via {dashboardUrl}/auth/login og fullfør dette steget. Kom deretter tilbake her.",
"additionalSecurityRequired": "Ekstra sikkerhet kreves", "additionalSecurityRequired": "Ekstra sikkerhet kreves",
"organizationRequiresAdditionalSteps": "Denne organisasjonen krever ytterligere sikkerhetstrinn før du får tilgang til ressurser.", "organizationRequiresAdditionalSteps": "Denne organisasjonen krever ytterligere sikkerhetstrinn før du får tilgang til ressurser.",
"sessionExpired": "Økt utløpt",
"sessionExpiredReauthRequired": "Økten din har utløpt i henhold til organisasjonens sikkerhetspolitikk. Vennligst autentiser på nytt for å fortsette.",
"reauthenticate": "Autentiser på nytt",
"completeTheseSteps": "Fullfør disse trinnene", "completeTheseSteps": "Fullfør disse trinnene",
"enableTwoFactorAuthentication": "Aktiver to-faktor autentisering", "enableTwoFactorAuthentication": "Aktiver to-faktor autentisering",
"completeSecuritySteps": "Fullfør sikkerhetstrinnene", "completeSecuritySteps": "Fullfør sikkerhetstrinnene",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Legg til brukere", "editInternalResourceDialogAddUsers": "Legg til brukere",
"editInternalResourceDialogAddClients": "Legg til klienter", "editInternalResourceDialogAddClients": "Legg til klienter",
"editInternalResourceDialogDestinationLabel": "Destinasjon", "editInternalResourceDialogDestinationLabel": "Destinasjon",
"editInternalResourceDialogDestinationDescription": "Spesifiser destinasjonsadressen for den interne ressursen. Dette kan være et vertsnavn, IP-adresse eller CIDR-sjikt avhengig av valgt modus. Valgfrie oppsett av intern DNS-alias for enklere identifikasjon.", "editInternalResourceDialogDestinationDescription": "Velg hvor denne ressursen kjører og hvordan klienter når den",
"internalResourceFormMultiSiteRoutingHelp": "Valg av flere nettsteder muliggjør motstandskraftig ruting og failover for høy tilgjengelighet.", "internalResourceFormMultiSiteRoutingHelp": "Valg av flere nettsteder muliggjør motstandskraftig ruting og failover for høy tilgjengelighet.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Lær mer", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Lær mer",
"editInternalResourceDialogPortRestrictionsDescription": "Begrens tilgang til spesifikke TCP/UDP-porter eller tillate/blokkere alle porter.", "editInternalResourceDialogPortRestrictionsDescription": "Begrens tilgang til spesifikke TCP/UDP-porter eller tillate/blokkere alle porter.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Ressurs deaktivert", "memberPortalResourceDisabled": "Ressurs deaktivert",
"memberPortalShowingResources": "Viser {start}-{end} av {total} ressurser", "memberPortalShowingResources": "Viser {start}-{end} av {total} ressurser",
"resourceLauncherTitle": "Ressurslansering", "resourceLauncherTitle": "Ressurslansering",
"resourceLauncherDescription": "Vis ressursdetaljer og start dem fra ett sted", "resourceSidebarLauncherTitle": "Oppstarter",
"resourceLauncherSearchPlaceholder": "Søk i alle områder...", "resourceLauncherDescription": "Se alle tilgjengelige ressurser og start dem fra ett sentralt sted",
"resourceLauncherSearchPlaceholder": "Søk i ressurser...",
"resourceLauncherDefaultView": "Standard", "resourceLauncherDefaultView": "Standard",
"resourceLauncherSaveView": "Lagre visning", "resourceLauncherSaveView": "Lagre visning",
"resourceLauncherSaveToCurrentView": "Lagre til nåværende visning", "resourceLauncherSaveToCurrentView": "Lagre til nåværende visning",
"resourceLauncherSaveDefaultPersonal": "Lagre for meg",
"resourceLauncherResetView": "Tilbakestill visning", "resourceLauncherResetView": "Tilbakestill visning",
"resourceLauncherResetSystemDefault": "Tilbakestill til systemets standard",
"resourceLauncherSystemDefaultRestored": "Systemstandard gjenopprettet",
"resourceLauncherSystemDefaultRestoredDescription": "Standardvisningen er tilbakestilt til de opprinnelige innstillingene.",
"resourceLauncherSaveAsNewView": "Lagre som ny visning", "resourceLauncherSaveAsNewView": "Lagre som ny visning",
"resourceLauncherSaveAsNewViewDescription": "Gi denne visningen et navn for å lagre dine nåværende filtre og oppsett.", "resourceLauncherSaveAsNewViewDescription": "Gi denne visningen et navn for å lagre dine nåværende filtre og oppsett.",
"resourceLauncherSaveForEveryone": "Lagre for alle", "resourceLauncherSaveForEveryone": "Lagre for alle",
"resourceLauncherSaveForEveryoneDescription": "Del denne visningen med alle organisasjonsmedlemmer. Når avkrysset, er visningen synlig bare for deg.", "resourceLauncherSaveForEveryoneDescription": "Del denne visningen med alle organisasjonsmedlemmer. Når avkrysset, er visningen synlig bare for deg.",
"resourceLauncherMakePersonal": "Gjør personlig", "resourceLauncherMakePersonal": "Gjør personlig",
"resourceLauncherFilter": "Filter", "resourceLauncherFilter": "Filter",
"resourceLauncherFilterWithCount": "Filter, {count} anvendt",
"resourceLauncherSort": "Sorter", "resourceLauncherSort": "Sorter",
"resourceLauncherSortAscending": "Sorter stigende", "resourceLauncherSortAscending": "Sorter stigende",
"resourceLauncherSortDescending": "Sorter synkende", "resourceLauncherSortDescending": "Sorter synkende",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Grupper etter", "resourceLauncherGroupBy": "Grupper etter",
"resourceLauncherGroupBySite": "Område", "resourceLauncherGroupBySite": "Område",
"resourceLauncherGroupByLabel": "Etikett", "resourceLauncherGroupByLabel": "Etikett",
"resourceLauncherGroupByNone": "Ingen",
"resourceLauncherLayout": "Oppsett", "resourceLauncherLayout": "Oppsett",
"resourceLauncherLayoutGrid": "Rutenett", "resourceLauncherLayoutGrid": "Rutenett",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Vis områdestikkord", "resourceLauncherShowSiteTags": "Vis områdestikkord",
"resourceLauncherShowRecents": "Vis nylige", "resourceLauncherShowRecents": "Vis nylige",
"resourceLauncherDeleteView": "Slett visning", "resourceLauncherDeleteView": "Slett visning",
"resourceLauncherDeleteViewTitle": "Slett visning",
"resourceLauncherDeleteViewQuestion": "Er du sikker på at du vil slette denne oppstartervisningen?",
"resourceLauncherDeleteViewConfirm": "Slett visning",
"resourceLauncherViewAsAdmin": "Vis som administrator", "resourceLauncherViewAsAdmin": "Vis som administrator",
"resourceLauncherResourceDetailsDescription": "Vis detaljer for denne ressursen.", "resourceLauncherResourceDetailsDescription": "Tilkoblingsinformasjon og status for denne ressursen.",
"resourceLauncherResourceDetails": "Ressursdetaljer",
"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",
"resourceLauncherDownloadClient": "Last ned klient",
"resourceLauncherFailedToLoadDetails": "Kunne ikke laste ressurstetatter. Du har kanskje ikke lenger tilgang til denne ressursen.",
"resourceLauncherNoPortRestrictions": "Ingen portbegrensninger",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Umerket", "resourceLauncherUnlabeled": "Umerket",
"resourceLauncherNoSite": "Ingen område", "resourceLauncherNoSite": "Ingen område",
"resourceLauncherNoResourcesInGroup": "Ingen ressurser i denne gruppen", "resourceLauncherNoResourcesInGroup": "Ingen ressurser i denne gruppen",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Ingen ressurser funnet", "resourceLauncherEmptyStateNoResultsTitle": "Ingen ressurser funnet",
"resourceLauncherEmptyStateNoResultsDescription": "Ingen ressurser matcher dine nåværende søk eller filtre. Prøv å justere dem for å finne det du leter etter.", "resourceLauncherEmptyStateNoResultsDescription": "Ingen ressurser matcher dine nåværende søk eller filtre. Prøv å justere dem for å finne det du leter etter.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Ingen ressurser samsvarer med \"{query}\". Prøv å justere søket eller fjern filtrene for å se alle ressursene.", "resourceLauncherEmptyStateNoResultsWithQuery": "Ingen ressurser samsvarer med \"{query}\". Prøv å justere søket eller fjern filtrene for å se alle ressursene.",
"resourceLauncherSearchFirstTitle": "Søk eller filtrer for å bla gjennom",
"resourceLauncherSearchFirstDescription": "Du har tilgang til mange ressurser. Bruk søk eller filtrer eksplisitt etter sted eller etikett for å finne det du trenger.",
"resourceLauncherSiteGroupingDisabled": "Stedssamling er ikke tilgjengelig i denne omfanget. Filtrer etter sted for å gruppere et mindre sett.",
"resourceLauncherLabelGroupingDisabled": "Etikettsamling er ikke tilgjengelig i denne omfanget.",
"resourceLauncherCompactModeHint": "Viser en forenklet liste for raskere bla. Bruk søk eller filtrer for å innskrenke resultatene.",
"resourceLauncherCompactGroupingHint": "Bruk filter for sted eller etikett for å aktivere gruppering.",
"resourceLauncherCopiedToClipboard": "Kopiert til utklippstavlen", "resourceLauncherCopiedToClipboard": "Kopiert til utklippstavlen",
"resourceLauncherCopiedAccessDescription": "Ressurstilgang er kopiert til utklippstavlen din.", "resourceLauncherCopiedAccessDescription": "Ressurstilgang er kopiert til utklippstavlen din.",
"resourceLauncherViewNamePlaceholder": "Visningsnavn", "resourceLauncherViewNamePlaceholder": "Visningsnavn",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Proxy verzoeken over rauwe TCP/UDP met behulp van een poortnummer. Vereist sites om verbinding te maken met een remote node.", "resourceRawDescriptionCloud": "Proxy verzoeken over rauwe TCP/UDP met behulp van een poortnummer. Vereist sites om verbinding te maken met een remote node.",
"resourceCreate": "Bron maken", "resourceCreate": "Bron maken",
"resourceCreateDescription": "Volg de onderstaande stappen om een nieuwe bron te maken", "resourceCreateDescription": "Volg de onderstaande stappen om een nieuwe bron te maken",
"resourcePublicCreate": "Maak Openbare Bron",
"resourcePublicCreateDescription": "Volg de onderstaande stappen om een nieuwe openbare bron aan te maken die toegankelijk is via een webbrowser",
"resourceCreateGeneralDescription": "Configureer de basisinstellingen van de bron, inclusief de naam en het type", "resourceCreateGeneralDescription": "Configureer de basisinstellingen van de bron, inclusief de naam en het type",
"resourceSeeAll": "Alle bronnen bekijken", "resourceSeeAll": "Alle bronnen bekijken",
"resourceCreateGeneral": "Algemeen", "resourceCreateGeneral": "Algemeen",
@@ -613,7 +615,8 @@
"idpNameInternal": "Intern", "idpNameInternal": "Intern",
"emailInvalid": "Ongeldig e-mailadres", "emailInvalid": "Ongeldig e-mailadres",
"inviteValidityDuration": "Selecteer een tijdsduur", "inviteValidityDuration": "Selecteer een tijdsduur",
"accessRoleSelectPlease": "Selecteer een rol", "accessRoleSelectPlease": "Een gebruiker moet tot minstens één rol behoren.",
"accessRoleRequired": "Rol vereist",
"removeOwnAdminRoleConfirmTitle": "Uw beheerderstoegang verwijderen?", "removeOwnAdminRoleConfirmTitle": "Uw beheerderstoegang verwijderen?",
"removeOwnAdminRoleConfirmDescription": "U zult na het opslaan geen beheerdersrechten meer hebben in deze organisatie. Een andere beheerder kan de toegang indien nodig herstellen.", "removeOwnAdminRoleConfirmDescription": "U zult na het opslaan geen beheerdersrechten meer hebben in deze organisatie. Een andere beheerder kan de toegang indien nodig herstellen.",
"removeOwnAdminRoleConfirmButton": "Verwijder Mijn Beheerderstoegang", "removeOwnAdminRoleConfirmButton": "Verwijder Mijn Beheerderstoegang",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Basic Header Authenticatie", "policyAuthHeaderAuthTitle": "Basic Header Authenticatie",
"policyAuthHeaderAuthDescription": "Valideer een aangepaste HTTP-headernaam en waarde bij elk verzoek", "policyAuthHeaderAuthDescription": "Valideer een aangepaste HTTP-headernaam en waarde bij elk verzoek",
"policyAuthHeaderAuthSummary": "Header geconfigureerd", "policyAuthHeaderAuthSummary": "Header geconfigureerd",
"policyAuthHeaderName": "Header naam", "policyAuthHeaderName": "Gebruikersnaam",
"policyAuthHeaderValue": "Verwachte waarde", "policyAuthHeaderValue": "Wachtwoord",
"policyAuthSetPasscode": "Stel toegangscode in", "policyAuthSetPasscode": "Stel toegangscode in",
"policyAuthSetPincode": "Stel Pincode in", "policyAuthSetPincode": "Stel Pincode in",
"policyAuthSetEmailWhitelist": "Stel E-mail Whitelist in", "policyAuthSetEmailWhitelist": "Stel E-mail Whitelist in",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Stel Resource Pincode in", "actionSetResourcePincode": "Stel Resource Pincode in",
"actionSetResourceEmailWhitelist": "Stel Resource e-mail whitelist in", "actionSetResourceEmailWhitelist": "Stel Resource e-mail whitelist in",
"actionGetResourceEmailWhitelist": "Verkrijg Resource E-mail Whitelist", "actionGetResourceEmailWhitelist": "Verkrijg Resource E-mail Whitelist",
"actionGetResourcePolicy": "Haal Bronbeleid op",
"actionUpdateResourcePolicy": "Werk Bronbeleid bij",
"actionSetResourcePolicyUsers": "Stel gebruikers van bronbeleid in",
"actionSetResourcePolicyRoles": "Stel rollen van bronbeleid in",
"actionSetResourcePolicyPassword": "Stel wachtwoord van bronbeleid in",
"actionSetResourcePolicyPincode": "Stel pincode van bronbeleid in",
"actionSetResourcePolicyHeaderAuth": "Stel hoofdveraantwoorden van bronbeleid in",
"actionSetResourcePolicyWhitelist": "Stel e-mail whitelist van bronbeleid in",
"actionSetResourcePolicyRules": "Stel regels van bronbeleid in",
"actionCreateTarget": "Doelwit aanmaken", "actionCreateTarget": "Doelwit aanmaken",
"actionDeleteTarget": "Verwijder doel", "actionDeleteTarget": "Verwijder doel",
"actionGetTarget": "Verkrijg Doel", "actionGetTarget": "Verkrijg Doel",
@@ -1507,6 +1519,30 @@
"navbar": "Navigatiemenu", "navbar": "Navigatiemenu",
"navbarDescription": "Hoofd navigatie menu voor de applicatie", "navbarDescription": "Hoofd navigatie menu voor de applicatie",
"navbarDocsLink": "Documentatie", "navbarDocsLink": "Documentatie",
"commandPaletteTitle": "Commandopalet",
"commandPaletteDescription": "Zoek naar pagina's, organisaties, bronnen en acties",
"commandPaletteSearchPlaceholder": "Zoek pagina's, bronnen, acties...",
"commandPaletteNoResults": "Geen resultaten gevonden.",
"commandPaletteSearching": "Zoeken...",
"commandPaletteNavigation": "Navigatie",
"commandPaletteOrganizations": "Organisaties",
"commandPaletteSites": "Sites",
"commandPaletteResources": "Bronnen",
"commandPaletteUsers": "Gebruikers",
"commandPaletteClients": "Machine klanten",
"commandPaletteActions": "Acties",
"commandPaletteCreateSite": "Site Aanmaken",
"commandPaletteCreateProxyResource": "Maak Openbare Bron",
"commandPaletteCreatePrivateResource": "Maak Privébron",
"commandPaletteCreateUser": "Gebruiker aanmaken",
"commandPaletteCreateApiKey": "API-sleutel aanmaken",
"commandPaletteCreateMachineClient": "Machineclient aanmaken",
"commandPaletteCreateAlertRule": "Alarmregel aanmaken",
"commandPaletteCreateIdentityProvider": "Identiteitsprovider aanmaken",
"commandPaletteToggleTheme": "Thema wisselen",
"commandPaletteChooseOrganization": "Kies Organisatie",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Kan 2FA niet inschakelen", "otpErrorEnable": "Kan 2FA niet inschakelen",
"otpErrorEnableDescription": "Er is een fout opgetreden tijdens het inschakelen van 2FA", "otpErrorEnableDescription": "Er is een fout opgetreden tijdens het inschakelen van 2FA",
"otpSetupCheckCode": "Voer een 6-cijferige code in", "otpSetupCheckCode": "Voer een 6-cijferige code in",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Beheer", "sidebarManagement": "Beheer",
"sidebarBillingAndLicenses": "Facturatie & Licenties", "sidebarBillingAndLicenses": "Facturatie & Licenties",
"sidebarLogsAnalytics": "Analyses", "sidebarLogsAnalytics": "Analyses",
"commandSites": "Sites",
"commandActionModeInfo": "Typ \">\" Om Actiemodus Te Openen",
"commandResources": "Bronnen",
"commandProxyResources": "Openbare Bronnen",
"commandClientResources": "Privébronnen",
"commandClients": "Clienten",
"commandUserDevices": "Apparaatgebruikers",
"commandMachineClients": "Machine klanten",
"commandDomains": "Domeinen",
"commandRemoteExitNodes": "Externe Knooppunten",
"commandTeam": "Team",
"commandUsers": "Gebruikers",
"commandRoles": "Rollen",
"commandInvitations": "Uitnodigingen",
"commandPolicies": "Gedeeld Beleid",
"commandResourcePolicies": "Openbare Bronnenbeleid",
"commandIdentityProviders": "Identiteitsproviders",
"commandApprovals": "Goedkeuring Aanvragen",
"commandShareableLinks": "Deelbare Links",
"commandOrganization": "Organisatie",
"commandLogsAndAnalytics": "Logboeken & Analytics",
"commandLogsAnalytics": "Analyse",
"commandLogsRequest": "HTTP-aanvraaglogboeken",
"commandLogsAccess": "Toegang tot logboek",
"commandLogsAction": "Actie Logboeken",
"commandLogsConnection": "Connectie Logs",
"commandLogsStreaming": "Streamen",
"commandManagement": "Beheren",
"commandAlerting": "Waarschuwingen",
"commandProvisioning": "Inrichting",
"commandBluePrints": "Blauwdrukken",
"commandApiKeys": "API sleutels",
"commandBillingAndLicenses": "Facturering & Licenties",
"commandBilling": "Facturering",
"commandEnterpriseLicenses": "Licentie",
"commandSettings": "Instellingen",
"commandLauncher": "Startprogramma",
"commandResourceLauncher": "Bron Startprogramma",
"commandSearchResults": "Zoekresultaten",
"alertingTitle": "Waarschuwingen", "alertingTitle": "Waarschuwingen",
"alertingDescription": "Definieer bronnen, triggers en acties voor meldingen", "alertingDescription": "Definieer bronnen, triggers en acties voor meldingen",
"alertingRules": "Waarschuwingsregels", "alertingRules": "Waarschuwingsregels",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domeinen", "billingDomains": "Domeinen",
"billingOrganizations": "Ordenen", "billingOrganizations": "Ordenen",
"billingRemoteExitNodes": "Externe knooppunten", "billingRemoteExitNodes": "Externe knooppunten",
"billingPublicResources": "Openbare Bronnen",
"billingPrivateResources": "Privébronnen",
"billingMachineClients": "Machine klanten",
"billingNoLimitConfigured": "Geen limiet ingesteld", "billingNoLimitConfigured": "Geen limiet ingesteld",
"billingEstimatedPeriod": "Geschatte Facturatie Periode", "billingEstimatedPeriod": "Geschatte Facturatie Periode",
"billingIncludedUsage": "Opgenomen Gebruik", "billingIncludedUsage": "Opgenomen Gebruik",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Hoeveel gebruikers je kan gebruiken", "billingUsersInfo": "Hoeveel gebruikers je kan gebruiken",
"billingDomainInfo": "Hoeveel domeinen je kunt gebruiken", "billingDomainInfo": "Hoeveel domeinen je kunt gebruiken",
"billingRemoteExitNodesInfo": "Hoeveel externe nodes je kunt gebruiken", "billingRemoteExitNodesInfo": "Hoeveel externe nodes je kunt gebruiken",
"billingPublicResourcesInfo": "Hoeveel openbare bronnen u kunt gebruiken",
"billingPrivateResourcesInfo": "Hoeveel privébronnen u kunt gebruiken",
"billingMachineClientsInfo": "Hoeveel machineclients u kunt gebruiken",
"billingLicenseKeys": "Licentie Sleutels", "billingLicenseKeys": "Licentie Sleutels",
"billingLicenseKeysDescription": "Beheer uw licentiesleutelabonnementen", "billingLicenseKeysDescription": "Beheer uw licentiesleutelabonnementen",
"billingLicenseSubscription": "Licentie abonnement", "billingLicenseSubscription": "Licentie abonnement",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Sluiten", "createInternalResourceDialogClose": "Sluiten",
"createInternalResourceDialogCreateClientResource": "Privé bron maken", "createInternalResourceDialogCreateClientResource": "Privé bron maken",
"createInternalResourceDialogCreateClientResourceDescription": "Maak een nieuwe bron aan die alleen toegankelijk is voor klanten die verbonden zijn met de organisatie", "createInternalResourceDialogCreateClientResourceDescription": "Maak een nieuwe bron aan die alleen toegankelijk is voor klanten die verbonden zijn met de organisatie",
"privateResourceCreatePageSeeAll": "Bekijk Alle Privébronnen",
"privateResourceAllowIcmpPing": "Sta ICMP Ping toe",
"privateResourceNetworkAccess": "Netwerktoegang",
"privateResourceNetworkAccessDescription": "Beheer TCP/UDP poorttoegang en of ICMP-ping is toegestaan voor deze bron.",
"hostSettings": "Hostinstellingen",
"cidrSettings": "CIDR-instellingen",
"createInternalResourceDialogResourceProperties": "Bron-eigenschappen", "createInternalResourceDialogResourceProperties": "Bron-eigenschappen",
"createInternalResourceDialogName": "Naam", "createInternalResourceDialogName": "Naam",
"createInternalResourceDialogSite": "Site", "createInternalResourceDialogSite": "Site",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Er zijn geen knooppunten beschikbaar voor deze organisatie. Maak eerst een knooppunt aan om lokale sites te gebruiken.", "noRemoteExitNodesAvailableDescription": "Er zijn geen knooppunten beschikbaar voor deze organisatie. Maak eerst een knooppunt aan om lokale sites te gebruiken.",
"exitNode": "Exit Node", "exitNode": "Exit Node",
"country": "Land", "country": "Land",
"countryIsNot": "Land Is Niet",
"rulesMatchCountry": "Momenteel gebaseerd op bron IP", "rulesMatchCountry": "Momenteel gebaseerd op bron IP",
"region": "Regio", "region": "Regio",
"selectRegion": "Selecteer regio", "selectRegion": "Selecteer regio",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "Tweestapsverificatie instellen is vereist. Log opnieuw in via {dashboardUrl}/auth/login voltooide deze stap. Kom daarna hier terug.", "twoFactorSetupRequired": "Tweestapsverificatie instellen is vereist. Log opnieuw in via {dashboardUrl}/auth/login voltooide deze stap. Kom daarna hier terug.",
"additionalSecurityRequired": "Extra beveiliging vereist", "additionalSecurityRequired": "Extra beveiliging vereist",
"organizationRequiresAdditionalSteps": "Deze organisatie vereist extra beveiligingsstappen voordat u toegang hebt tot de bronnen.", "organizationRequiresAdditionalSteps": "Deze organisatie vereist extra beveiligingsstappen voordat u toegang hebt tot de bronnen.",
"sessionExpired": "Sessie Verlopen",
"sessionExpiredReauthRequired": "Uw sessie is verlopen volgens het beveiligingsbeleid van uw organisatie. Verifieer alstublieft opnieuw om door te gaan.",
"reauthenticate": "Opnieuw verifiëren",
"completeTheseSteps": "Voltooi deze stappen", "completeTheseSteps": "Voltooi deze stappen",
"enableTwoFactorAuthentication": "Tweestapsverificatie inschakelen", "enableTwoFactorAuthentication": "Tweestapsverificatie inschakelen",
"completeSecuritySteps": "Voltooi beveiligingsstappen", "completeSecuritySteps": "Voltooi beveiligingsstappen",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Gebruikers toevoegen", "editInternalResourceDialogAddUsers": "Gebruikers toevoegen",
"editInternalResourceDialogAddClients": "Clienten toevoegen", "editInternalResourceDialogAddClients": "Clienten toevoegen",
"editInternalResourceDialogDestinationLabel": "Bestemming", "editInternalResourceDialogDestinationLabel": "Bestemming",
"editInternalResourceDialogDestinationDescription": "Specificeer het bestemmingsadres voor de interne bron. Dit kan een hostnaam, IP-adres of CIDR-bereik zijn, afhankelijk van de geselecteerde modus. Stel optioneel een interne DNS-alias in voor eenvoudigere identificatie.", "editInternalResourceDialogDestinationDescription": "Kies waar deze bron draait en hoe clients deze bereiken",
"internalResourceFormMultiSiteRoutingHelp": "Selecteren van meerdere sites maakt veerkrachtige routing en failover mogelijk voor hoge beschikbaarheid.", "internalResourceFormMultiSiteRoutingHelp": "Selecteren van meerdere sites maakt veerkrachtige routing en failover mogelijk voor hoge beschikbaarheid.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Meer informatie", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Meer informatie",
"editInternalResourceDialogPortRestrictionsDescription": "Beperk toegang tot specifieke TCP/UDP-poorten of sta alle poorten toe/blokkeer.", "editInternalResourceDialogPortRestrictionsDescription": "Beperk toegang tot specifieke TCP/UDP-poorten of sta alle poorten toe/blokkeer.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Bron Uitgeschakeld", "memberPortalResourceDisabled": "Bron Uitgeschakeld",
"memberPortalShowingResources": "Toont {start}-{end} van {total} bronnen", "memberPortalShowingResources": "Toont {start}-{end} van {total} bronnen",
"resourceLauncherTitle": "Bron Launcher", "resourceLauncherTitle": "Bron Launcher",
"resourceLauncherDescription": "Bekijk brongegevens en start ze vanaf één plek", "resourceSidebarLauncherTitle": "Startprogramma",
"resourceLauncherSearchPlaceholder": "Zoek alle sites...", "resourceLauncherDescription": "Bekijk alle beschikbare bronnen en start ze vanuit één centraal punt",
"resourceLauncherSearchPlaceholder": "Zoek naar bronnen...",
"resourceLauncherDefaultView": "Standaard", "resourceLauncherDefaultView": "Standaard",
"resourceLauncherSaveView": "Weergave Opslaan", "resourceLauncherSaveView": "Weergave Opslaan",
"resourceLauncherSaveToCurrentView": "Opslaan naar huidige weergave", "resourceLauncherSaveToCurrentView": "Opslaan naar huidige weergave",
"resourceLauncherSaveDefaultPersonal": "Sla voor mij op",
"resourceLauncherResetView": "Weergave Herstellen", "resourceLauncherResetView": "Weergave Herstellen",
"resourceLauncherResetSystemDefault": "Reset naar standaardinstelling van het systeem",
"resourceLauncherSystemDefaultRestored": "Systeemstandaard hersteld",
"resourceLauncherSystemDefaultRestoredDescription": "De standaardweergave is teruggezet naar de oorspronkelijke instellingen.",
"resourceLauncherSaveAsNewView": "Opslaan als Nieuwe Weergave", "resourceLauncherSaveAsNewView": "Opslaan als Nieuwe Weergave",
"resourceLauncherSaveAsNewViewDescription": "Geef deze weergave een naam om je huidige filters en indeling op te slaan.", "resourceLauncherSaveAsNewViewDescription": "Geef deze weergave een naam om je huidige filters en indeling op te slaan.",
"resourceLauncherSaveForEveryone": "Opslaan voor Iedereen", "resourceLauncherSaveForEveryone": "Opslaan voor Iedereen",
"resourceLauncherSaveForEveryoneDescription": "Deel deze weergave met alle organisatieleden. Als dit niet is aangevinkt, is de weergave alleen zichtbaar voor jou.", "resourceLauncherSaveForEveryoneDescription": "Deel deze weergave met alle organisatieleden. Als dit niet is aangevinkt, is de weergave alleen zichtbaar voor jou.",
"resourceLauncherMakePersonal": "Persoonlijk Maken", "resourceLauncherMakePersonal": "Persoonlijk Maken",
"resourceLauncherFilter": "Filter", "resourceLauncherFilter": "Filter",
"resourceLauncherFilterWithCount": "Filter, {count} toegepast",
"resourceLauncherSort": "Sorteren", "resourceLauncherSort": "Sorteren",
"resourceLauncherSortAscending": "Oplopend sorteren", "resourceLauncherSortAscending": "Oplopend sorteren",
"resourceLauncherSortDescending": "Aflopend sorteren", "resourceLauncherSortDescending": "Aflopend sorteren",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Groep Op", "resourceLauncherGroupBy": "Groep Op",
"resourceLauncherGroupBySite": "Site", "resourceLauncherGroupBySite": "Site",
"resourceLauncherGroupByLabel": "Label", "resourceLauncherGroupByLabel": "Label",
"resourceLauncherGroupByNone": "Geen",
"resourceLauncherLayout": "Lay-out", "resourceLauncherLayout": "Lay-out",
"resourceLauncherLayoutGrid": "Raster", "resourceLauncherLayoutGrid": "Raster",
"resourceLauncherLayoutList": "Lijst", "resourceLauncherLayoutList": "Lijst",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Site Tags Weergeven", "resourceLauncherShowSiteTags": "Site Tags Weergeven",
"resourceLauncherShowRecents": "Recente Weergeven", "resourceLauncherShowRecents": "Recente Weergeven",
"resourceLauncherDeleteView": "Weergave Verwijderen", "resourceLauncherDeleteView": "Weergave Verwijderen",
"resourceLauncherDeleteViewTitle": "Weergave verwijderen",
"resourceLauncherDeleteViewQuestion": "Weet u zeker dat u deze launcher-weergave wilt verwijderen?",
"resourceLauncherDeleteViewConfirm": "Weergave verwijderen",
"resourceLauncherViewAsAdmin": "Bekijk als Admin", "resourceLauncherViewAsAdmin": "Bekijk als Admin",
"resourceLauncherResourceDetailsDescription": "Bekijk details voor deze bron.", "resourceLauncherResourceDetailsDescription": "Verbindingsinformatie en -status voor deze bron.",
"resourceLauncherResourceDetails": "Brongegevens",
"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",
"resourceLauncherDownloadClient": "Client downloaden",
"resourceLauncherFailedToLoadDetails": "Kon brongegevens niet laden. U heeft mogelijk geen toegang meer tot deze bron.",
"resourceLauncherNoPortRestrictions": "Geen poortbeperkingen",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Geen label", "resourceLauncherUnlabeled": "Geen label",
"resourceLauncherNoSite": "Geen Site", "resourceLauncherNoSite": "Geen Site",
"resourceLauncherNoResourcesInGroup": "Geen bronnen in deze groep", "resourceLauncherNoResourcesInGroup": "Geen bronnen in deze groep",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Geen Bronnen Gevonden", "resourceLauncherEmptyStateNoResultsTitle": "Geen Bronnen Gevonden",
"resourceLauncherEmptyStateNoResultsDescription": "Geen bronnen komen overeen met je huidige zoekopdracht of filters. Probeer ze aan te passen om te vinden wat je zoekt.", "resourceLauncherEmptyStateNoResultsDescription": "Geen bronnen komen overeen met je huidige zoekopdracht of filters. Probeer ze aan te passen om te vinden wat je zoekt.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Geen bronnen komen overeen met \"{query}\". Probeer je zoekopdracht aan te passen of filters te wissen om alle bronnen te zien.", "resourceLauncherEmptyStateNoResultsWithQuery": "Geen bronnen komen overeen met \"{query}\". Probeer je zoekopdracht aan te passen of filters te wissen om alle bronnen te zien.",
"resourceLauncherSearchFirstTitle": "Zoek of Filter om te bladeren",
"resourceLauncherSearchFirstDescription": "U heeft toegang tot veel bronnen. Gebruik zoeken of filteren op site of label om te vinden wat u nodig heeft.",
"resourceLauncherSiteGroupingDisabled": "Sitegroeping is niet beschikbaar op deze schaal. Filter op site om een kleiner aantal te groeperen.",
"resourceLauncherLabelGroupingDisabled": "Labelgroepering is niet beschikbaar op deze schaal.",
"resourceLauncherCompactModeHint": "Een vereenvoudigde lijst weergegeven voor sneller bladeren. Gebruik zoeken of filters om resultaten te verfijnen.",
"resourceLauncherCompactGroupingHint": "Toepas site- of labelfilters om groepering mogelijk te maken.",
"resourceLauncherCopiedToClipboard": "Gekopieerd naar klembord", "resourceLauncherCopiedToClipboard": "Gekopieerd naar klembord",
"resourceLauncherCopiedAccessDescription": "Toegang tot bron is gekopieerd naar je klembord.", "resourceLauncherCopiedAccessDescription": "Toegang tot bron is gekopieerd naar je klembord.",
"resourceLauncherViewNamePlaceholder": "Weergavenaam", "resourceLauncherViewNamePlaceholder": "Weergavenaam",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Żądania proxy nad surowym TCP/UDP przy użyciu numeru portu. Wymaga stron aby połączyć się ze zdalnym węzłem.", "resourceRawDescriptionCloud": "Żądania proxy nad surowym TCP/UDP przy użyciu numeru portu. Wymaga stron aby połączyć się ze zdalnym węzłem.",
"resourceCreate": "Utwórz zasób", "resourceCreate": "Utwórz zasób",
"resourceCreateDescription": "Wykonaj poniższe kroki, aby utworzyć nowy zasób", "resourceCreateDescription": "Wykonaj poniższe kroki, aby utworzyć nowy zasób",
"resourcePublicCreate": "Utwórz zasób publiczny",
"resourcePublicCreateDescription": "Postępuj zgodnie z poniższymi krokami, aby utworzyć nowy zasób publiczny dostępny przez przeglądarkę internetową",
"resourceCreateGeneralDescription": "Skonfiguruj podstawowe ustawienia zasobu, w tym nazwę i typ", "resourceCreateGeneralDescription": "Skonfiguruj podstawowe ustawienia zasobu, w tym nazwę i typ",
"resourceSeeAll": "Zobacz wszystkie zasoby", "resourceSeeAll": "Zobacz wszystkie zasoby",
"resourceCreateGeneral": "Ogólny", "resourceCreateGeneral": "Ogólny",
@@ -613,7 +615,8 @@
"idpNameInternal": "Wewnętrzny", "idpNameInternal": "Wewnętrzny",
"emailInvalid": "Nieprawidłowy adres e-mail", "emailInvalid": "Nieprawidłowy adres e-mail",
"inviteValidityDuration": "Proszę wybrać okres ważności", "inviteValidityDuration": "Proszę wybrać okres ważności",
"accessRoleSelectPlease": "Proszę wybrać rolę", "accessRoleSelectPlease": "Użytkownik musi należeć do co najmniej jednej roli.",
"accessRoleRequired": "Wymagana rola",
"removeOwnAdminRoleConfirmTitle": "Usunąć dostęp administratora?", "removeOwnAdminRoleConfirmTitle": "Usunąć dostęp administratora?",
"removeOwnAdminRoleConfirmDescription": "Po zapisaniu nie będziesz już posiadał uprawnień administratora w tej organizacji. Inny administrator może przywrócić dostęp, jeśli to konieczne.", "removeOwnAdminRoleConfirmDescription": "Po zapisaniu nie będziesz już posiadał uprawnień administratora w tej organizacji. Inny administrator może przywrócić dostęp, jeśli to konieczne.",
"removeOwnAdminRoleConfirmButton": "Usuń mój dostęp administratora", "removeOwnAdminRoleConfirmButton": "Usuń mój dostęp administratora",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Podstawowe Uwierzytelnianie Nagłówka", "policyAuthHeaderAuthTitle": "Podstawowe Uwierzytelnianie Nagłówka",
"policyAuthHeaderAuthDescription": "Walidacja niestandardowej nazwy i wartości nagłówka HTTP przy każdym żądaniu", "policyAuthHeaderAuthDescription": "Walidacja niestandardowej nazwy i wartości nagłówka HTTP przy każdym żądaniu",
"policyAuthHeaderAuthSummary": "Skonfigurowany nagłówek", "policyAuthHeaderAuthSummary": "Skonfigurowany nagłówek",
"policyAuthHeaderName": "Nazwa nagłówka", "policyAuthHeaderName": "Nazwa użytkownika",
"policyAuthHeaderValue": "Oczekiwana wartość", "policyAuthHeaderValue": "Hasło",
"policyAuthSetPasscode": "Ustaw hasło dostępu", "policyAuthSetPasscode": "Ustaw hasło dostępu",
"policyAuthSetPincode": "Ustaw kod PIN", "policyAuthSetPincode": "Ustaw kod PIN",
"policyAuthSetEmailWhitelist": "Ustaw białą listę e-mail", "policyAuthSetEmailWhitelist": "Ustaw białą listę e-mail",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Ustaw kod PIN zasobu", "actionSetResourcePincode": "Ustaw kod PIN zasobu",
"actionSetResourceEmailWhitelist": "Ustaw białą listę email zasobu", "actionSetResourceEmailWhitelist": "Ustaw białą listę email zasobu",
"actionGetResourceEmailWhitelist": "Pobierz białą listę email zasobu", "actionGetResourceEmailWhitelist": "Pobierz białą listę email zasobu",
"actionGetResourcePolicy": "Pobierz politykę zasobów",
"actionUpdateResourcePolicy": "Zaktualizuj politykę zasobów",
"actionSetResourcePolicyUsers": "Ustaw użytkowników polityki zasobów",
"actionSetResourcePolicyRoles": "Ustaw role polityki zasobów",
"actionSetResourcePolicyPassword": "Ustaw hasło polityki zasobów",
"actionSetResourcePolicyPincode": "Ustaw kod PIN polityki zasobów",
"actionSetResourcePolicyHeaderAuth": "Ustaw nagłówkowe uwierzytelnianie polityki zasobów",
"actionSetResourcePolicyWhitelist": "Ustaw białą listę email polityki zasobów",
"actionSetResourcePolicyRules": "Ustaw zasady polityki zasobów",
"actionCreateTarget": "Utwórz cel", "actionCreateTarget": "Utwórz cel",
"actionDeleteTarget": "Usuń cel", "actionDeleteTarget": "Usuń cel",
"actionGetTarget": "Pobierz cel", "actionGetTarget": "Pobierz cel",
@@ -1507,6 +1519,30 @@
"navbar": "Menu nawigacyjne", "navbar": "Menu nawigacyjne",
"navbarDescription": "Główne menu nawigacyjne aplikacji", "navbarDescription": "Główne menu nawigacyjne aplikacji",
"navbarDocsLink": "Dokumentacja", "navbarDocsLink": "Dokumentacja",
"commandPaletteTitle": "Paleta poleceń",
"commandPaletteDescription": "Szukaj stron, organizacji, zasobów i akcji",
"commandPaletteSearchPlaceholder": "Szukaj stron, zasobów, akcji...",
"commandPaletteNoResults": "Nie znaleziono wyników.",
"commandPaletteSearching": "Wyszukiwanie...",
"commandPaletteNavigation": "Nawigacja",
"commandPaletteOrganizations": "Organizacje",
"commandPaletteSites": "Witryny",
"commandPaletteResources": "Zasoby",
"commandPaletteUsers": "Użytkownicy",
"commandPaletteClients": "Klienci maszynowi",
"commandPaletteActions": "Akcje",
"commandPaletteCreateSite": "Utwórz witrynę",
"commandPaletteCreateProxyResource": "Utwórz zasób publiczny",
"commandPaletteCreatePrivateResource": "Utwórz zasób prywatny",
"commandPaletteCreateUser": "Utwórz użytkownika",
"commandPaletteCreateApiKey": "Utwórz klucz API",
"commandPaletteCreateMachineClient": "Utwórz klienta maszynowego",
"commandPaletteCreateAlertRule": "Utwórz regułę powiadomień",
"commandPaletteCreateIdentityProvider": "Utwórz dostawcę tożsamości",
"commandPaletteToggleTheme": "Przełącz motyw",
"commandPaletteChooseOrganization": "Wybierz organizację",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Nie można włączyć 2FA", "otpErrorEnable": "Nie można włączyć 2FA",
"otpErrorEnableDescription": "Wystąpił błąd podczas włączania 2FA", "otpErrorEnableDescription": "Wystąpił błąd podczas włączania 2FA",
"otpSetupCheckCode": "Wprowadź 6-cyfrowy kod", "otpSetupCheckCode": "Wprowadź 6-cyfrowy kod",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Zarządzanie", "sidebarManagement": "Zarządzanie",
"sidebarBillingAndLicenses": "Płatność i licencje", "sidebarBillingAndLicenses": "Płatność i licencje",
"sidebarLogsAnalytics": "Analityka", "sidebarLogsAnalytics": "Analityka",
"commandSites": "Witryny",
"commandActionModeInfo": "Wpisz \">\" aby otworzyć tryb akcji",
"commandResources": "Zasoby",
"commandProxyResources": "Zasoby publiczne",
"commandClientResources": "Zasoby prywatne",
"commandClients": "Klienci",
"commandUserDevices": "Urządzenia użytkownika",
"commandMachineClients": "Klienci maszynowi",
"commandDomains": "Domeny",
"commandRemoteExitNodes": "Zdalne węzły",
"commandTeam": "Zespół",
"commandUsers": "Użytkownicy",
"commandRoles": "Role",
"commandInvitations": "Zaproszenia",
"commandPolicies": "Polityki współdzielone",
"commandResourcePolicies": "Polityki zasobów publicznych",
"commandIdentityProviders": "Dostawcy tożsamości",
"commandApprovals": "Żądania zatwierdzeń",
"commandShareableLinks": "Linki do udostępnienia",
"commandOrganization": "Organizacja",
"commandLogsAndAnalytics": "Dzienniki i analizy",
"commandLogsAnalytics": "Analizy",
"commandLogsRequest": "Dzienniki żądań HTTP",
"commandLogsAccess": "Dzienniki uwierzytelniania",
"commandLogsAction": "Dzienniki działań administratora",
"commandLogsConnection": "Dzienniki połączeń",
"commandLogsStreaming": "Strumieniowanie zdarzeń",
"commandManagement": "Zarządzanie",
"commandAlerting": "Alarmy",
"commandProvisioning": "Dostarczanie",
"commandBluePrints": "Plany",
"commandApiKeys": "Klucze API",
"commandBillingAndLicenses": "Fakturowanie i licencje",
"commandBilling": "Fakturowanie",
"commandEnterpriseLicenses": "Licencje",
"commandSettings": "Ustawienia",
"commandLauncher": "Uruchamiacz",
"commandResourceLauncher": "Uruchamiacz zasobów",
"commandSearchResults": "Wyniki wyszukiwania",
"alertingTitle": "Alarmowanie", "alertingTitle": "Alarmowanie",
"alertingDescription": "Zdefiniuj źródła, ustawienia, i działania dla powiadomień", "alertingDescription": "Zdefiniuj źródła, ustawienia, i działania dla powiadomień",
"alertingRules": "Reguły alarmowe", "alertingRules": "Reguły alarmowe",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domeny", "billingDomains": "Domeny",
"billingOrganizations": "O masie całkowitej pojazdu przekraczającej 5 ton, ale nieprzekraczającej 5 ton", "billingOrganizations": "O masie całkowitej pojazdu przekraczającej 5 ton, ale nieprzekraczającej 5 ton",
"billingRemoteExitNodes": "Zdalne węzły", "billingRemoteExitNodes": "Zdalne węzły",
"billingPublicResources": "Zasoby publiczne",
"billingPrivateResources": "Zasoby prywatne",
"billingMachineClients": "Klienci maszynowi",
"billingNoLimitConfigured": "Nie skonfigurowano limitu", "billingNoLimitConfigured": "Nie skonfigurowano limitu",
"billingEstimatedPeriod": "Szacowany Okres Rozliczeniowy", "billingEstimatedPeriod": "Szacowany Okres Rozliczeniowy",
"billingIncludedUsage": "Zawarte użycie", "billingIncludedUsage": "Zawarte użycie",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Ile użytkowników możesz użyć", "billingUsersInfo": "Ile użytkowników możesz użyć",
"billingDomainInfo": "Ile domen możesz użyć", "billingDomainInfo": "Ile domen możesz użyć",
"billingRemoteExitNodesInfo": "Ile zdalnych węzłów możesz użyć", "billingRemoteExitNodesInfo": "Ile zdalnych węzłów możesz użyć",
"billingPublicResourcesInfo": "Ile zasobów publicznych możesz wykorzystać",
"billingPrivateResourcesInfo": "Ile zasobów prywatnych możesz wykorzystać",
"billingMachineClientsInfo": "Ile klientów maszynowych możesz wykorzystać",
"billingLicenseKeys": "Klucze licencyjne", "billingLicenseKeys": "Klucze licencyjne",
"billingLicenseKeysDescription": "Zarządzaj subskrypcjami kluczy licencyjnych", "billingLicenseKeysDescription": "Zarządzaj subskrypcjami kluczy licencyjnych",
"billingLicenseSubscription": "Subskrypcja licencji", "billingLicenseSubscription": "Subskrypcja licencji",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Zamknij", "createInternalResourceDialogClose": "Zamknij",
"createInternalResourceDialogCreateClientResource": "Utwórz zasób prywatny", "createInternalResourceDialogCreateClientResource": "Utwórz zasób prywatny",
"createInternalResourceDialogCreateClientResourceDescription": "Utwórz nowy zasób, który będzie dostępny tylko dla klientów podłączonych do organizacji", "createInternalResourceDialogCreateClientResourceDescription": "Utwórz nowy zasób, który będzie dostępny tylko dla klientów podłączonych do organizacji",
"privateResourceCreatePageSeeAll": "Zobacz wszystkie zasoby prywatne",
"privateResourceAllowIcmpPing": "Zezwalaj na ping ICMP",
"privateResourceNetworkAccess": "Dostęp do sieci",
"privateResourceNetworkAccessDescription": "Kontroluj dostęp do portów TCP/UDP i czy ping ICMP jest dozwolony dla tego zasobu.",
"hostSettings": "Ustawienia hosta",
"cidrSettings": "Ustawienia CIDR",
"createInternalResourceDialogResourceProperties": "Właściwości zasobów", "createInternalResourceDialogResourceProperties": "Właściwości zasobów",
"createInternalResourceDialogName": "Nazwa", "createInternalResourceDialogName": "Nazwa",
"createInternalResourceDialogSite": "Witryna", "createInternalResourceDialogSite": "Witryna",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Węzły nie są dostępne dla tej organizacji. Utwórz węzeł, aby używać lokalnych witryn.", "noRemoteExitNodesAvailableDescription": "Węzły nie są dostępne dla tej organizacji. Utwórz węzeł, aby używać lokalnych witryn.",
"exitNode": "Węzeł Wyjściowy", "exitNode": "Węzeł Wyjściowy",
"country": "Kraj", "country": "Kraj",
"countryIsNot": "Kraj nie jest",
"rulesMatchCountry": "Obecnie bazuje na adresie IP źródła", "rulesMatchCountry": "Obecnie bazuje na adresie IP źródła",
"region": "Region", "region": "Region",
"selectRegion": "Wybierz region", "selectRegion": "Wybierz region",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "Konfiguracja uwierzytelniania dwuskładnikowego jest wymagana. Zaloguj się ponownie przez {dashboardUrl}/auth/login dokończ ten krok. Następnie wróć tutaj.", "twoFactorSetupRequired": "Konfiguracja uwierzytelniania dwuskładnikowego jest wymagana. Zaloguj się ponownie przez {dashboardUrl}/auth/login dokończ ten krok. Następnie wróć tutaj.",
"additionalSecurityRequired": "Wymagane dodatkowe zabezpieczenie", "additionalSecurityRequired": "Wymagane dodatkowe zabezpieczenie",
"organizationRequiresAdditionalSteps": "Ta organizacja wymaga dodatkowych kroków bezpieczeństwa, zanim będziesz mógł uzyskać dostęp do zasobów.", "organizationRequiresAdditionalSteps": "Ta organizacja wymaga dodatkowych kroków bezpieczeństwa, zanim będziesz mógł uzyskać dostęp do zasobów.",
"sessionExpired": "Sesja wygasła",
"sessionExpiredReauthRequired": "Twoja sesja wygasła zgodnie z zasadami bezpieczeństwa Twojej organizacji. Proszę się ponownie zalogować, aby kontynuować.",
"reauthenticate": "Zaloguj się ponownie",
"completeTheseSteps": "Wykonaj te kroki", "completeTheseSteps": "Wykonaj te kroki",
"enableTwoFactorAuthentication": "Włącz uwierzytelnianie dwuskładnikowe", "enableTwoFactorAuthentication": "Włącz uwierzytelnianie dwuskładnikowe",
"completeSecuritySteps": "Zakończ kroki bezpieczeństwa", "completeSecuritySteps": "Zakończ kroki bezpieczeństwa",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Dodaj użytkowników", "editInternalResourceDialogAddUsers": "Dodaj użytkowników",
"editInternalResourceDialogAddClients": "Dodaj klientów", "editInternalResourceDialogAddClients": "Dodaj klientów",
"editInternalResourceDialogDestinationLabel": "Miejsce docelowe", "editInternalResourceDialogDestinationLabel": "Miejsce docelowe",
"editInternalResourceDialogDestinationDescription": "Określ adres docelowy dla wewnętrznego zasobu. Może to być nazwa hosta, adres IP lub zakres CIDR, w zależności od wybranego trybu. Opcjonalnie ustaw wewnętrzny alias DNS dla łatwiejszej identyfikacji.", "editInternalResourceDialogDestinationDescription": "Wybierz, gdzie ten zasób działa i jak klienci go osiągają",
"internalResourceFormMultiSiteRoutingHelp": "Wybór wielu stron umożliwia odporne trasowanie i awarię dla wysokiej dostępności.", "internalResourceFormMultiSiteRoutingHelp": "Wybór wielu stron umożliwia odporne trasowanie i awarię dla wysokiej dostępności.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Dowiedz się więcej", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Dowiedz się więcej",
"editInternalResourceDialogPortRestrictionsDescription": "Ogranicz dostęp do konkretnych portów TCP/UDP lub zezwól/zablokuj wszystkie porty.", "editInternalResourceDialogPortRestrictionsDescription": "Ogranicz dostęp do konkretnych portów TCP/UDP lub zezwól/zablokuj wszystkie porty.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Zasób wyłączony", "memberPortalResourceDisabled": "Zasób wyłączony",
"memberPortalShowingResources": "Wyświetlanie zasobów od {start} do {end} z {total}", "memberPortalShowingResources": "Wyświetlanie zasobów od {start} do {end} z {total}",
"resourceLauncherTitle": "Uruchamiacz Zasobów", "resourceLauncherTitle": "Uruchamiacz Zasobów",
"resourceLauncherDescription": "Przeglądaj szczegóły zasobów i uruchamiaj je z jednego miejsca", "resourceSidebarLauncherTitle": "Uruchamiacz",
"resourceLauncherSearchPlaceholder": "Szukaj we wszystkich stronach...", "resourceLauncherDescription": "Wyświetl wszystkie dostępne zasoby i uruchom je w jednym centralnym hubie",
"resourceLauncherSearchPlaceholder": "Szukaj zasobów...",
"resourceLauncherDefaultView": "Domyślny", "resourceLauncherDefaultView": "Domyślny",
"resourceLauncherSaveView": "Zapisz Widok", "resourceLauncherSaveView": "Zapisz Widok",
"resourceLauncherSaveToCurrentView": "Zapisz do bieżącego widoku", "resourceLauncherSaveToCurrentView": "Zapisz do bieżącego widoku",
"resourceLauncherSaveDefaultPersonal": "Zapisz dla mnie",
"resourceLauncherResetView": "Resetuj Widok", "resourceLauncherResetView": "Resetuj Widok",
"resourceLauncherResetSystemDefault": "Przywróć do domyślnych ustawień systemowych",
"resourceLauncherSystemDefaultRestored": "Przywrócono domyślne ustawienia systemowe",
"resourceLauncherSystemDefaultRestoredDescription": "Domyślny widok został przywrócony do oryginalnych ustawień.",
"resourceLauncherSaveAsNewView": "Zapisz jako Nowy Widok", "resourceLauncherSaveAsNewView": "Zapisz jako Nowy Widok",
"resourceLauncherSaveAsNewViewDescription": "Nadaj nazwę temu widokowi, aby zapisać swoje bieżące filtry i układ.", "resourceLauncherSaveAsNewViewDescription": "Nadaj nazwę temu widokowi, aby zapisać swoje bieżące filtry i układ.",
"resourceLauncherSaveForEveryone": "Zapisz dla wszystkich", "resourceLauncherSaveForEveryone": "Zapisz dla wszystkich",
"resourceLauncherSaveForEveryoneDescription": "Udostępnij ten widok wszystkim członkom organizacji. Gdy jest niezaznaczone, widok jest widoczny tylko dla Ciebie.", "resourceLauncherSaveForEveryoneDescription": "Udostępnij ten widok wszystkim członkom organizacji. Gdy jest niezaznaczone, widok jest widoczny tylko dla Ciebie.",
"resourceLauncherMakePersonal": "Zrób osobisty", "resourceLauncherMakePersonal": "Zrób osobisty",
"resourceLauncherFilter": "Filtr", "resourceLauncherFilter": "Filtr",
"resourceLauncherFilterWithCount": "Filtr, zastosowano {count}",
"resourceLauncherSort": "Sortuj", "resourceLauncherSort": "Sortuj",
"resourceLauncherSortAscending": "Sortuj rosnąco", "resourceLauncherSortAscending": "Sortuj rosnąco",
"resourceLauncherSortDescending": "Sortuj malejąco", "resourceLauncherSortDescending": "Sortuj malejąco",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Grupuj według", "resourceLauncherGroupBy": "Grupuj według",
"resourceLauncherGroupBySite": "Witryna", "resourceLauncherGroupBySite": "Witryna",
"resourceLauncherGroupByLabel": "Etykieta", "resourceLauncherGroupByLabel": "Etykieta",
"resourceLauncherGroupByNone": "Brak",
"resourceLauncherLayout": "Układ", "resourceLauncherLayout": "Układ",
"resourceLauncherLayoutGrid": "Siatka", "resourceLauncherLayoutGrid": "Siatka",
"resourceLauncherLayoutList": "Lista", "resourceLauncherLayoutList": "Lista",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Pokaż tagi stron", "resourceLauncherShowSiteTags": "Pokaż tagi stron",
"resourceLauncherShowRecents": "Pokaż ostatnie", "resourceLauncherShowRecents": "Pokaż ostatnie",
"resourceLauncherDeleteView": "Usuń Widok", "resourceLauncherDeleteView": "Usuń Widok",
"resourceLauncherDeleteViewTitle": "Usuń widok",
"resourceLauncherDeleteViewQuestion": "Czy na pewno chcesz usunąć ten widok uruchamiania?",
"resourceLauncherDeleteViewConfirm": "Usuń widok",
"resourceLauncherViewAsAdmin": "Przeglądaj jako Administrator", "resourceLauncherViewAsAdmin": "Przeglądaj jako Administrator",
"resourceLauncherResourceDetailsDescription": "Pokaż szczegóły tego zasobu.", "resourceLauncherResourceDetailsDescription": "Informacje i status połączenia dla tego zasobu.",
"resourceLauncherResourceDetails": "Szczegóły zasobów",
"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",
"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",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Bez etykiety", "resourceLauncherUnlabeled": "Bez etykiety",
"resourceLauncherNoSite": "Brak strony", "resourceLauncherNoSite": "Brak strony",
"resourceLauncherNoResourcesInGroup": "W tej grupie nie ma zasobów", "resourceLauncherNoResourcesInGroup": "W tej grupie nie ma zasobów",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Nie znaleziono zasobów", "resourceLauncherEmptyStateNoResultsTitle": "Nie znaleziono zasobów",
"resourceLauncherEmptyStateNoResultsDescription": "Żadne zasoby nie spełniają twojego bieżącego wyszukiwania lub filtrów. Spróbuj je dostosować, aby znaleźć to, czego szukasz.", "resourceLauncherEmptyStateNoResultsDescription": "Żadne zasoby nie spełniają twojego bieżącego wyszukiwania lub filtrów. Spróbuj je dostosować, aby znaleźć to, czego szukasz.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Żadne zasoby nie odpowiadają \"{query}\". Spróbuj dostosować swoje wyszukiwanie lub usunąć filtry, aby zobaczyć wszystkie zasoby.", "resourceLauncherEmptyStateNoResultsWithQuery": "Żadne zasoby nie odpowiadają \"{query}\". Spróbuj dostosować swoje wyszukiwanie lub usunąć filtry, aby zobaczyć wszystkie zasoby.",
"resourceLauncherSearchFirstTitle": "Szukaj lub filtruj, aby przeglądać",
"resourceLauncherSearchFirstDescription": "Masz dostęp do wielu zasobów. Użyj wyszukiwania lub filtruj według witryny lub etykiety, aby znaleźć to, czego potrzebujesz.",
"resourceLauncherSiteGroupingDisabled": "Grupowanie witryn jest niedostępne w tej skali. Filtruj według witryny, aby pogrupować mniejszy zestaw.",
"resourceLauncherLabelGroupingDisabled": "Grupowanie etykiet jest niedostępne w tej skali.",
"resourceLauncherCompactModeHint": "Wyświetlanie uproszczonej listy dla szybszego przeglądania. Użyj wyszukiwania lub filtrów, aby zawęzić wyniki.",
"resourceLauncherCompactGroupingHint": "Zastosuj filtry witryn lub etykiet, aby włączyć grupowanie.",
"resourceLauncherCopiedToClipboard": "Skopiowano do schowka", "resourceLauncherCopiedToClipboard": "Skopiowano do schowka",
"resourceLauncherCopiedAccessDescription": "Dostęp do zasobu został skopiowany do schowka.", "resourceLauncherCopiedAccessDescription": "Dostęp do zasobu został skopiowany do schowka.",
"resourceLauncherViewNamePlaceholder": "Nazwa widoku", "resourceLauncherViewNamePlaceholder": "Nazwa widoku",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Proxy solicita por TCP/UDP bruto usando um número de porta. Requer que sites se conectem a um nó remoto.", "resourceRawDescriptionCloud": "Proxy solicita por TCP/UDP bruto usando um número de porta. Requer que sites se conectem a um nó remoto.",
"resourceCreate": "Criar Recurso", "resourceCreate": "Criar Recurso",
"resourceCreateDescription": "Siga os passos abaixo para criar um novo recurso", "resourceCreateDescription": "Siga os passos abaixo para criar um novo recurso",
"resourcePublicCreate": "Criar Recurso Público",
"resourcePublicCreateDescription": "Siga os passos abaixo para criar um novo recurso público acessível através de um navegador web",
"resourceCreateGeneralDescription": "Configure as configurações gerais do recurso, incluindo o nome e o tipo", "resourceCreateGeneralDescription": "Configure as configurações gerais do recurso, incluindo o nome e o tipo",
"resourceSeeAll": "Ver todos os recursos", "resourceSeeAll": "Ver todos os recursos",
"resourceCreateGeneral": "Gerais", "resourceCreateGeneral": "Gerais",
@@ -613,7 +615,8 @@
"idpNameInternal": "Interno", "idpNameInternal": "Interno",
"emailInvalid": "Endereço de email inválido", "emailInvalid": "Endereço de email inválido",
"inviteValidityDuration": "Por favor, selecione uma duração", "inviteValidityDuration": "Por favor, selecione uma duração",
"accessRoleSelectPlease": "Por favor, selecione uma função", "accessRoleSelectPlease": "Um usuário deve pertencer a pelo menos um papel.",
"accessRoleRequired": "Papel necessário",
"removeOwnAdminRoleConfirmTitle": "Remover seu acesso de administrador?", "removeOwnAdminRoleConfirmTitle": "Remover seu acesso de administrador?",
"removeOwnAdminRoleConfirmDescription": "Você não terá mais permissões de administrador nesta organização após salvar. Outro administrador pode restaurar seu acesso, se necessário.", "removeOwnAdminRoleConfirmDescription": "Você não terá mais permissões de administrador nesta organização após salvar. Outro administrador pode restaurar seu acesso, se necessário.",
"removeOwnAdminRoleConfirmButton": "Remover Meu Acesso de Administrador", "removeOwnAdminRoleConfirmButton": "Remover Meu Acesso de Administrador",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Autenticação de Cabeçalho Básico", "policyAuthHeaderAuthTitle": "Autenticação de Cabeçalho Básico",
"policyAuthHeaderAuthDescription": "Valide um nome e valor de cabeçalho HTTP personalizado em cada solicitação", "policyAuthHeaderAuthDescription": "Valide um nome e valor de cabeçalho HTTP personalizado em cada solicitação",
"policyAuthHeaderAuthSummary": "Cabeçalho configurado", "policyAuthHeaderAuthSummary": "Cabeçalho configurado",
"policyAuthHeaderName": "Nome do Cabeçalho", "policyAuthHeaderName": "Nome de usuário",
"policyAuthHeaderValue": "Valor esperado", "policyAuthHeaderValue": "Palavra-passe",
"policyAuthSetPasscode": "Definir Código de Acesso", "policyAuthSetPasscode": "Definir Código de Acesso",
"policyAuthSetPincode": "Definir Código PIN", "policyAuthSetPincode": "Definir Código PIN",
"policyAuthSetEmailWhitelist": "Definir Lista de E-mails Permitidos", "policyAuthSetEmailWhitelist": "Definir Lista de E-mails Permitidos",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Definir Código PIN do Recurso", "actionSetResourcePincode": "Definir Código PIN do Recurso",
"actionSetResourceEmailWhitelist": "Definir Lista Permitida de Emails do Recurso", "actionSetResourceEmailWhitelist": "Definir Lista Permitida de Emails do Recurso",
"actionGetResourceEmailWhitelist": "Obter Lista Permitida de Emails do Recurso", "actionGetResourceEmailWhitelist": "Obter Lista Permitida de Emails do Recurso",
"actionGetResourcePolicy": "Obter Política de Recurso",
"actionUpdateResourcePolicy": "Atualizar Política de Recurso",
"actionSetResourcePolicyUsers": "Definir Utilizadores da Política de Recurso",
"actionSetResourcePolicyRoles": "Definir Papéis da Política de Recurso",
"actionSetResourcePolicyPassword": "Definir Palavra-passe da Política de Recurso",
"actionSetResourcePolicyPincode": "Definir Código PIN da Política de Recurso",
"actionSetResourcePolicyHeaderAuth": "Definir Autenticação de Cabeçalho da Política de Recurso",
"actionSetResourcePolicyWhitelist": "Definir Lista Permitida de Emails da Política de Recurso",
"actionSetResourcePolicyRules": "Definir Regras da Política de Recurso",
"actionCreateTarget": "Criar Alvo", "actionCreateTarget": "Criar Alvo",
"actionDeleteTarget": "Eliminar Alvo", "actionDeleteTarget": "Eliminar Alvo",
"actionGetTarget": "Obter Alvo", "actionGetTarget": "Obter Alvo",
@@ -1507,6 +1519,30 @@
"navbar": "Menu de Navegação", "navbar": "Menu de Navegação",
"navbarDescription": "Menu de navegação principal da aplicação", "navbarDescription": "Menu de navegação principal da aplicação",
"navbarDocsLink": "Documentação", "navbarDocsLink": "Documentação",
"commandPaletteTitle": "Paleta de Comando",
"commandPaletteDescription": "Pesquisar por páginas, organizações, recursos e ações",
"commandPaletteSearchPlaceholder": "Pesquisar páginas, recursos, ações...",
"commandPaletteNoResults": "Nenhum resultado encontrado.",
"commandPaletteSearching": "Buscando...",
"commandPaletteNavigation": "Navegação",
"commandPaletteOrganizations": "Organizações",
"commandPaletteSites": "Sites",
"commandPaletteResources": "Recursos",
"commandPaletteUsers": "Utilizadores",
"commandPaletteClients": "Clientes de Máquina",
"commandPaletteActions": "Ações",
"commandPaletteCreateSite": "Criar Site",
"commandPaletteCreateProxyResource": "Criar Recurso Público",
"commandPaletteCreatePrivateResource": "Criar Recurso Privado",
"commandPaletteCreateUser": "Criar Usuário",
"commandPaletteCreateApiKey": "Criar Chave API",
"commandPaletteCreateMachineClient": "Criar Cliente de Máquina",
"commandPaletteCreateAlertRule": "Criar Regra de Alerta",
"commandPaletteCreateIdentityProvider": "Criar Provedor de Identidade",
"commandPaletteToggleTheme": "Alternar Tema",
"commandPaletteChooseOrganization": "Escolher Organização",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Não foi possível ativar 2FA", "otpErrorEnable": "Não foi possível ativar 2FA",
"otpErrorEnableDescription": "Ocorreu um erro ao ativar 2FA", "otpErrorEnableDescription": "Ocorreu um erro ao ativar 2FA",
"otpSetupCheckCode": "Por favor, insira um código de 6 dígitos", "otpSetupCheckCode": "Por favor, insira um código de 6 dígitos",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Gestão", "sidebarManagement": "Gestão",
"sidebarBillingAndLicenses": "Faturamento e Licenças", "sidebarBillingAndLicenses": "Faturamento e Licenças",
"sidebarLogsAnalytics": "Análises", "sidebarLogsAnalytics": "Análises",
"commandSites": "Sites",
"commandActionModeInfo": "Digite \">\" Para Abrir Modo de Ação",
"commandResources": "Recursos",
"commandProxyResources": "Recursos Públicos",
"commandClientResources": "Recursos Privados",
"commandClients": "Clientes",
"commandUserDevices": "Dispositivos do Usuário",
"commandMachineClients": "Clientes de Máquina",
"commandDomains": "Domínios",
"commandRemoteExitNodes": "Nodos Remotos",
"commandTeam": "Equipe",
"commandUsers": "Utilizadores",
"commandRoles": "Papéis",
"commandInvitations": "Convites",
"commandPolicies": "Políticas Compartilhadas",
"commandResourcePolicies": "Políticas de Recursos Públicos",
"commandIdentityProviders": "Provedores de Identidade",
"commandApprovals": "Pedidos de Aprovação",
"commandShareableLinks": "Links Compartilháveis",
"commandOrganization": "Organização",
"commandLogsAndAnalytics": "Logs e Análises",
"commandLogsAnalytics": "Análises",
"commandLogsRequest": "Registros de Pedidos HTTP",
"commandLogsAccess": "Logs de Autenticação",
"commandLogsAction": "Logs de Ações do Administrador",
"commandLogsConnection": "Logs da Conexão",
"commandLogsStreaming": "Transmissão de Eventos",
"commandManagement": "Gestão",
"commandAlerting": "Alertas",
"commandProvisioning": "Providência",
"commandBluePrints": "Plantas",
"commandApiKeys": "Chaves API",
"commandBillingAndLicenses": "Faturamento e Licenças",
"commandBilling": "Faturamento",
"commandEnterpriseLicenses": "Licenças",
"commandSettings": "Configurações",
"commandLauncher": "Inicializador",
"commandResourceLauncher": "Inicializador de Recurso",
"commandSearchResults": "Resultados da Pesquisa",
"alertingTitle": "Alertas", "alertingTitle": "Alertas",
"alertingDescription": "Defina fontes, gatilhos e ações para notificações", "alertingDescription": "Defina fontes, gatilhos e ações para notificações",
"alertingRules": "Regras de alerta", "alertingRules": "Regras de alerta",
@@ -1915,6 +1990,9 @@
"billingDomains": "Domínios", "billingDomains": "Domínios",
"billingOrganizations": "Órgãos", "billingOrganizations": "Órgãos",
"billingRemoteExitNodes": "Nós remotos", "billingRemoteExitNodes": "Nós remotos",
"billingPublicResources": "Recursos Públicos",
"billingPrivateResources": "Recursos Privados",
"billingMachineClients": "Clientes de Máquina",
"billingNoLimitConfigured": "Nenhum limite configurado", "billingNoLimitConfigured": "Nenhum limite configurado",
"billingEstimatedPeriod": "Período Estimado de Cobrança", "billingEstimatedPeriod": "Período Estimado de Cobrança",
"billingIncludedUsage": "Uso Incluído", "billingIncludedUsage": "Uso Incluído",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Quantos usuários você pode usar", "billingUsersInfo": "Quantos usuários você pode usar",
"billingDomainInfo": "Quantos domínios você pode usar", "billingDomainInfo": "Quantos domínios você pode usar",
"billingRemoteExitNodesInfo": "Quantos nós remotos você pode usar", "billingRemoteExitNodesInfo": "Quantos nós remotos você pode usar",
"billingPublicResourcesInfo": "Quantos recursos públicos você pode usar",
"billingPrivateResourcesInfo": "Quantos recursos privados você pode usar",
"billingMachineClientsInfo": "Quantos clientes de máquina você pode usar",
"billingLicenseKeys": "Chaves de Licença", "billingLicenseKeys": "Chaves de Licença",
"billingLicenseKeysDescription": "Gerenciar suas subscrições de chave de licença", "billingLicenseKeysDescription": "Gerenciar suas subscrições de chave de licença",
"billingLicenseSubscription": "Assinatura de Licença", "billingLicenseSubscription": "Assinatura de Licença",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Fechar", "createInternalResourceDialogClose": "Fechar",
"createInternalResourceDialogCreateClientResource": "Criar Recurso Privado", "createInternalResourceDialogCreateClientResource": "Criar Recurso Privado",
"createInternalResourceDialogCreateClientResourceDescription": "Criar um novo recurso que só será acessível para clientes conectados à organização", "createInternalResourceDialogCreateClientResourceDescription": "Criar um novo recurso que só será acessível para clientes conectados à organização",
"privateResourceCreatePageSeeAll": "Ver Todos os Recursos Privados",
"privateResourceAllowIcmpPing": "Permitir ICMP Ping",
"privateResourceNetworkAccess": "Acesso à Rede",
"privateResourceNetworkAccessDescription": "Controlar o acesso à porta TCP/UDP e se o ICMP ping é permitido para este recurso.",
"hostSettings": "Configurações do Host",
"cidrSettings": "Configurações CIDR",
"createInternalResourceDialogResourceProperties": "Propriedades do Recurso", "createInternalResourceDialogResourceProperties": "Propriedades do Recurso",
"createInternalResourceDialogName": "Nome", "createInternalResourceDialogName": "Nome",
"createInternalResourceDialogSite": "Site", "createInternalResourceDialogSite": "Site",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Nenhum nó está disponível para esta organização. Crie um nó primeiro para usar sites locais.", "noRemoteExitNodesAvailableDescription": "Nenhum nó está disponível para esta organização. Crie um nó primeiro para usar sites locais.",
"exitNode": "Nodo de Saída", "exitNode": "Nodo de Saída",
"country": "País", "country": "País",
"countryIsNot": "País Não é",
"rulesMatchCountry": "Atualmente baseado no IP de origem", "rulesMatchCountry": "Atualmente baseado no IP de origem",
"region": "Região", "region": "Região",
"selectRegion": "Selecionar região", "selectRegion": "Selecionar região",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "Configuração de autenticação de dois fatores é necessária. Por favor, entre novamente via {dashboardUrl}/auth/login conclua este passo. Em seguida, volte aqui.", "twoFactorSetupRequired": "Configuração de autenticação de dois fatores é necessária. Por favor, entre novamente via {dashboardUrl}/auth/login conclua este passo. Em seguida, volte aqui.",
"additionalSecurityRequired": "Segurança adicional necessária", "additionalSecurityRequired": "Segurança adicional necessária",
"organizationRequiresAdditionalSteps": "Esta organização requer etapas de segurança adicionais antes que você possa acessar os recursos.", "organizationRequiresAdditionalSteps": "Esta organização requer etapas de segurança adicionais antes que você possa acessar os recursos.",
"sessionExpired": "Sessão Expirada",
"sessionExpiredReauthRequired": "Sua sessão expirou conforme a política de segurança da sua organização. Faça uma nova autenticação para continuar.",
"reauthenticate": "Reautenticar",
"completeTheseSteps": "Conclua estas etapas", "completeTheseSteps": "Conclua estas etapas",
"enableTwoFactorAuthentication": "Ativar autenticação de dois fatores", "enableTwoFactorAuthentication": "Ativar autenticação de dois fatores",
"completeSecuritySteps": "Passos de segurança completos", "completeSecuritySteps": "Passos de segurança completos",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Adicionar Usuários", "editInternalResourceDialogAddUsers": "Adicionar Usuários",
"editInternalResourceDialogAddClients": "Adicionar Clientes", "editInternalResourceDialogAddClients": "Adicionar Clientes",
"editInternalResourceDialogDestinationLabel": "Destino", "editInternalResourceDialogDestinationLabel": "Destino",
"editInternalResourceDialogDestinationDescription": "Especifique o endereço de destino para o recurso interno. Isso pode ser um nome de host, endereço IP ou intervalo CIDR, dependendo do modo selecionado. Opcionalmente, defina um alias interno de DNS para facilitar a identificação.", "editInternalResourceDialogDestinationDescription": "Escolha onde este recurso é executado e como os clientes o acessam",
"internalResourceFormMultiSiteRoutingHelp": "Selecionar múltiplos sites permite roteamento resiliente e failover para alta disponibilidade.", "internalResourceFormMultiSiteRoutingHelp": "Selecionar múltiplos sites permite roteamento resiliente e failover para alta disponibilidade.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Saiba mais", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Saiba mais",
"editInternalResourceDialogPortRestrictionsDescription": "Restrinja o acesso a portas TCP/UDP específicas ou permita/bloqueie todas as portas.", "editInternalResourceDialogPortRestrictionsDescription": "Restrinja o acesso a portas TCP/UDP específicas ou permita/bloqueie todas as portas.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Recurso Desativado", "memberPortalResourceDisabled": "Recurso Desativado",
"memberPortalShowingResources": "Mostrando {start}-{end} de {total} recursos", "memberPortalShowingResources": "Mostrando {start}-{end} de {total} recursos",
"resourceLauncherTitle": "Lançador de Recursos", "resourceLauncherTitle": "Lançador de Recursos",
"resourceLauncherDescription": "Veja os detalhes do recurso e lance-os de um só lugar", "resourceSidebarLauncherTitle": "Inicializador",
"resourceLauncherSearchPlaceholder": "Procurar todos os sites...", "resourceLauncherDescription": "Veja todos os recursos disponíveis e inicie-os de um único local",
"resourceLauncherSearchPlaceholder": "Procurar recursos...",
"resourceLauncherDefaultView": "Padrão", "resourceLauncherDefaultView": "Padrão",
"resourceLauncherSaveView": "Salvar Visualização", "resourceLauncherSaveView": "Salvar Visualização",
"resourceLauncherSaveToCurrentView": "Salvar na Visualização Atual", "resourceLauncherSaveToCurrentView": "Salvar na Visualização Atual",
"resourceLauncherSaveDefaultPersonal": "Salvar para mim",
"resourceLauncherResetView": "Redefinir Visualização", "resourceLauncherResetView": "Redefinir Visualização",
"resourceLauncherResetSystemDefault": "Redefinir para o padrão do sistema",
"resourceLauncherSystemDefaultRestored": "Padrão do sistema restaurado",
"resourceLauncherSystemDefaultRestoredDescription": "A visualização padrão foi redefinida para as configurações originais.",
"resourceLauncherSaveAsNewView": "Salvar como Nova Visualização", "resourceLauncherSaveAsNewView": "Salvar como Nova Visualização",
"resourceLauncherSaveAsNewViewDescription": "Dê um nome a esta visualização para salvar os filtros e layout atuais.", "resourceLauncherSaveAsNewViewDescription": "Dê um nome a esta visualização para salvar os filtros e layout atuais.",
"resourceLauncherSaveForEveryone": "Salvar para Todos", "resourceLauncherSaveForEveryone": "Salvar para Todos",
"resourceLauncherSaveForEveryoneDescription": "Compartilhe esta visualização com todos os membros da organização. Quando desmarcado, a visualização é visível apenas para você.", "resourceLauncherSaveForEveryoneDescription": "Compartilhe esta visualização com todos os membros da organização. Quando desmarcado, a visualização é visível apenas para você.",
"resourceLauncherMakePersonal": "Tornar Pessoal", "resourceLauncherMakePersonal": "Tornar Pessoal",
"resourceLauncherFilter": "Filtro", "resourceLauncherFilter": "Filtro",
"resourceLauncherFilterWithCount": "Filtro, {count} aplicado",
"resourceLauncherSort": "Ordenar", "resourceLauncherSort": "Ordenar",
"resourceLauncherSortAscending": "Ordenar ascendente", "resourceLauncherSortAscending": "Ordenar ascendente",
"resourceLauncherSortDescending": "Ordenar descendente", "resourceLauncherSortDescending": "Ordenar descendente",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Agrupar por", "resourceLauncherGroupBy": "Agrupar por",
"resourceLauncherGroupBySite": "Site", "resourceLauncherGroupBySite": "Site",
"resourceLauncherGroupByLabel": "Marcador", "resourceLauncherGroupByLabel": "Marcador",
"resourceLauncherGroupByNone": "Nenhum",
"resourceLauncherLayout": "Layout", "resourceLauncherLayout": "Layout",
"resourceLauncherLayoutGrid": "Grade", "resourceLauncherLayoutGrid": "Grade",
"resourceLauncherLayoutList": "Lista", "resourceLauncherLayoutList": "Lista",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Mostrar Etiquetas de Site", "resourceLauncherShowSiteTags": "Mostrar Etiquetas de Site",
"resourceLauncherShowRecents": "Mostrar Recents", "resourceLauncherShowRecents": "Mostrar Recents",
"resourceLauncherDeleteView": "Excluir Visualização", "resourceLauncherDeleteView": "Excluir Visualização",
"resourceLauncherDeleteViewTitle": "Excluir Visualização",
"resourceLauncherDeleteViewQuestion": "Tem certeza de que deseja excluir esta visualização de inicializador?",
"resourceLauncherDeleteViewConfirm": "Excluir Visualização",
"resourceLauncherViewAsAdmin": "Visualizar como Administrador", "resourceLauncherViewAsAdmin": "Visualizar como Administrador",
"resourceLauncherResourceDetailsDescription": "Veja detalhes deste recurso.", "resourceLauncherResourceDetailsDescription": "Informações de conexão e status para este recurso.",
"resourceLauncherResourceDetails": "Detalhes do Recurso",
"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",
"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",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Sem Etiqueta", "resourceLauncherUnlabeled": "Sem Etiqueta",
"resourceLauncherNoSite": "Sem Site", "resourceLauncherNoSite": "Sem Site",
"resourceLauncherNoResourcesInGroup": "Nenhum recurso neste grupo", "resourceLauncherNoResourcesInGroup": "Nenhum recurso neste grupo",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Nenhum Recurso Encontrado", "resourceLauncherEmptyStateNoResultsTitle": "Nenhum Recurso Encontrado",
"resourceLauncherEmptyStateNoResultsDescription": "Nenhum recurso corresponde à sua busca ou filtros atuais. Experimente ajustá-los para encontrar o que está procurando.", "resourceLauncherEmptyStateNoResultsDescription": "Nenhum recurso corresponde à sua busca ou filtros atuais. Experimente ajustá-los para encontrar o que está procurando.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Nenhum recurso corresponde a \"{query}\". Tente ajustar sua busca ou limpar os filtros para ver todos os recursos.", "resourceLauncherEmptyStateNoResultsWithQuery": "Nenhum recurso corresponde a \"{query}\". Tente ajustar sua busca ou limpar os filtros para ver todos os recursos.",
"resourceLauncherSearchFirstTitle": "Pesquisar ou Filtrar para Navegar",
"resourceLauncherSearchFirstDescription": "Você tem acesso a muitos recursos. Use a pesquisa ou filtre por site ou etiqueta para encontrar o que precisa.",
"resourceLauncherSiteGroupingDisabled": "Agrupamento de site indisponível nesta escala. Filtrar por site para agrupar um conjunto menor.",
"resourceLauncherLabelGroupingDisabled": "Agrupamento de etiquetas indisponível nesta escala.",
"resourceLauncherCompactModeHint": "Mostrando uma lista simplificada para navegação mais rápida. Use pesquisa ou filtros para restringir os resultados.",
"resourceLauncherCompactGroupingHint": "Aplique filtros de site ou etiqueta para habilitar o agrupamento.",
"resourceLauncherCopiedToClipboard": "Copiado para a área de transferência", "resourceLauncherCopiedToClipboard": "Copiado para a área de transferência",
"resourceLauncherCopiedAccessDescription": "O acesso ao recurso foi copiado para sua área de transferência.", "resourceLauncherCopiedAccessDescription": "O acesso ao recurso foi copiado para sua área de transferência.",
"resourceLauncherViewNamePlaceholder": "Nome da Visualização", "resourceLauncherViewNamePlaceholder": "Nome da Visualização",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Прокси запросы через необработанный TCP/UDP с использованием номера порта. Требуется подключение сайтов к удаленному узлу.", "resourceRawDescriptionCloud": "Прокси запросы через необработанный TCP/UDP с использованием номера порта. Требуется подключение сайтов к удаленному узлу.",
"resourceCreate": "Создание ресурса", "resourceCreate": "Создание ресурса",
"resourceCreateDescription": "Следуйте инструкциям ниже для создания нового ресурса", "resourceCreateDescription": "Следуйте инструкциям ниже для создания нового ресурса",
"resourcePublicCreate": "Создать публичный ресурс",
"resourcePublicCreateDescription": "Следуйте инструкциям ниже, чтобы создать новый публичный ресурс, доступный через веб-браузер",
"resourceCreateGeneralDescription": "Настройте основные параметры ресурса, включая его имя и тип", "resourceCreateGeneralDescription": "Настройте основные параметры ресурса, включая его имя и тип",
"resourceSeeAll": "Посмотреть все ресурсы", "resourceSeeAll": "Посмотреть все ресурсы",
"resourceCreateGeneral": "Общие", "resourceCreateGeneral": "Общие",
@@ -613,7 +615,8 @@
"idpNameInternal": "Внутренний", "idpNameInternal": "Внутренний",
"emailInvalid": "Неверный адрес Email", "emailInvalid": "Неверный адрес Email",
"inviteValidityDuration": "Пожалуйста, выберите продолжительность", "inviteValidityDuration": "Пожалуйста, выберите продолжительность",
"accessRoleSelectPlease": "Пожалуйста, выберите роль", "accessRoleSelectPlease": "Пользователь должен принадлежать хотя бы к одной роли.",
"accessRoleRequired": "Требуется роль",
"removeOwnAdminRoleConfirmTitle": "Удалить доступ администратора?", "removeOwnAdminRoleConfirmTitle": "Удалить доступ администратора?",
"removeOwnAdminRoleConfirmDescription": "После сохранения у вас больше не будет прав администратора в этой организации. Другой администратор может восстановить доступ, если это необходимо.", "removeOwnAdminRoleConfirmDescription": "После сохранения у вас больше не будет прав администратора в этой организации. Другой администратор может восстановить доступ, если это необходимо.",
"removeOwnAdminRoleConfirmButton": "Удалить мой доступ администратора", "removeOwnAdminRoleConfirmButton": "Удалить мой доступ администратора",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Базовая аутентификация заголовка", "policyAuthHeaderAuthTitle": "Базовая аутентификация заголовка",
"policyAuthHeaderAuthDescription": "Проверка пользовательского имени и значения HTTP-заголовка для каждого запроса", "policyAuthHeaderAuthDescription": "Проверка пользовательского имени и значения HTTP-заголовка для каждого запроса",
"policyAuthHeaderAuthSummary": "Заголовок настроен", "policyAuthHeaderAuthSummary": "Заголовок настроен",
"policyAuthHeaderName": "Имя заголовка", "policyAuthHeaderName": "Имя пользователя",
"policyAuthHeaderValue": "Ожидаемое значение", "policyAuthHeaderValue": "Пароль",
"policyAuthSetPasscode": "Установить пароль", "policyAuthSetPasscode": "Установить пароль",
"policyAuthSetPincode": "Установить ПИН-код", "policyAuthSetPincode": "Установить ПИН-код",
"policyAuthSetEmailWhitelist": "Установить белый список email", "policyAuthSetEmailWhitelist": "Установить белый список email",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Установить ПИН-код ресурса", "actionSetResourcePincode": "Установить ПИН-код ресурса",
"actionSetResourceEmailWhitelist": "Настроить белый список ресурсов email", "actionSetResourceEmailWhitelist": "Настроить белый список ресурсов email",
"actionGetResourceEmailWhitelist": "Получить белый список ресурсов email", "actionGetResourceEmailWhitelist": "Получить белый список ресурсов email",
"actionGetResourcePolicy": "Получить политику ресурса",
"actionUpdateResourcePolicy": "Обновить политику ресурса",
"actionSetResourcePolicyUsers": "Установить пользователей политики ресурса",
"actionSetResourcePolicyRoles": "Установить роли политики ресурса",
"actionSetResourcePolicyPassword": "Установить пароль политики ресурса",
"actionSetResourcePolicyPincode": "Установить ПИН-код политики ресурса",
"actionSetResourcePolicyHeaderAuth": "Установить аутентификацию по заголовкам для политики ресурса",
"actionSetResourcePolicyWhitelist": "Установить белый список по email для политики ресурса",
"actionSetResourcePolicyRules": "Установить правила политики ресурса",
"actionCreateTarget": "Создать цель", "actionCreateTarget": "Создать цель",
"actionDeleteTarget": "Удалить цель", "actionDeleteTarget": "Удалить цель",
"actionGetTarget": "Получить цель", "actionGetTarget": "Получить цель",
@@ -1507,6 +1519,30 @@
"navbar": "Навигационное меню", "navbar": "Навигационное меню",
"navbarDescription": "Главное навигационное меню приложения", "navbarDescription": "Главное навигационное меню приложения",
"navbarDocsLink": "Документация", "navbarDocsLink": "Документация",
"commandPaletteTitle": "Палитра команд",
"commandPaletteDescription": "Поиск страниц, организаций, ресурсов и действий",
"commandPaletteSearchPlaceholder": "Поиск страниц, ресурсов, действий...",
"commandPaletteNoResults": "Результаты не найдены.",
"commandPaletteSearching": "Поиск...",
"commandPaletteNavigation": "Навигация",
"commandPaletteOrganizations": "Организации",
"commandPaletteSites": "Сайты",
"commandPaletteResources": "Ресурсы",
"commandPaletteUsers": "Пользователи",
"commandPaletteClients": "Клиенты машин",
"commandPaletteActions": "Действия",
"commandPaletteCreateSite": "Создать сайт",
"commandPaletteCreateProxyResource": "Создать публичный ресурс",
"commandPaletteCreatePrivateResource": "Создать частный ресурс",
"commandPaletteCreateUser": "Создать пользователя",
"commandPaletteCreateApiKey": "Создать ключ API",
"commandPaletteCreateMachineClient": "Создать клиент машин",
"commandPaletteCreateAlertRule": "Создать правило предупреждения",
"commandPaletteCreateIdentityProvider": "Создать поставщика удостоверений",
"commandPaletteToggleTheme": "Переключить тему",
"commandPaletteChooseOrganization": "Выбрать организацию",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "Невозможно включить 2FA", "otpErrorEnable": "Невозможно включить 2FA",
"otpErrorEnableDescription": "Произошла ошибка при включении 2FA", "otpErrorEnableDescription": "Произошла ошибка при включении 2FA",
"otpSetupCheckCode": "Пожалуйста, введите 6-значный код", "otpSetupCheckCode": "Пожалуйста, введите 6-значный код",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Управление", "sidebarManagement": "Управление",
"sidebarBillingAndLicenses": "Биллинг и лицензии", "sidebarBillingAndLicenses": "Биллинг и лицензии",
"sidebarLogsAnalytics": "Статистика", "sidebarLogsAnalytics": "Статистика",
"commandSites": "Сайты",
"commandActionModeInfo": "Введите \">\", чтобы открыть режим действий",
"commandResources": "Ресурсы",
"commandProxyResources": "Публичные ресурсы",
"commandClientResources": "Частные ресурсы",
"commandClients": "Клиенты",
"commandUserDevices": "Устройства пользователей",
"commandMachineClients": "Клиенты машин",
"commandDomains": "Домены",
"commandRemoteExitNodes": "Удаленные узлы",
"commandTeam": "Команда",
"commandUsers": "Пользователи",
"commandRoles": "Роли",
"commandInvitations": "Приглашения",
"commandPolicies": "Общие политики",
"commandResourcePolicies": "Политики публичных ресурсов",
"commandIdentityProviders": "Поставщики удостоверений",
"commandApprovals": "Запросы на одобрение",
"commandShareableLinks": "Общие ссылки",
"commandOrganization": "Организация",
"commandLogsAndAnalytics": "Логи и аналитика",
"commandLogsAnalytics": "Аналитика",
"commandLogsRequest": "HTTP журналы запросов",
"commandLogsAccess": "Журналы аутентификации",
"commandLogsAction": "Журналы административных действий",
"commandLogsConnection": "Журнал сетевых подключений",
"commandLogsStreaming": "Трансляция события",
"commandManagement": "Управление",
"commandAlerting": "Оповещения",
"commandProvisioning": "Провиженинг",
"commandBluePrints": "Шаблоны",
"commandApiKeys": "API ключи",
"commandBillingAndLicenses": "Выставление счетов и лицензии",
"commandBilling": "Выставление счетов",
"commandEnterpriseLicenses": "Лицензии",
"commandSettings": "Настройки",
"commandLauncher": "Запускатор",
"commandResourceLauncher": "Запускатор ресурсов",
"commandSearchResults": "Результаты поиска",
"alertingTitle": "Оповещения", "alertingTitle": "Оповещения",
"alertingDescription": "Определите источники, триггеры и действия для уведомлений", "alertingDescription": "Определите источники, триггеры и действия для уведомлений",
"alertingRules": "Правила оповещений", "alertingRules": "Правила оповещений",
@@ -1915,6 +1990,9 @@
"billingDomains": "Домены", "billingDomains": "Домены",
"billingOrganizations": "Орги", "billingOrganizations": "Орги",
"billingRemoteExitNodes": "Удаленные узлы", "billingRemoteExitNodes": "Удаленные узлы",
"billingPublicResources": "Публичные ресурсы",
"billingPrivateResources": "Частные ресурсы",
"billingMachineClients": "Клиенты машин",
"billingNoLimitConfigured": "Лимит не установлен", "billingNoLimitConfigured": "Лимит не установлен",
"billingEstimatedPeriod": "Предполагаемый период выставления счетов", "billingEstimatedPeriod": "Предполагаемый период выставления счетов",
"billingIncludedUsage": "Включенное использование", "billingIncludedUsage": "Включенное использование",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Сколько пользователей вы можете использовать", "billingUsersInfo": "Сколько пользователей вы можете использовать",
"billingDomainInfo": "Сколько доменов вы можете использовать", "billingDomainInfo": "Сколько доменов вы можете использовать",
"billingRemoteExitNodesInfo": "Сколько удаленных узлов вы можете использовать", "billingRemoteExitNodesInfo": "Сколько удаленных узлов вы можете использовать",
"billingPublicResourcesInfo": "Сколько публичных ресурсов вы можете использовать",
"billingPrivateResourcesInfo": "Сколько частных ресурсов вы можете использовать",
"billingMachineClientsInfo": "Сколько машинных клиентов вы можете использовать",
"billingLicenseKeys": "Лицензионные ключи", "billingLicenseKeys": "Лицензионные ключи",
"billingLicenseKeysDescription": "Управление подписками на лицензионные ключи", "billingLicenseKeysDescription": "Управление подписками на лицензионные ключи",
"billingLicenseSubscription": "Лицензионное соглашение", "billingLicenseSubscription": "Лицензионное соглашение",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Закрыть", "createInternalResourceDialogClose": "Закрыть",
"createInternalResourceDialogCreateClientResource": "Создать приватный ресурс", "createInternalResourceDialogCreateClientResource": "Создать приватный ресурс",
"createInternalResourceDialogCreateClientResourceDescription": "Создать новый ресурс, который будет доступен только клиентам, подключенным к организации", "createInternalResourceDialogCreateClientResourceDescription": "Создать новый ресурс, который будет доступен только клиентам, подключенным к организации",
"privateResourceCreatePageSeeAll": "Посмотреть все частные ресурсы",
"privateResourceAllowIcmpPing": "Разрешить ICMP Ping",
"privateResourceNetworkAccess": "Сетевой доступ",
"privateResourceNetworkAccessDescription": "Управляйте доступом к портам TCP/UDP и настройте разрешение ICMP ping для данного ресурса.",
"hostSettings": "Настройки хоста",
"cidrSettings": "Настройки CIDR",
"createInternalResourceDialogResourceProperties": "Свойства ресурса", "createInternalResourceDialogResourceProperties": "Свойства ресурса",
"createInternalResourceDialogName": "Имя", "createInternalResourceDialogName": "Имя",
"createInternalResourceDialogSite": "Сайт", "createInternalResourceDialogSite": "Сайт",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Для этой организации узлы не доступны. Сначала создайте узел, чтобы использовать локальные сайты.", "noRemoteExitNodesAvailableDescription": "Для этой организации узлы не доступны. Сначала создайте узел, чтобы использовать локальные сайты.",
"exitNode": "Узел выхода", "exitNode": "Узел выхода",
"country": "Страна", "country": "Страна",
"countryIsNot": "Страна не является",
"rulesMatchCountry": "В настоящее время основано на исходном IP", "rulesMatchCountry": "В настоящее время основано на исходном IP",
"region": "Регион", "region": "Регион",
"selectRegion": "Выберите регион", "selectRegion": "Выберите регион",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "Требуется настройка двухфакторной аутентификации. Пожалуйста, войдите снова через {dashboardUrl}/auth/login завершить этот шаг. Затем вернитесь сюда.", "twoFactorSetupRequired": "Требуется настройка двухфакторной аутентификации. Пожалуйста, войдите снова через {dashboardUrl}/auth/login завершить этот шаг. Затем вернитесь сюда.",
"additionalSecurityRequired": "Требуется дополнительная безопасность", "additionalSecurityRequired": "Требуется дополнительная безопасность",
"organizationRequiresAdditionalSteps": "Эта организация требует дополнительных шагов безопасности, прежде чем вы сможете получить доступ к ресурсам.", "organizationRequiresAdditionalSteps": "Эта организация требует дополнительных шагов безопасности, прежде чем вы сможете получить доступ к ресурсам.",
"sessionExpired": "Сессия истекла",
"sessionExpiredReauthRequired": "Ваша сессия истекла согласно политике безопасности вашей организации. Пожалуйста, повторно пройдите аутентификацию, чтобы продолжить.",
"reauthenticate": "Повторная аутентификация",
"completeTheseSteps": "Выполните эти шаги", "completeTheseSteps": "Выполните эти шаги",
"enableTwoFactorAuthentication": "Включить двухфакторную аутентификацию", "enableTwoFactorAuthentication": "Включить двухфакторную аутентификацию",
"completeSecuritySteps": "Пройти шаги безопасности", "completeSecuritySteps": "Пройти шаги безопасности",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Добавить пользователей", "editInternalResourceDialogAddUsers": "Добавить пользователей",
"editInternalResourceDialogAddClients": "Добавить клиентов", "editInternalResourceDialogAddClients": "Добавить клиентов",
"editInternalResourceDialogDestinationLabel": "Пункт назначения", "editInternalResourceDialogDestinationLabel": "Пункт назначения",
"editInternalResourceDialogDestinationDescription": "Укажите адрес назначения для внутреннего ресурса. Это может быть имя хоста, IP-адрес или диапазон CIDR в зависимости от выбранного режима. При необходимости установите внутренний DNS-алиас для облегчения идентификации.", "editInternalResourceDialogDestinationDescription": "Выберите, где этот ресурс работает и как к нему получают доступ клиенты",
"internalResourceFormMultiSiteRoutingHelp": "Выбор нескольких сайтов позволяет обеспечить отказоустойчивую маршрутизацию и фейловер для высокой доступности.", "internalResourceFormMultiSiteRoutingHelp": "Выбор нескольких сайтов позволяет обеспечить отказоустойчивую маршрутизацию и фейловер для высокой доступности.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Узнать больше", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Узнать больше",
"editInternalResourceDialogPortRestrictionsDescription": "Ограничьте доступ к определенным TCP/UDP-портам или разрешите/заблокируйте все порты.", "editInternalResourceDialogPortRestrictionsDescription": "Ограничьте доступ к определенным TCP/UDP-портам или разрешите/заблокируйте все порты.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Ресурс отключён", "memberPortalResourceDisabled": "Ресурс отключён",
"memberPortalShowingResources": "Показаны {start}-{end} из {total} ресурсов", "memberPortalShowingResources": "Показаны {start}-{end} из {total} ресурсов",
"resourceLauncherTitle": "Запуск ресурса", "resourceLauncherTitle": "Запуск ресурса",
"resourceLauncherDescription": "Просмотр деталей ресурса и запуск их из одного места", "resourceSidebarLauncherTitle": "Запускатор",
"resourceLauncherSearchPlaceholder": "Поиск всех сайтов...", "resourceLauncherDescription": "Просмотрите все доступные ресурсы и запустите их из одного централизованного узла",
"resourceLauncherSearchPlaceholder": "Поиск ваших ресурсов...",
"resourceLauncherDefaultView": "По умолчанию", "resourceLauncherDefaultView": "По умолчанию",
"resourceLauncherSaveView": "Сохранить вид", "resourceLauncherSaveView": "Сохранить вид",
"resourceLauncherSaveToCurrentView": "Сохранить в текущий вид", "resourceLauncherSaveToCurrentView": "Сохранить в текущий вид",
"resourceLauncherSaveDefaultPersonal": "Сохранить для меня",
"resourceLauncherResetView": "Сбросить вид", "resourceLauncherResetView": "Сбросить вид",
"resourceLauncherResetSystemDefault": "Сбросить на системные настройки по умолчанию",
"resourceLauncherSystemDefaultRestored": "Системные настройки по умолчанию восстановлены",
"resourceLauncherSystemDefaultRestoredDescription": "Вид по умолчанию был сброшен до исходных настроек.",
"resourceLauncherSaveAsNewView": "Сохранить как новый вид", "resourceLauncherSaveAsNewView": "Сохранить как новый вид",
"resourceLauncherSaveAsNewViewDescription": "Дайте этому виду имя, чтобы сохранить текущие фильтры и макет.", "resourceLauncherSaveAsNewViewDescription": "Дайте этому виду имя, чтобы сохранить текущие фильтры и макет.",
"resourceLauncherSaveForEveryone": "Сохранить для всех", "resourceLauncherSaveForEveryone": "Сохранить для всех",
"resourceLauncherSaveForEveryoneDescription": "Поделитесь этим видом со всеми членами организации. Если не отмечено, видимость только для вас.", "resourceLauncherSaveForEveryoneDescription": "Поделитесь этим видом со всеми членами организации. Если не отмечено, видимость только для вас.",
"resourceLauncherMakePersonal": "Сделать личным", "resourceLauncherMakePersonal": "Сделать личным",
"resourceLauncherFilter": "Фильтр", "resourceLauncherFilter": "Фильтр",
"resourceLauncherFilterWithCount": "Filter, {count} applied",
"resourceLauncherSort": "Сортировать", "resourceLauncherSort": "Сортировать",
"resourceLauncherSortAscending": "Сортировать по возрастанию", "resourceLauncherSortAscending": "Сортировать по возрастанию",
"resourceLauncherSortDescending": "Сортировать по убыванию", "resourceLauncherSortDescending": "Сортировать по убыванию",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Группировать по", "resourceLauncherGroupBy": "Группировать по",
"resourceLauncherGroupBySite": "Сайт", "resourceLauncherGroupBySite": "Сайт",
"resourceLauncherGroupByLabel": "Метка", "resourceLauncherGroupByLabel": "Метка",
"resourceLauncherGroupByNone": "Нет",
"resourceLauncherLayout": "Макет", "resourceLauncherLayout": "Макет",
"resourceLauncherLayoutGrid": "Сетка", "resourceLauncherLayoutGrid": "Сетка",
"resourceLauncherLayoutList": "Список", "resourceLauncherLayoutList": "Список",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Показать теги сайта", "resourceLauncherShowSiteTags": "Показать теги сайта",
"resourceLauncherShowRecents": "Показать недавно", "resourceLauncherShowRecents": "Показать недавно",
"resourceLauncherDeleteView": "Удалить вид", "resourceLauncherDeleteView": "Удалить вид",
"resourceLauncherDeleteViewTitle": "Удалить вид",
"resourceLauncherDeleteViewQuestion": "Вы уверены, что хотите удалить этот вид запускатора?",
"resourceLauncherDeleteViewConfirm": "Удалить вид",
"resourceLauncherViewAsAdmin": "Просмотр как администратор", "resourceLauncherViewAsAdmin": "Просмотр как администратор",
"resourceLauncherResourceDetailsDescription": "Просмотр деталей этого ресурса.", "resourceLauncherResourceDetailsDescription": "Информация о подключении и статус для данного ресурса.",
"resourceLauncherResourceDetails": "Детали ресурса",
"resourceLauncherAuthMethodsDescription": "Методы аутентификации, включенные для этого ресурса.",
"resourceLauncherPrivateClientRequired": "Подключитесь с клиентом на устройстве для доступа к этому ресурсу в частном порядке.",
"resourceLauncherPrivateClientRequiredTitle": "Требуется подключение клиента",
"resourceLauncherDownloadClient": "Скачать клиент",
"resourceLauncherFailedToLoadDetails": "Не удалось загрузить детали ресурса. Возможно, у вас больше нет доступа к этому ресурсу.",
"resourceLauncherNoPortRestrictions": "Нет ограничений портов",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Без меток", "resourceLauncherUnlabeled": "Без меток",
"resourceLauncherNoSite": "Без сайта", "resourceLauncherNoSite": "Без сайта",
"resourceLauncherNoResourcesInGroup": "Нет ресурсов в данной группе", "resourceLauncherNoResourcesInGroup": "Нет ресурсов в данной группе",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Ресурсы не найдены", "resourceLauncherEmptyStateNoResultsTitle": "Ресурсы не найдены",
"resourceLauncherEmptyStateNoResultsDescription": "Ни один ресурс не соответствует вашему текущему поисковому запросу или фильтрам. Попробуйте их изменить, чтобы найти нужное.", "resourceLauncherEmptyStateNoResultsDescription": "Ни один ресурс не соответствует вашему текущему поисковому запросу или фильтрам. Попробуйте их изменить, чтобы найти нужное.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Ни один ресурс не соответствует \"{query}\". Попробуйте изменить параметры поиска или очистить фильтры, чтобы увидеть все ресурсы.", "resourceLauncherEmptyStateNoResultsWithQuery": "Ни один ресурс не соответствует \"{query}\". Попробуйте изменить параметры поиска или очистить фильтры, чтобы увидеть все ресурсы.",
"resourceLauncherSearchFirstTitle": "Поиск или фильтр для просмотра",
"resourceLauncherSearchFirstDescription": "У вас есть доступ ко многим ресурсам. Используйте поиск или фильтр по сайту или метке, чтобы найти, что вам нужно.",
"resourceLauncherSiteGroupingDisabled": "Группировка по сайту недоступна в этом масштабе. Отфильтруйте по сайту, чтобы сгруппировать меньший набор.",
"resourceLauncherLabelGroupingDisabled": "Группировка по меткам недоступна в этом масштабе.",
"resourceLauncherCompactModeHint": "Показывается упрощённый список для более быстрого просмотра. Используйте поиск или фильтры, чтобы сузить результаты.",
"resourceLauncherCompactGroupingHint": "Примените фильтры сайта или меток, чтобы включить группировку.",
"resourceLauncherCopiedToClipboard": "Скопировано в буфер обмена", "resourceLauncherCopiedToClipboard": "Скопировано в буфер обмена",
"resourceLauncherCopiedAccessDescription": "Доступ к ресурсу был скопирован в ваш буфер обмена.", "resourceLauncherCopiedAccessDescription": "Доступ к ресурсу был скопирован в ваш буфер обмена.",
"resourceLauncherViewNamePlaceholder": "Имя вида", "resourceLauncherViewNamePlaceholder": "Имя вида",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "Proxy isteklerini bir port numarası kullanarak ham TCP/UDP üzerinden yapın. Sitelerin uzak bir düğüme bağlanması gereklidir.", "resourceRawDescriptionCloud": "Proxy isteklerini bir port numarası kullanarak ham TCP/UDP üzerinden yapın. Sitelerin uzak bir düğüme bağlanması gereklidir.",
"resourceCreate": "Kaynak Oluştur", "resourceCreate": "Kaynak Oluştur",
"resourceCreateDescription": "Yeni bir kaynak oluşturmak için aşağıdaki adımları izleyin", "resourceCreateDescription": "Yeni bir kaynak oluşturmak için aşağıdaki adımları izleyin",
"resourcePublicCreate": "Halka Açık Kaynak Oluştur",
"resourcePublicCreateDescription": "Web tarayıcısı üzerinden erişilebilen yeni bir genel kaynak oluşturmak için aşağıdaki adımları izleyin",
"resourceCreateGeneralDescription": "Adı ve türü dahil temel kaynak ayarlarını yapılandırın", "resourceCreateGeneralDescription": "Adı ve türü dahil temel kaynak ayarlarını yapılandırın",
"resourceSeeAll": "Tüm Kaynakları Gör", "resourceSeeAll": "Tüm Kaynakları Gör",
"resourceCreateGeneral": "Genel", "resourceCreateGeneral": "Genel",
@@ -613,7 +615,8 @@
"idpNameInternal": "Dahili", "idpNameInternal": "Dahili",
"emailInvalid": "Geçersiz e-posta adresi", "emailInvalid": "Geçersiz e-posta adresi",
"inviteValidityDuration": "Lütfen bir süre seçin", "inviteValidityDuration": "Lütfen bir süre seçin",
"accessRoleSelectPlease": "Lütfen bir rol seçin", "accessRoleSelectPlease": "Bir kullanıcı en az bir role ait olmalıdır.",
"accessRoleRequired": "Rol gerekli",
"removeOwnAdminRoleConfirmTitle": "Yönetici erişiminizi kaldırmak istiyor musunuz?", "removeOwnAdminRoleConfirmTitle": "Yönetici erişiminizi kaldırmak istiyor musunuz?",
"removeOwnAdminRoleConfirmDescription": "Kaydettikten sonra, bu organizasyonda artık yönetici izinleriniz olmayacak. Gerekirse başka bir yönetici erişimi geri yükleyebilir.", "removeOwnAdminRoleConfirmDescription": "Kaydettikten sonra, bu organizasyonda artık yönetici izinleriniz olmayacak. Gerekirse başka bir yönetici erişimi geri yükleyebilir.",
"removeOwnAdminRoleConfirmButton": "Yönetici Erişimi Kaldır", "removeOwnAdminRoleConfirmButton": "Yönetici Erişimi Kaldır",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "Temel Başlık Kimlik Doğrulama", "policyAuthHeaderAuthTitle": "Temel Başlık Kimlik Doğrulama",
"policyAuthHeaderAuthDescription": "Her istekte özel bir HTTP başlık adını ve değerini doğrulayın", "policyAuthHeaderAuthDescription": "Her istekte özel bir HTTP başlık adını ve değerini doğrulayın",
"policyAuthHeaderAuthSummary": "Başlık yapılandırıldı", "policyAuthHeaderAuthSummary": "Başlık yapılandırıldı",
"policyAuthHeaderName": "Başlık adı", "policyAuthHeaderName": "Kullanıcı Adı",
"policyAuthHeaderValue": "Beklenen değer", "policyAuthHeaderValue": "Şifre",
"policyAuthSetPasscode": "Şifreyi Ayarla", "policyAuthSetPasscode": "Şifreyi Ayarla",
"policyAuthSetPincode": "PIN Kodunu Ayarla", "policyAuthSetPincode": "PIN Kodunu Ayarla",
"policyAuthSetEmailWhitelist": "E-posta Beyaz Listesini Ayarla", "policyAuthSetEmailWhitelist": "E-posta Beyaz Listesini Ayarla",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "Kaynak PIN Kodunu Ayarla", "actionSetResourcePincode": "Kaynak PIN Kodunu Ayarla",
"actionSetResourceEmailWhitelist": "Kaynak E-posta Beyaz Listesi Ayarla", "actionSetResourceEmailWhitelist": "Kaynak E-posta Beyaz Listesi Ayarla",
"actionGetResourceEmailWhitelist": "Kaynak E-posta Beyaz Listesini Al", "actionGetResourceEmailWhitelist": "Kaynak E-posta Beyaz Listesini Al",
"actionGetResourcePolicy": "Kaynak Politikasını Al",
"actionUpdateResourcePolicy": "Kaynak Politikasını Güncelle",
"actionSetResourcePolicyUsers": "Kaynak Politika Kullanıcılarını Ayarla",
"actionSetResourcePolicyRoles": "Kaynak Politika Rolleri Ayarla",
"actionSetResourcePolicyPassword": "Kaynak Politika Şifresini Ayarla",
"actionSetResourcePolicyPincode": "Kaynak Politika Pincode Ayarla",
"actionSetResourcePolicyHeaderAuth": "Kaynak Politika Başlık Kimlik Doğrulama Ayarla",
"actionSetResourcePolicyWhitelist": "Kaynak Politika E-posta Beyaz Listesi Ayarla",
"actionSetResourcePolicyRules": "Kaynak Politika Kurallarını Ayarla",
"actionCreateTarget": "Hedef Oluştur", "actionCreateTarget": "Hedef Oluştur",
"actionDeleteTarget": "Hedefi Sil", "actionDeleteTarget": "Hedefi Sil",
"actionGetTarget": "Hedefi Al", "actionGetTarget": "Hedefi Al",
@@ -1507,6 +1519,30 @@
"navbar": "Navigasyon Menüsü", "navbar": "Navigasyon Menüsü",
"navbarDescription": "Uygulamanın ana navigasyon menüsü", "navbarDescription": "Uygulamanın ana navigasyon menüsü",
"navbarDocsLink": "Dokümantasyon", "navbarDocsLink": "Dokümantasyon",
"commandPaletteTitle": "Komut Paleti",
"commandPaletteDescription": "Sayfalar, organizasyonlar, kaynaklar ve işlemler için arama yapın",
"commandPaletteSearchPlaceholder": "Sayfaları, kaynakları, işlemleri ara...",
"commandPaletteNoResults": "Sonuç bulunamadı.",
"commandPaletteSearching": "Aranıyor...",
"commandPaletteNavigation": "Navigasyon",
"commandPaletteOrganizations": "Organizasyonlar",
"commandPaletteSites": "Siteler",
"commandPaletteResources": "Kaynaklar",
"commandPaletteUsers": "Kullanıcılar",
"commandPaletteClients": "Makine İstemcileri",
"commandPaletteActions": "İşlemler",
"commandPaletteCreateSite": "Site Oluştur",
"commandPaletteCreateProxyResource": "Genel Kaynak Oluştur",
"commandPaletteCreatePrivateResource": "Özel Kaynak Oluştur",
"commandPaletteCreateUser": "Kullanıcı Oluştur",
"commandPaletteCreateApiKey": "API Anahtarı Oluştur",
"commandPaletteCreateMachineClient": "Makine İstemcisi Oluştur",
"commandPaletteCreateAlertRule": "Uyarı Kuralı Oluştur",
"commandPaletteCreateIdentityProvider": "Kimlik Sağlayıcı Oluştur",
"commandPaletteToggleTheme": "Temayı Aç/Kapat",
"commandPaletteChooseOrganization": "Organizasyon Seç",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "2FA etkinleştirilemedi", "otpErrorEnable": "2FA etkinleştirilemedi",
"otpErrorEnableDescription": "2FA etkinleştirilirken bir hata oluştu", "otpErrorEnableDescription": "2FA etkinleştirilirken bir hata oluştu",
"otpSetupCheckCode": "6 haneli bir kod girin", "otpSetupCheckCode": "6 haneli bir kod girin",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "Yönetim", "sidebarManagement": "Yönetim",
"sidebarBillingAndLicenses": "Faturalandırma & Lisanslar", "sidebarBillingAndLicenses": "Faturalandırma & Lisanslar",
"sidebarLogsAnalytics": "Analitik", "sidebarLogsAnalytics": "Analitik",
"commandSites": "Siteler",
"commandActionModeInfo": "Eylem Modunu Açmak İçin \">\" Yazın",
"commandResources": "Kaynaklar",
"commandProxyResources": "Genel Kaynaklar",
"commandClientResources": "Özel Kaynaklar",
"commandClients": "İstemciler",
"commandUserDevices": "Kullanıcı Aygıtları",
"commandMachineClients": "Makine İstemcileri",
"commandDomains": "Alan Adları",
"commandRemoteExitNodes": "Uzak Düğümler",
"commandTeam": "Ekip",
"commandUsers": "Kullanıcılar",
"commandRoles": "Roller",
"commandInvitations": "Davetiyeler",
"commandPolicies": "Paylaşılan Politikalar",
"commandResourcePolicies": "Genel Kaynaklar Politikaları",
"commandIdentityProviders": "Kimlik Sağlayıcılar",
"commandApprovals": "Onay İstekleri",
"commandShareableLinks": "Paylaşılabilir Bağlantılar",
"commandOrganization": "Organizasyon",
"commandLogsAndAnalytics": "Günlükler ve Analitik",
"commandLogsAnalytics": "Analitik",
"commandLogsRequest": "HTTP İstek Günlükleri",
"commandLogsAccess": "Kimlik Doğrulama Günlükleri",
"commandLogsAction": "Yönetim Eylemi Günlükleri",
"commandLogsConnection": "Ağ Günlükleri",
"commandLogsStreaming": "Olay Akışı",
"commandManagement": "Yönetim",
"commandAlerting": "Uyarılar",
"commandProvisioning": "Sağlama",
"commandBluePrints": "Planlar",
"commandApiKeys": "API Anahtarları",
"commandBillingAndLicenses": "Faturalama ve Lisanslar",
"commandBilling": "Faturalama",
"commandEnterpriseLicenses": "Lisanslar",
"commandSettings": "Ayarlar",
"commandLauncher": "Başlatıcı",
"commandResourceLauncher": "Kaynak Başlatıcı",
"commandSearchResults": "Arama Sonuçları",
"alertingTitle": "Uyarı", "alertingTitle": "Uyarı",
"alertingDescription": "Bildirimler için kaynakları, tetikleyicileri ve eylemleri tanımlayın", "alertingDescription": "Bildirimler için kaynakları, tetikleyicileri ve eylemleri tanımlayın",
"alertingRules": "Uyarı kuralları", "alertingRules": "Uyarı kuralları",
@@ -1915,6 +1990,9 @@
"billingDomains": "Alan Adları", "billingDomains": "Alan Adları",
"billingOrganizations": "Organizasyonlar", "billingOrganizations": "Organizasyonlar",
"billingRemoteExitNodes": "Uzak Düğümler", "billingRemoteExitNodes": "Uzak Düğümler",
"billingPublicResources": "Genel Kaynaklar",
"billingPrivateResources": "Özel Kaynaklar",
"billingMachineClients": "Makine İstemcileri",
"billingNoLimitConfigured": "Hiçbir limit yapılandırılmadı", "billingNoLimitConfigured": "Hiçbir limit yapılandırılmadı",
"billingEstimatedPeriod": "Tahmini Fatura Dönemi", "billingEstimatedPeriod": "Tahmini Fatura Dönemi",
"billingIncludedUsage": "Dahil Kullanım", "billingIncludedUsage": "Dahil Kullanım",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "Kaç tane kullanıcı kullanabileceğiniz", "billingUsersInfo": "Kaç tane kullanıcı kullanabileceğiniz",
"billingDomainInfo": "Kaç tane alan adı kullanabileceğiniz", "billingDomainInfo": "Kaç tane alan adı kullanabileceğiniz",
"billingRemoteExitNodesInfo": "Kaç tane uzaktan düğüm kullanabileceğiniz", "billingRemoteExitNodesInfo": "Kaç tane uzaktan düğüm kullanabileceğiniz",
"billingPublicResourcesInfo": "Kaç adet genel kaynağı kullanabileceğinizi görün",
"billingPrivateResourcesInfo": "Kaç adet özel kaynağı kullanabileceğinizi görün",
"billingMachineClientsInfo": "Kaç adet makine istemcisi kullanabileceğinizi görün",
"billingLicenseKeys": "Lisans Anahtarları", "billingLicenseKeys": "Lisans Anahtarları",
"billingLicenseKeysDescription": "Lisans anahtarı aboneliklerinizi yönetin", "billingLicenseKeysDescription": "Lisans anahtarı aboneliklerinizi yönetin",
"billingLicenseSubscription": "Lisans Aboneliği", "billingLicenseSubscription": "Lisans Aboneliği",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "Kapat", "createInternalResourceDialogClose": "Kapat",
"createInternalResourceDialogCreateClientResource": "Özel Kaynak Oluştur", "createInternalResourceDialogCreateClientResource": "Özel Kaynak Oluştur",
"createInternalResourceDialogCreateClientResourceDescription": "Seçilen siteye bağlı istemcilere erişilebilir olacak yeni bir kaynak oluşturun", "createInternalResourceDialogCreateClientResourceDescription": "Seçilen siteye bağlı istemcilere erişilebilir olacak yeni bir kaynak oluşturun",
"privateResourceCreatePageSeeAll": "Tüm Özel Kaynakları Gör",
"privateResourceAllowIcmpPing": "ICMP Ping İzne Ver",
"privateResourceNetworkAccess": "Ağ Erişimi",
"privateResourceNetworkAccessDescription": "Bu kaynak için TCP/UDP port erişimini kontrol edin ve ICMP ping'in izin verilip verilmediğini kontrol edin.",
"hostSettings": "Sunucu Ayarları",
"cidrSettings": "CIDR Ayarları",
"createInternalResourceDialogResourceProperties": "Kaynak Özellikleri", "createInternalResourceDialogResourceProperties": "Kaynak Özellikleri",
"createInternalResourceDialogName": "Ad", "createInternalResourceDialogName": "Ad",
"createInternalResourceDialogSite": "Site", "createInternalResourceDialogSite": "Site",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "Bu organizasyon için düğüm mevcut değil. Yerel siteleri kullanmak için önce bir düğüm oluşturun.", "noRemoteExitNodesAvailableDescription": "Bu organizasyon için düğüm mevcut değil. Yerel siteleri kullanmak için önce bir düğüm oluşturun.",
"exitNode": "Çıkış Düğümü", "exitNode": "Çıkış Düğümü",
"country": "Ülke", "country": "Ülke",
"countryIsNot": "Ülke Değil",
"rulesMatchCountry": "Şu anda kaynak IP'ye dayanarak", "rulesMatchCountry": "Şu anda kaynak IP'ye dayanarak",
"region": "Bölge", "region": "Bölge",
"selectRegion": "Bölgeyi seçin", "selectRegion": "Bölgeyi seçin",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "İki faktörlü kimlik doğrulama ayarı gereklidir. Bu adımı tamamlamak için lütfen tekrar {dashboardUrl}/auth/login üzerinden oturum açın. Sonra buraya geri dönün.", "twoFactorSetupRequired": "İki faktörlü kimlik doğrulama ayarı gereklidir. Bu adımı tamamlamak için lütfen tekrar {dashboardUrl}/auth/login üzerinden oturum açın. Sonra buraya geri dönün.",
"additionalSecurityRequired": "Ek Güvenlik Gereklidir", "additionalSecurityRequired": "Ek Güvenlik Gereklidir",
"organizationRequiresAdditionalSteps": "Bu kuruluş, kaynaklara erişmeden önce ek güvenlik adımları gerektirir.", "organizationRequiresAdditionalSteps": "Bu kuruluş, kaynaklara erişmeden önce ek güvenlik adımları gerektirir.",
"sessionExpired": "Oturum Süresi Doldu",
"sessionExpiredReauthRequired": "Organizasyonunuzun güvenlik politikası gereği oturum süreniz doldu. Devam etmek için yeniden kimlik doğrulaması yapın.",
"reauthenticate": "Yeniden Kimlik Doğrula",
"completeTheseSteps": "Bu adımları tamamlayın", "completeTheseSteps": "Bu adımları tamamlayın",
"enableTwoFactorAuthentication": "İki faktörlü kimlik doğrulamayı etkinleştir", "enableTwoFactorAuthentication": "İki faktörlü kimlik doğrulamayı etkinleştir",
"completeSecuritySteps": "Güvenlik Adımlarını Tamamla", "completeSecuritySteps": "Güvenlik Adımlarını Tamamla",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "Kullanıcılar Ekle", "editInternalResourceDialogAddUsers": "Kullanıcılar Ekle",
"editInternalResourceDialogAddClients": "Müşteriler Ekle", "editInternalResourceDialogAddClients": "Müşteriler Ekle",
"editInternalResourceDialogDestinationLabel": "Hedef", "editInternalResourceDialogDestinationLabel": "Hedef",
"editInternalResourceDialogDestinationDescription": "Dahili kaynak için hedef adresi belirtin. Seçilen moda bağlı olarak bu bir ana bilgisayar adı, IP adresi veya CIDR aralığı olabilir. Daha kolay tanımlama için isteğe bağlı olarak dahili bir DNS takma adı ayarlayın.", "editInternalResourceDialogDestinationDescription": "Bu kaynağın nerede çalıştığını ve istemcilerin ona nasıl eriştiğini seçin",
"internalResourceFormMultiSiteRoutingHelp": "Birden fazla site seçmek, yüksek kullanılabilirlik için dirençli yönlendirme ve yedeklik sağlar.", "internalResourceFormMultiSiteRoutingHelp": "Birden fazla site seçmek, yüksek kullanılabilirlik için dirençli yönlendirme ve yedeklik sağlar.",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "Daha fazla bilgi", "internalResourceFormMultiSiteRoutingHelpLearnMore": "Daha fazla bilgi",
"editInternalResourceDialogPortRestrictionsDescription": "Belirtilen TCP/UDP portlarına erişimi kısıtlayın veya tüm portlara izin/engelleme verin.", "editInternalResourceDialogPortRestrictionsDescription": "Belirtilen TCP/UDP portlarına erişimi kısıtlayın veya tüm portlara izin/engelleme verin.",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "Kaynak Devre Dışı", "memberPortalResourceDisabled": "Kaynak Devre Dışı",
"memberPortalShowingResources": "{total} kaynaktan {start}-{end} gösteriliyor", "memberPortalShowingResources": "{total} kaynaktan {start}-{end} gösteriliyor",
"resourceLauncherTitle": "Kaynak Başlatıcı", "resourceLauncherTitle": "Kaynak Başlatıcı",
"resourceLauncherDescription": "Kaynağın detaylarını görüntüleyin ve tek bir yerden başlatın", "resourceSidebarLauncherTitle": "Başlatıcı",
"resourceLauncherSearchPlaceholder": "Tüm siteleri ara...", "resourceLauncherDescription": "Tüm mevcut kaynakları görün ve bunları merkezi bir merkezden başlatın",
"resourceLauncherSearchPlaceholder": "Kaynaklarınızı arayın...",
"resourceLauncherDefaultView": "Varsayılan", "resourceLauncherDefaultView": "Varsayılan",
"resourceLauncherSaveView": "Görünümü Kaydet", "resourceLauncherSaveView": "Görünümü Kaydet",
"resourceLauncherSaveToCurrentView": "Mevcut Görünüme Kaydet", "resourceLauncherSaveToCurrentView": "Mevcut Görünüme Kaydet",
"resourceLauncherSaveDefaultPersonal": "Benim için Kaydet",
"resourceLauncherResetView": "Görünümü Sıfırla", "resourceLauncherResetView": "Görünümü Sıfırla",
"resourceLauncherResetSystemDefault": "Sistem Varsayılanını Sıfırla",
"resourceLauncherSystemDefaultRestored": "Sistem varsayılanı geri yüklendi",
"resourceLauncherSystemDefaultRestoredDescription": "Varsayılan görünüm orijinal ayarlara sıfırlandı.",
"resourceLauncherSaveAsNewView": "Yeni Görünüm Olarak Kaydet", "resourceLauncherSaveAsNewView": "Yeni Görünüm Olarak Kaydet",
"resourceLauncherSaveAsNewViewDescription": "Geçerli filtrelerinizi ve düzeninizi kaydetmek için bu görünüme bir ad verin.", "resourceLauncherSaveAsNewViewDescription": "Geçerli filtrelerinizi ve düzeninizi kaydetmek için bu görünüme bir ad verin.",
"resourceLauncherSaveForEveryone": "Herkes İçin Kaydet", "resourceLauncherSaveForEveryone": "Herkes İçin Kaydet",
"resourceLauncherSaveForEveryoneDescription": "Bu görünümü tüm kuruluş üyeleriyle paylaşın. İşaretli değilse, görünüm yalnızca size görünür olur.", "resourceLauncherSaveForEveryoneDescription": "Bu görünümü tüm kuruluş üyeleriyle paylaşın. İşaretli değilse, görünüm yalnızca size görünür olur.",
"resourceLauncherMakePersonal": "Kişisel Yap", "resourceLauncherMakePersonal": "Kişisel Yap",
"resourceLauncherFilter": "Filtre", "resourceLauncherFilter": "Filtre",
"resourceLauncherFilterWithCount": "Filtre, {count} uygulandı",
"resourceLauncherSort": "Sıralama", "resourceLauncherSort": "Sıralama",
"resourceLauncherSortAscending": "Artan sırala", "resourceLauncherSortAscending": "Artan sırala",
"resourceLauncherSortDescending": "Azalan sırala", "resourceLauncherSortDescending": "Azalan sırala",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "Grupla", "resourceLauncherGroupBy": "Grupla",
"resourceLauncherGroupBySite": "Site", "resourceLauncherGroupBySite": "Site",
"resourceLauncherGroupByLabel": "Etiket", "resourceLauncherGroupByLabel": "Etiket",
"resourceLauncherGroupByNone": "Hiçbiri",
"resourceLauncherLayout": "Düzen", "resourceLauncherLayout": "Düzen",
"resourceLauncherLayoutGrid": "Izgara", "resourceLauncherLayoutGrid": "Izgara",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "Site Etiketlerini Göster", "resourceLauncherShowSiteTags": "Site Etiketlerini Göster",
"resourceLauncherShowRecents": "Son Eklenenleri Göster", "resourceLauncherShowRecents": "Son Eklenenleri Göster",
"resourceLauncherDeleteView": "Görünümü Sil", "resourceLauncherDeleteView": "Görünümü Sil",
"resourceLauncherDeleteViewTitle": "Görünümü Sil",
"resourceLauncherDeleteViewQuestion": "Bu başlatıcı görünümünü silmek istediğinizden emin misiniz?",
"resourceLauncherDeleteViewConfirm": "Görünümü Sil",
"resourceLauncherViewAsAdmin": "Yönetici Olarak Görüntüle", "resourceLauncherViewAsAdmin": "Yönetici Olarak Görüntüle",
"resourceLauncherResourceDetailsDescription": "Bu kaynağın detaylarını görüntüleyin.", "resourceLauncherResourceDetailsDescription": "Bu kaynağın bağlantı bilgileri ve durumu.",
"resourceLauncherResourceDetails": "Kaynak Detayları",
"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",
"resourceLauncherDownloadClient": "İstemci indir",
"resourceLauncherFailedToLoadDetails": "Kaynak detayları yüklenemedi. Bu kaynağa artık erişiminiz olmayabilir.",
"resourceLauncherNoPortRestrictions": "Hiçbir port kısıtlaması yok",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Etiketsiz", "resourceLauncherUnlabeled": "Etiketsiz",
"resourceLauncherNoSite": "Site Yok", "resourceLauncherNoSite": "Site Yok",
"resourceLauncherNoResourcesInGroup": "Bu grupta kaynak yok", "resourceLauncherNoResourcesInGroup": "Bu grupta kaynak yok",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Kaynak Bulunamadı", "resourceLauncherEmptyStateNoResultsTitle": "Kaynak Bulunamadı",
"resourceLauncherEmptyStateNoResultsDescription": "Mevcut arama veya filtrelerinizle eşleşen kaynak yok. Aradığınızı bulmak için ayarları değiştirmeyi deneyin.", "resourceLauncherEmptyStateNoResultsDescription": "Mevcut arama veya filtrelerinizle eşleşen kaynak yok. Aradığınızı bulmak için ayarları değiştirmeyi deneyin.",
"resourceLauncherEmptyStateNoResultsWithQuery": "\"{query}\" ile eşleşen kaynak yok. Tüm kaynakları görmek için aramayı düzenlemeyi veya filtreleri temizlemeyi deneyin.", "resourceLauncherEmptyStateNoResultsWithQuery": "\"{query}\" ile eşleşen kaynak yok. Tüm kaynakları görmek için aramayı düzenlemeyi veya filtreleri temizlemeyi deneyin.",
"resourceLauncherSearchFirstTitle": "Aranacak ya da Göz Atılacak Filtreler",
"resourceLauncherSearchFirstDescription": "Birçok kaynağa erişiminiz var. İhtiyacınız olanı bulmak için site veya etiketle arayın veya filtreleyin.",
"resourceLauncherSiteGroupingDisabled": "Bu ölçekte site gruplama mevcut değil. Daha küçük bir seti gruplamak için siteye göre filtreleyin.",
"resourceLauncherLabelGroupingDisabled": "Bu ölçekte etiket gruplama mevcut değil.",
"resourceLauncherCompactModeHint": "Daha hızlı göz atmak için basitleştirilmiş bir liste gösteriliyor. Sonuçları daraltmak için arayın veya filtreler kullanın.",
"resourceLauncherCompactGroupingHint": "Gruplama etkinleştirmek için site veya etiket filtreleri uygulayın.",
"resourceLauncherCopiedToClipboard": "Panoya kopyalandı", "resourceLauncherCopiedToClipboard": "Panoya kopyalandı",
"resourceLauncherCopiedAccessDescription": "Kaynağa erişim panonuza kopyalandı.", "resourceLauncherCopiedAccessDescription": "Kaynağa erişim panonuza kopyalandı.",
"resourceLauncherViewNamePlaceholder": "Görünüm adı", "resourceLauncherViewNamePlaceholder": "Görünüm adı",
+123 -7
View File
@@ -266,6 +266,8 @@
"resourceRawDescriptionCloud": "正在使用端口号使用 TCP/UDP 代理请求。需要站点连接到远程节点。", "resourceRawDescriptionCloud": "正在使用端口号使用 TCP/UDP 代理请求。需要站点连接到远程节点。",
"resourceCreate": "创建资源", "resourceCreate": "创建资源",
"resourceCreateDescription": "按照下面的步骤创建新资源", "resourceCreateDescription": "按照下面的步骤创建新资源",
"resourcePublicCreate": "创建公共资源",
"resourcePublicCreateDescription": "按照以下步骤创建一个可通过网页浏览器访问的新公共资源",
"resourceCreateGeneralDescription": "配置基本资源设置,包括名称和类型", "resourceCreateGeneralDescription": "配置基本资源设置,包括名称和类型",
"resourceSeeAll": "查看所有资源", "resourceSeeAll": "查看所有资源",
"resourceCreateGeneral": "概览", "resourceCreateGeneral": "概览",
@@ -613,7 +615,8 @@
"idpNameInternal": "内部设置", "idpNameInternal": "内部设置",
"emailInvalid": "无效的电子邮件地址", "emailInvalid": "无效的电子邮件地址",
"inviteValidityDuration": "请选择持续时间", "inviteValidityDuration": "请选择持续时间",
"accessRoleSelectPlease": "请选择一个角色", "accessRoleSelectPlease": "用户必须至少属于一个角色",
"accessRoleRequired": "需要角色",
"removeOwnAdminRoleConfirmTitle": "移除你的管理员权限?", "removeOwnAdminRoleConfirmTitle": "移除你的管理员权限?",
"removeOwnAdminRoleConfirmDescription": "保存后,你将不再拥有该组织的管理员权限。如果需要,其他管理员可以恢复访问。", "removeOwnAdminRoleConfirmDescription": "保存后,你将不再拥有该组织的管理员权限。如果需要,其他管理员可以恢复访问。",
"removeOwnAdminRoleConfirmButton": "移除我的管理员访问权限", "removeOwnAdminRoleConfirmButton": "移除我的管理员访问权限",
@@ -864,8 +867,8 @@
"policyAuthHeaderAuthTitle": "基础标题认证", "policyAuthHeaderAuthTitle": "基础标题认证",
"policyAuthHeaderAuthDescription": "在每次请求上验证自定义 HTTP 标头名称和值", "policyAuthHeaderAuthDescription": "在每次请求上验证自定义 HTTP 标头名称和值",
"policyAuthHeaderAuthSummary": "标头已配置", "policyAuthHeaderAuthSummary": "标头已配置",
"policyAuthHeaderName": "标头名称", "policyAuthHeaderName": "用户名",
"policyAuthHeaderValue": "预期值", "policyAuthHeaderValue": "密码",
"policyAuthSetPasscode": "设定密码", "policyAuthSetPasscode": "设定密码",
"policyAuthSetPincode": "设置 PIN 码", "policyAuthSetPincode": "设置 PIN 码",
"policyAuthSetEmailWhitelist": "设置电子邮件白名单", "policyAuthSetEmailWhitelist": "设置电子邮件白名单",
@@ -1431,6 +1434,15 @@
"actionSetResourcePincode": "设置资源粉码", "actionSetResourcePincode": "设置资源粉码",
"actionSetResourceEmailWhitelist": "设置资源电子邮件白名单", "actionSetResourceEmailWhitelist": "设置资源电子邮件白名单",
"actionGetResourceEmailWhitelist": "获取资源电子邮件白名单", "actionGetResourceEmailWhitelist": "获取资源电子邮件白名单",
"actionGetResourcePolicy": "获取资源策略",
"actionUpdateResourcePolicy": "更新资源策略",
"actionSetResourcePolicyUsers": "设置资源策略用户",
"actionSetResourcePolicyRoles": "设置资源策略角色",
"actionSetResourcePolicyPassword": "设置资源策略密码",
"actionSetResourcePolicyPincode": "设置资源策略密码",
"actionSetResourcePolicyHeaderAuth": "设置资源策略头部身份验证",
"actionSetResourcePolicyWhitelist": "设置资源策略邮件白名单",
"actionSetResourcePolicyRules": "设置资源策略规则",
"actionCreateTarget": "创建目标", "actionCreateTarget": "创建目标",
"actionDeleteTarget": "删除目标", "actionDeleteTarget": "删除目标",
"actionGetTarget": "获取目标", "actionGetTarget": "获取目标",
@@ -1507,6 +1519,30 @@
"navbar": "导航菜单", "navbar": "导航菜单",
"navbarDescription": "应用程序的主导航菜单", "navbarDescription": "应用程序的主导航菜单",
"navbarDocsLink": "文件", "navbarDocsLink": "文件",
"commandPaletteTitle": "命令面板",
"commandPaletteDescription": "搜索页、组织、资源和操作",
"commandPaletteSearchPlaceholder": "搜索页面、资源、操作……",
"commandPaletteNoResults": "未找到任何结果。",
"commandPaletteSearching": "搜索中……",
"commandPaletteNavigation": "导航",
"commandPaletteOrganizations": "组织",
"commandPaletteSites": "网站",
"commandPaletteResources": "资源",
"commandPaletteUsers": "用户",
"commandPaletteClients": "机器客户端",
"commandPaletteActions": "操作",
"commandPaletteCreateSite": "创建网站",
"commandPaletteCreateProxyResource": "创建公共资源",
"commandPaletteCreatePrivateResource": "创建私人资源",
"commandPaletteCreateUser": "创建用户",
"commandPaletteCreateApiKey": "创建 API 密钥",
"commandPaletteCreateMachineClient": "创建机器客户端",
"commandPaletteCreateAlertRule": "创建警报规则",
"commandPaletteCreateIdentityProvider": "创建身份提供商",
"commandPaletteToggleTheme": "切换主题",
"commandPaletteChooseOrganization": "选择组织",
"commandPaletteShortcutMac": "⌘K",
"commandPaletteShortcutWindows": "Ctrl K",
"otpErrorEnable": "无法启用 2FA", "otpErrorEnable": "无法启用 2FA",
"otpErrorEnableDescription": "启用 2FA 时出错", "otpErrorEnableDescription": "启用 2FA 时出错",
"otpSetupCheckCode": "请输入您的6位数字代码", "otpSetupCheckCode": "请输入您的6位数字代码",
@@ -1584,6 +1620,45 @@
"sidebarManagement": "管理", "sidebarManagement": "管理",
"sidebarBillingAndLicenses": "帐单和许可证", "sidebarBillingAndLicenses": "帐单和许可证",
"sidebarLogsAnalytics": "分析", "sidebarLogsAnalytics": "分析",
"commandSites": "网站",
"commandActionModeInfo": "输入 \">\" 打开操作模式",
"commandResources": "资源",
"commandProxyResources": "公共资源",
"commandClientResources": "私有资源",
"commandClients": "客户端",
"commandUserDevices": "用户设备",
"commandMachineClients": "机器客户端",
"commandDomains": "域",
"commandRemoteExitNodes": "远程节点",
"commandTeam": "团队",
"commandUsers": "用户",
"commandRoles": "角色",
"commandInvitations": "邀请",
"commandPolicies": "共享策略",
"commandResourcePolicies": "公共资源政策",
"commandIdentityProviders": "身份提供商",
"commandApprovals": "审批请求",
"commandShareableLinks": "可共享链接",
"commandOrganization": "组织",
"commandLogsAndAnalytics": "日志与分析",
"commandLogsAnalytics": "分析",
"commandLogsRequest": "HTTP 请求日志",
"commandLogsAccess": "身份验证日志",
"commandLogsAction": "管理员操作日志",
"commandLogsConnection": "网络日志",
"commandLogsStreaming": "事件流",
"commandManagement": "管理",
"commandAlerting": "警报",
"commandProvisioning": "配置",
"commandBluePrints": "蓝图",
"commandApiKeys": "API 密钥",
"commandBillingAndLicenses": "计费与许可证",
"commandBilling": "计费",
"commandEnterpriseLicenses": "许可证",
"commandSettings": "设置",
"commandLauncher": "启动器",
"commandResourceLauncher": "资源启动器",
"commandSearchResults": "搜索结果",
"alertingTitle": "告警", "alertingTitle": "告警",
"alertingDescription": "定义通知的来源、触发器和操作", "alertingDescription": "定义通知的来源、触发器和操作",
"alertingRules": "告警规则", "alertingRules": "告警规则",
@@ -1915,6 +1990,9 @@
"billingDomains": "域", "billingDomains": "域",
"billingOrganizations": "球队", "billingOrganizations": "球队",
"billingRemoteExitNodes": "远程节点", "billingRemoteExitNodes": "远程节点",
"billingPublicResources": "公共资源",
"billingPrivateResources": "私有资源",
"billingMachineClients": "机器客户端",
"billingNoLimitConfigured": "未配置限制", "billingNoLimitConfigured": "未配置限制",
"billingEstimatedPeriod": "估计结算周期", "billingEstimatedPeriod": "估计结算周期",
"billingIncludedUsage": "包含的使用量", "billingIncludedUsage": "包含的使用量",
@@ -1943,6 +2021,9 @@
"billingUsersInfo": "您可以使用多少用户", "billingUsersInfo": "您可以使用多少用户",
"billingDomainInfo": "您可以使用多少域", "billingDomainInfo": "您可以使用多少域",
"billingRemoteExitNodesInfo": "您可以使用多少远程节点", "billingRemoteExitNodesInfo": "您可以使用多少远程节点",
"billingPublicResourcesInfo": "您可以使用多少公共资源",
"billingPrivateResourcesInfo": "您可以使用多少私有资源",
"billingMachineClientsInfo": "您可以使用多少机器客户端",
"billingLicenseKeys": "许可证密钥", "billingLicenseKeys": "许可证密钥",
"billingLicenseKeysDescription": "管理您的许可证密钥订阅", "billingLicenseKeysDescription": "管理您的许可证密钥订阅",
"billingLicenseSubscription": "许可订阅", "billingLicenseSubscription": "许可订阅",
@@ -2311,6 +2392,12 @@
"createInternalResourceDialogClose": "关闭", "createInternalResourceDialogClose": "关闭",
"createInternalResourceDialogCreateClientResource": "创建私有资源", "createInternalResourceDialogCreateClientResource": "创建私有资源",
"createInternalResourceDialogCreateClientResourceDescription": "创建一个新资源只能为连接到组织的客户端访问", "createInternalResourceDialogCreateClientResourceDescription": "创建一个新资源只能为连接到组织的客户端访问",
"privateResourceCreatePageSeeAll": "查看所有私人资源",
"privateResourceAllowIcmpPing": "允许 ICMP Ping",
"privateResourceNetworkAccess": "网络访问",
"privateResourceNetworkAccessDescription": "控制此资源的 TCP/UDP 端口访问以及是否允许 ICMP ping。",
"hostSettings": "主机设置",
"cidrSettings": "CIDR 设置",
"createInternalResourceDialogResourceProperties": "资源属性", "createInternalResourceDialogResourceProperties": "资源属性",
"createInternalResourceDialogName": "名称", "createInternalResourceDialogName": "名称",
"createInternalResourceDialogSite": "站点", "createInternalResourceDialogSite": "站点",
@@ -2459,6 +2546,7 @@
"noRemoteExitNodesAvailableDescription": "此组织没有可用的节点。首先创建一个节点来使用本地站点。", "noRemoteExitNodesAvailableDescription": "此组织没有可用的节点。首先创建一个节点来使用本地站点。",
"exitNode": "出口节点", "exitNode": "出口节点",
"country": "国家", "country": "国家",
"countryIsNot": "不在国家",
"rulesMatchCountry": "当前基于源 IP", "rulesMatchCountry": "当前基于源 IP",
"region": "地区", "region": "地区",
"selectRegion": "选择区域", "selectRegion": "选择区域",
@@ -2668,6 +2756,9 @@
"twoFactorSetupRequired": "需要设置双因素身份验证。 请通过 {dashboardUrl}/auth/login 再次登录以完成此步骤。 然后,回到这里。", "twoFactorSetupRequired": "需要设置双因素身份验证。 请通过 {dashboardUrl}/auth/login 再次登录以完成此步骤。 然后,回到这里。",
"additionalSecurityRequired": "需要额外的安全", "additionalSecurityRequired": "需要额外的安全",
"organizationRequiresAdditionalSteps": "这个组织需要额外的安全步骤才能访问资源。", "organizationRequiresAdditionalSteps": "这个组织需要额外的安全步骤才能访问资源。",
"sessionExpired": "会话已过期",
"sessionExpiredReauthRequired": "根据贵组织的安全策略,您的会话已过期。请重新认证以继续。",
"reauthenticate": "重新认证",
"completeTheseSteps": "完成这些步骤", "completeTheseSteps": "完成这些步骤",
"enableTwoFactorAuthentication": "启用两步验证", "enableTwoFactorAuthentication": "启用两步验证",
"completeSecuritySteps": "完成安全步骤", "completeSecuritySteps": "完成安全步骤",
@@ -3177,7 +3268,7 @@
"editInternalResourceDialogAddUsers": "添加用户", "editInternalResourceDialogAddUsers": "添加用户",
"editInternalResourceDialogAddClients": "添加客户端", "editInternalResourceDialogAddClients": "添加客户端",
"editInternalResourceDialogDestinationLabel": "目标", "editInternalResourceDialogDestinationLabel": "目标",
"editInternalResourceDialogDestinationDescription": "指定内部资源的目标地址。根据选择的模式,这可以是主机名、IP地址或CIDR范围。可选的,设置一个内部DNS别名以便于识别。", "editInternalResourceDialogDestinationDescription": "选择该资源运行位置及客户端访问方式",
"internalResourceFormMultiSiteRoutingHelp": "选择多个站点可以实现高可用性的弹性路由和故障转移。", "internalResourceFormMultiSiteRoutingHelp": "选择多个站点可以实现高可用性的弹性路由和故障转移。",
"internalResourceFormMultiSiteRoutingHelpLearnMore": "了解更多", "internalResourceFormMultiSiteRoutingHelpLearnMore": "了解更多",
"editInternalResourceDialogPortRestrictionsDescription": "限制访问特定的TCP/UDP端口或允许/阻止所有端口。", "editInternalResourceDialogPortRestrictionsDescription": "限制访问特定的TCP/UDP端口或允许/阻止所有端口。",
@@ -3571,18 +3662,24 @@
"memberPortalResourceDisabled": "资源已禁用", "memberPortalResourceDisabled": "资源已禁用",
"memberPortalShowingResources": "显示 {start}-{end} 共 {total} 个资源", "memberPortalShowingResources": "显示 {start}-{end} 共 {total} 个资源",
"resourceLauncherTitle": "资源启动器", "resourceLauncherTitle": "资源启动器",
"resourceLauncherDescription": "查看资源详情并从一个地方启动它们", "resourceSidebarLauncherTitle": "启动器",
"resourceLauncherSearchPlaceholder": "搜索所有站点……", "resourceLauncherDescription": "查看所有可用资源,并从一个中央集中访问它们",
"resourceLauncherSearchPlaceholder": "搜索您的资源……",
"resourceLauncherDefaultView": "默认", "resourceLauncherDefaultView": "默认",
"resourceLauncherSaveView": "保存视图", "resourceLauncherSaveView": "保存视图",
"resourceLauncherSaveToCurrentView": "保存至当前视图", "resourceLauncherSaveToCurrentView": "保存至当前视图",
"resourceLauncherSaveDefaultPersonal": "保存到我的",
"resourceLauncherResetView": "重置视图", "resourceLauncherResetView": "重置视图",
"resourceLauncherResetSystemDefault": "重置为系统默认",
"resourceLauncherSystemDefaultRestored": "系统默认已恢复",
"resourceLauncherSystemDefaultRestoredDescription": "已将默认视图重置为原始设置。",
"resourceLauncherSaveAsNewView": "另存为新视图", "resourceLauncherSaveAsNewView": "另存为新视图",
"resourceLauncherSaveAsNewViewDescription": "为此视图命名,以便保存您当前的过滤器和布局。", "resourceLauncherSaveAsNewViewDescription": "为此视图命名,以便保存您当前的过滤器和布局。",
"resourceLauncherSaveForEveryone": "为所有人保存", "resourceLauncherSaveForEveryone": "为所有人保存",
"resourceLauncherSaveForEveryoneDescription": "与所有组织成员共享此视图。如果未选中,此视图仅对您可见。", "resourceLauncherSaveForEveryoneDescription": "与所有组织成员共享此视图。如果未选中,此视图仅对您可见。",
"resourceLauncherMakePersonal": "创建个人", "resourceLauncherMakePersonal": "创建个人",
"resourceLauncherFilter": "筛选", "resourceLauncherFilter": "筛选",
"resourceLauncherFilterWithCount": "筛选,已应用{count}个",
"resourceLauncherSort": "排序", "resourceLauncherSort": "排序",
"resourceLauncherSortAscending": "按升序排序", "resourceLauncherSortAscending": "按升序排序",
"resourceLauncherSortDescending": "按降序排序", "resourceLauncherSortDescending": "按降序排序",
@@ -3590,6 +3687,7 @@
"resourceLauncherGroupBy": "按组", "resourceLauncherGroupBy": "按组",
"resourceLauncherGroupBySite": "站点", "resourceLauncherGroupBySite": "站点",
"resourceLauncherGroupByLabel": "标签", "resourceLauncherGroupByLabel": "标签",
"resourceLauncherGroupByNone": "无",
"resourceLauncherLayout": "布局", "resourceLauncherLayout": "布局",
"resourceLauncherLayoutGrid": "网格", "resourceLauncherLayoutGrid": "网格",
"resourceLauncherLayoutList": "列表", "resourceLauncherLayoutList": "列表",
@@ -3597,8 +3695,20 @@
"resourceLauncherShowSiteTags": "显示站点标签", "resourceLauncherShowSiteTags": "显示站点标签",
"resourceLauncherShowRecents": "显示最近使用", "resourceLauncherShowRecents": "显示最近使用",
"resourceLauncherDeleteView": "删除视图", "resourceLauncherDeleteView": "删除视图",
"resourceLauncherDeleteViewTitle": "删除视图",
"resourceLauncherDeleteViewQuestion": "您确定要删除此启动器视图吗?",
"resourceLauncherDeleteViewConfirm": "删除视图",
"resourceLauncherViewAsAdmin": "以管理员身份查看", "resourceLauncherViewAsAdmin": "以管理员身份查看",
"resourceLauncherResourceDetailsDescription": "查看此资源的详细信息。", "resourceLauncherResourceDetailsDescription": "此资源的连接信息和状态。",
"resourceLauncherResourceDetails": "资源详情",
"resourceLauncherAuthMethodsDescription": "此资源启用的身份验证方法。",
"resourceLauncherPrivateClientRequired": "请在您的设备上连接客户端以私密访问此资源。",
"resourceLauncherPrivateClientRequiredTitle": "需要客户端连接",
"resourceLauncherDownloadClient": "下载客户端",
"resourceLauncherFailedToLoadDetails": "无法加载资源详细信息。您可能已经没有权限访问此资源。",
"resourceLauncherNoPortRestrictions": "无端口限制",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "未标记", "resourceLauncherUnlabeled": "未标记",
"resourceLauncherNoSite": "无站点", "resourceLauncherNoSite": "无站点",
"resourceLauncherNoResourcesInGroup": "此组中没有资源", "resourceLauncherNoResourcesInGroup": "此组中没有资源",
@@ -3607,6 +3717,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "未找到资源", "resourceLauncherEmptyStateNoResultsTitle": "未找到资源",
"resourceLauncherEmptyStateNoResultsDescription": "没有资源与您当前的搜索或过滤器匹配。尝试调整它们以找到您想要的内容。", "resourceLauncherEmptyStateNoResultsDescription": "没有资源与您当前的搜索或过滤器匹配。尝试调整它们以找到您想要的内容。",
"resourceLauncherEmptyStateNoResultsWithQuery": "没有资源匹配\"{query}\"。尝试调整您的搜索或清除过滤器以查看所有资源。", "resourceLauncherEmptyStateNoResultsWithQuery": "没有资源匹配\"{query}\"。尝试调整您的搜索或清除过滤器以查看所有资源。",
"resourceLauncherSearchFirstTitle": "搜索或筛选以浏览",
"resourceLauncherSearchFirstDescription": "您可以访问许多资源。使用搜索或按站点或标签筛选以查找所需内容。",
"resourceLauncherSiteGroupingDisabled": "在此规模下无法进行站点分组。通过站点进行筛选以分组更小的集合。",
"resourceLauncherLabelGroupingDisabled": "在此规模下无法进行标签分组。",
"resourceLauncherCompactModeHint": "显示简化列表以便快速浏览。使用搜索或筛选器缩小结果范围。",
"resourceLauncherCompactGroupingHint": "应用站点或标签筛选器以启用分组。",
"resourceLauncherCopiedToClipboard": "已复制到剪贴板", "resourceLauncherCopiedToClipboard": "已复制到剪贴板",
"resourceLauncherCopiedAccessDescription": "资源访问权限已复制到剪贴板。", "resourceLauncherCopiedAccessDescription": "资源访问权限已复制到剪贴板。",
"resourceLauncherViewNamePlaceholder": "查看名称", "resourceLauncherViewNamePlaceholder": "查看名称",
+21 -2
View File
@@ -999,7 +999,17 @@ export const resourceRules = pgTable("resourceRules", {
enabled: boolean("enabled").notNull().default(true), enabled: boolean("enabled").notNull().default(true),
priority: integer("priority").notNull(), priority: integer("priority").notNull(),
action: varchar("action").notNull(), // ACCEPT, DROP, PASS action: varchar("action").notNull(), // ACCEPT, DROP, PASS
match: varchar("match").notNull(), // CIDR, PATH, IP match: varchar("match")
.$type<
| "CIDR"
| "PATH"
| "IP"
| "COUNTRY"
| "COUNTRY_IS_NOT"
| "ASN"
| "REGION"
>()
.notNull(), // CIDR, PATH, IP
value: varchar("value").notNull() value: varchar("value").notNull()
}); });
@@ -1014,7 +1024,15 @@ export const resourcePolicyRules = pgTable("resourcePolicyRules", {
priority: integer("priority").notNull(), priority: integer("priority").notNull(),
action: varchar("action").$type<"ACCEPT" | "DROP" | "PASS">().notNull(), action: varchar("action").$type<"ACCEPT" | "DROP" | "PASS">().notNull(),
match: varchar("match") match: varchar("match")
.$type<"CIDR" | "PATH" | "IP" | "COUNTRY" | "ASN" | "REGION">() .$type<
| "CIDR"
| "PATH"
| "IP"
| "COUNTRY"
| "COUNTRY_IS_NOT"
| "ASN"
| "REGION"
>()
.notNull(), .notNull(),
value: varchar("value").notNull() value: varchar("value").notNull()
}); });
@@ -1594,3 +1612,4 @@ export type LauncherView = InferSelectModel<typeof launcherViews>;
export type ResourcePolicy = InferSelectModel<typeof resourcePolicies>; export type ResourcePolicy = InferSelectModel<typeof resourcePolicies>;
export type RolePolicy = InferSelectModel<typeof rolePolicies>; export type RolePolicy = InferSelectModel<typeof rolePolicies>;
export type UserPolicy = InferSelectModel<typeof userPolicies>; export type UserPolicy = InferSelectModel<typeof userPolicies>;
export type ResourcePolicyRule = InferSelectModel<typeof resourcePolicyRules>;
+20 -2
View File
@@ -1224,7 +1224,17 @@ export const resourceRules = sqliteTable("resourceRules", {
enabled: integer("enabled", { mode: "boolean" }).notNull().default(true), enabled: integer("enabled", { mode: "boolean" }).notNull().default(true),
priority: integer("priority").notNull(), priority: integer("priority").notNull(),
action: text("action").notNull(), // ACCEPT, DROP, PASS action: text("action").notNull(), // ACCEPT, DROP, PASS
match: text("match").notNull(), // CIDR, PATH, IP match: text("match")
.$type<
| "CIDR"
| "PATH"
| "IP"
| "COUNTRY"
| "COUNTRY_IS_NOT"
| "ASN"
| "REGION"
>()
.notNull(), // CIDR, PATH, IP
value: text("value").notNull() value: text("value").notNull()
}); });
@@ -1271,7 +1281,15 @@ export const resourcePolicyRules = sqliteTable("resourcePolicyRules", {
priority: integer("priority").notNull(), priority: integer("priority").notNull(),
action: text("action").$type<"ACCEPT" | "DROP" | "PASS">().notNull(), action: text("action").$type<"ACCEPT" | "DROP" | "PASS">().notNull(),
match: text("match") match: text("match")
.$type<"CIDR" | "PATH" | "IP" | "COUNTRY" | "ASN" | "REGION">() .$type<
| "CIDR"
| "PATH"
| "IP"
| "COUNTRY"
| "COUNTRY_IS_NOT"
| "ASN"
| "REGION"
>()
.notNull(), .notNull(),
value: text("value").notNull() value: text("value").notNull()
}); });
+32 -34
View File
@@ -1,56 +1,54 @@
import { isLicensedOrSubscribed } from "#dynamic/lib/isLicencedOrSubscribed";
import { createCertificate } from "#dynamic/routers/certificates/createCertificate";
import { hashPassword } from "@server/auth/password";
import { generateId } from "@server/auth/sessions/app";
import { build } from "@server/build";
import { import {
domains,
domainNamespaces, domainNamespaces,
domains,
orgDomains, orgDomains,
Resource, Resource,
resourceHeaderAuth, resourceHeaderAuth,
resourceHeaderAuthExtendedCompatibility, resourceHeaderAuthExtendedCompatibility,
resourcePassword,
resourcePincode, resourcePincode,
resourcePolicies,
resourcePolicyHeaderAuth,
resourcePolicyPassword,
resourcePolicyPincode,
resourcePolicyRules,
resourcePolicyWhiteList,
resourceRules, resourceRules,
resources,
resourceWhitelist, resourceWhitelist,
roleActions, roleActions,
rolePolicies,
roleResources, roleResources,
roles, roles,
sites,
Target, Target,
TargetHealthCheck, TargetHealthCheck,
targetHealthCheck, targetHealthCheck,
targets,
Transaction, Transaction,
userOrgs, userOrgs,
userPolicies,
userResources, userResources,
users, users,
resourcePolicies, type ResourceRule
resourcePolicyPassword,
resourcePolicyPincode,
resourcePolicyHeaderAuth,
resourcePolicyRules,
resourcePolicyWhiteList,
rolePolicies,
userPolicies
} from "@server/db"; } from "@server/db";
import { resources, targets, sites } from "@server/db";
import { eq, and, asc, or, ne, count, isNotNull } from "drizzle-orm";
import {
Config,
ConfigSchema,
isTargetsOnlyResource,
TargetData
} from "./types";
import logger from "@server/logger";
import { createCertificate } from "#dynamic/routers/certificates/createCertificate";
import { pickPort } from "@server/routers/target/helpers";
import { resourcePassword } from "@server/db";
import { getUniqueResourcePolicyName } from "@server/db/names"; import { getUniqueResourcePolicyName } from "@server/db/names";
import { hashPassword } from "@server/auth/password";
import { isValidCIDR, isValidIP, isValidUrlGlobPattern } from "../validators";
import { isValidRegionId } from "@server/db/regions"; import { isValidRegionId } from "@server/db/regions";
import { isLicensedOrSubscribed } from "#dynamic/lib/isLicencedOrSubscribed";
import { fireHealthCheckUnknownAlert } from "@server/lib/alerts"; import { fireHealthCheckUnknownAlert } from "@server/lib/alerts";
import { tierMatrix } from "../billing/tierMatrix";
import { defaultRoleAllowedActions } from "@server/routers/role/createRole";
import { build } from "@server/build";
import { encrypt } from "@server/lib/crypto";
import { generateId } from "@server/auth/sessions/app";
import serverConfig from "@server/lib/config"; import serverConfig from "@server/lib/config";
import { encrypt } from "@server/lib/crypto";
import logger from "@server/logger";
import { defaultRoleAllowedActions } from "@server/routers/role/createRole";
import { pickPort } from "@server/routers/target/helpers";
import { and, asc, eq, isNotNull, ne, or } from "drizzle-orm";
import { tierMatrix } from "../billing/tierMatrix";
import { isValidCIDR, isValidIP, isValidUrlGlobPattern } from "../validators";
import { Config, isTargetsOnlyResource, TargetData } from "./types";
import HttpCode from "@server/types/HttpCode"; import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors"; import createHttpError from "http-errors";
import next from "next"; import next from "next";
@@ -909,7 +907,7 @@ export async function updatePublicResources(
.update(resourceRules) .update(resourceRules)
.set({ .set({
action: getRuleAction(rule.action), action: getRuleAction(rule.action),
match: rule.match.toUpperCase(), match: rule.match.toUpperCase() as ResourceRule["match"],
value: getRuleValue( value: getRuleValue(
rule.match.toUpperCase(), rule.match.toUpperCase(),
rule.value rule.value
@@ -928,7 +926,7 @@ export async function updatePublicResources(
await trx.insert(resourceRules).values({ await trx.insert(resourceRules).values({
resourceId: existingResource.resourceId, resourceId: existingResource.resourceId,
action: getRuleAction(rule.action), action: getRuleAction(rule.action),
match: rule.match.toUpperCase(), match: rule.match.toUpperCase() as ResourceRule["match"],
value: getRuleValue( value: getRuleValue(
rule.match.toUpperCase(), rule.match.toUpperCase(),
rule.value rule.value
@@ -1011,7 +1009,7 @@ export async function updatePublicResources(
} else { } else {
// create a brand new resource // create a brand new resource
if (build == "saas") { if (build === "saas") {
const usage = await usageService.getUsage( const usage = await usageService.getUsage(
orgId, orgId,
LimitId.PUBLIC_RESOURCES LimitId.PUBLIC_RESOURCES
@@ -1292,7 +1290,7 @@ export async function updatePublicResources(
await trx.insert(resourceRules).values({ await trx.insert(resourceRules).values({
resourceId: newResource.resourceId, resourceId: newResource.resourceId,
action: getRuleAction(rule.action), action: getRuleAction(rule.action),
match: rule.match.toUpperCase(), match: rule.match.toUpperCase() as ResourceRule["match"],
value: getRuleValue( value: getRuleValue(
rule.match.toUpperCase(), rule.match.toUpperCase(),
rule.value rule.value
@@ -1355,7 +1353,7 @@ function getRuleAction(input: string) {
function getRuleValue(match: string, value: string) { function getRuleValue(match: string, value: string) {
// if the match is a country, uppercase the value // if the match is a country, uppercase the value
if (match == "COUNTRY") { if (match === "COUNTRY" || match === "COUNTRY_IS_NOT") {
return value.toUpperCase(); return value.toUpperCase();
} }
return value; return value;
+2 -1
View File
@@ -347,12 +347,13 @@ function getRuleAction(input: string): "ACCEPT" | "DROP" | "PASS" {
function getRuleMatch( function getRuleMatch(
input: string input: string
): "CIDR" | "IP" | "PATH" | "COUNTRY" | "ASN" | "REGION" { ): "CIDR" | "IP" | "PATH" | "COUNTRY" | "COUNTRY_IS_NOT" | "ASN" | "REGION" {
return input.toUpperCase() as return input.toUpperCase() as
| "CIDR" | "CIDR"
| "IP" | "IP"
| "PATH" | "PATH"
| "COUNTRY" | "COUNTRY"
| "COUNTRY_IS_NOT"
| "ASN" | "ASN"
| "REGION"; | "REGION";
} }
+1 -1
View File
@@ -2,7 +2,7 @@ import path from "path";
import { fileURLToPath } from "url"; import { fileURLToPath } from "url";
// This is a placeholder value replaced by the build process // This is a placeholder value replaced by the build process
export const APP_VERSION = "1.19.0"; export const APP_VERSION = "1.20.0";
export const __FILENAME = fileURLToPath(import.meta.url); export const __FILENAME = fileURLToPath(import.meta.url);
export const __DIRNAME = path.dirname(__FILENAME); export const __DIRNAME = path.dirname(__FILENAME);
+2
View File
@@ -74,6 +74,7 @@ export const RESOURCE_RULE_MATCH_TYPES = [
"IP", "IP",
"PATH", "PATH",
"COUNTRY", "COUNTRY",
"COUNTRY_IS_NOT",
"ASN", "ASN",
"REGION" "REGION"
] as const; ] as const;
@@ -96,6 +97,7 @@ export function getResourceRuleValueValidationError(
case "REGION": case "REGION":
return isValidRegionId(value) ? null : "Invalid region ID provided"; return isValidRegionId(value) ? null : "Invalid region ID provided";
case "COUNTRY": case "COUNTRY":
case "COUNTRY_IS_NOT":
return COUNTRIES.some((country) => country.code === value) return COUNTRIES.some((country) => country.code === value)
? null ? null
: "Invalid country code provided"; : "Invalid country code provided";
+1
View File
@@ -1695,6 +1695,7 @@ hybridRouter.get(
) { ) {
for (const rule of rules) { for (const rule of rules) {
if (rule.match == "COUNTRY") { if (rule.match == "COUNTRY") {
// @ts-expect-error this is for backward compatibility
rule.match = "GEOIP"; rule.match = "GEOIP";
} }
} }
+8 -2
View File
@@ -1054,7 +1054,10 @@ async function checkRules(
isPathAllowed(rule.value, path) isPathAllowed(rule.value, path)
) { ) {
return rule.action as any; return rule.action as any;
} else if (clientIp && rule.match == "COUNTRY") { } else if (
clientIp &&
(rule.match === "COUNTRY" || rule.match === "COUNTRY_IS_NOT")
) {
// COUNTRY=ALL should not affect local/private/CGNAT addresses. // COUNTRY=ALL should not affect local/private/CGNAT addresses.
if ( if (
rule.value.toUpperCase() === "ALL" && rule.value.toUpperCase() === "ALL" &&
@@ -1063,7 +1066,10 @@ async function checkRules(
continue; continue;
} }
if (await isIpInGeoIP(ipCC, rule.value)) { const inCountry = await isIpInGeoIP(ipCC, rule.value);
const matched = rule.match === "COUNTRY" ? inCountry : !inCountry;
if (matched) {
return rule.action as any; return rule.action as any;
} }
} else if (clientIp && rule.match == "ASN") { } else if (clientIp && rule.match == "ASN") {
-6
View File
@@ -895,12 +895,6 @@ authenticated.delete(
user.removeUserOrg user.removeUserOrg
); );
// authenticated.put(
// "/newt",
// verifyApiKeyHasAction(ActionsEnum.createNewt),
// newt.createNewt
// );
authenticated.get( authenticated.get(
`/org/:orgId/api-keys`, `/org/:orgId/api-keys`,
verifyApiKeyIsRoot, verifyApiKeyIsRoot,
@@ -1,11 +1,10 @@
import { createHash } from "node:crypto"; import { createHash } from "node:crypto";
import { alias, db } from "@server/db"; import { db } from "@server/db";
import { import {
exitNodes, exitNodes,
labels, labels,
launcherViews, launcherViews,
resourceLabels, resourceLabels,
resourcePolicies,
resources, resources,
rolePolicies, rolePolicies,
roleResources, roleResources,
@@ -32,7 +31,6 @@ import {
inArray, inArray,
isNull, isNull,
like, like,
not,
or, or,
sql, sql,
type SQL type SQL
@@ -136,48 +134,6 @@ function launcherAccessibleIdsCacheKey(
return `launcherAccessibleIds:${orgId}:${userId}:${rolesKey}`; return `launcherAccessibleIds:${orgId}:${userId}:${rolesKey}`;
} }
async function fetchOrgNonSsoPublicResourceIds(
orgId: string
): Promise<number[]> {
const sharedPolicy = alias(resourcePolicies, "sharedPolicy");
const defaultPolicy = alias(resourcePolicies, "defaultPolicy");
const effectiveSso = sql<boolean>`
COALESCE(
CASE
WHEN ${sharedPolicy.resourcePolicyId} IS NOT NULL THEN ${sharedPolicy.sso}
ELSE ${defaultPolicy.sso}
END,
false
)
`;
const rows = await db
.select({ resourceId: resources.resourceId })
.from(resources)
.leftJoin(
sharedPolicy,
eq(sharedPolicy.resourcePolicyId, resources.resourcePolicyId)
)
.leftJoin(
defaultPolicy,
eq(
defaultPolicy.resourcePolicyId,
resources.defaultResourcePolicyId
)
)
.where(
and(
eq(resources.orgId, orgId),
eq(resources.enabled, true),
eq(resources.blockAccess, false),
not(effectiveSso)
)
);
return rows.map((row) => row.resourceId);
}
async function resolveAccessibleIdsUncached( async function resolveAccessibleIdsUncached(
orgId: string, orgId: string,
userId: string, userId: string,
@@ -189,8 +145,7 @@ async function resolveAccessibleIdsUncached(
directPolicyResourceResults, directPolicyResourceResults,
rolePolicyResourceResults, rolePolicyResourceResults,
directSiteResourceResults, directSiteResourceResults,
roleSiteResourceResults, roleSiteResourceResults
orgNonSsoPublicResources
] = await Promise.all([ ] = await Promise.all([
db db
.select({ resourceId: userResources.resourceId }) .select({ resourceId: userResources.resourceId })
@@ -259,8 +214,7 @@ async function resolveAccessibleIdsUncached(
}) })
.from(roleSiteResources) .from(roleSiteResources)
.where(inArray(roleSiteResources.roleId, userRoleIds)) .where(inArray(roleSiteResources.roleId, userRoleIds))
: Promise.resolve([]), : Promise.resolve([])
fetchOrgNonSsoPublicResourceIds(orgId)
]); ]);
return { return {
@@ -269,8 +223,7 @@ async function resolveAccessibleIdsUncached(
...directResources.map((r) => r.resourceId), ...directResources.map((r) => r.resourceId),
...roleResourceResults.map((r) => r.resourceId), ...roleResourceResults.map((r) => r.resourceId),
...directPolicyResourceResults.map((r) => r.resourceId), ...directPolicyResourceResults.map((r) => r.resourceId),
...rolePolicyResourceResults.map((r) => r.resourceId), ...rolePolicyResourceResults.map((r) => r.resourceId)
...orgNonSsoPublicResources
]) ])
), ),
siteResourceIds: Array.from( siteResourceIds: Array.from(
@@ -27,6 +27,7 @@ const resourceRuleMatchSchema = z.enum([
"IP", "IP",
"PATH", "PATH",
"COUNTRY", "COUNTRY",
"COUNTRY_IS_NOT",
"ASN", "ASN",
"REGION" "REGION"
]); ]);
@@ -144,6 +145,7 @@ export async function updateResourceRule(
| "IP" | "IP"
| "PATH" | "PATH"
| "COUNTRY" | "COUNTRY"
| "COUNTRY_IS_NOT"
| "ASN" | "ASN"
| "REGION"; | "REGION";
@@ -161,7 +161,8 @@ const createSiteResourceSchema = z
return true; return true;
} }
return ( return (
data.destination !== undefined && data.destination.trim() !== "" data.destination !== undefined &&
data.destination?.trim() !== ""
); );
}, },
{ {
@@ -157,7 +157,8 @@ const updateSiteResourceSchema = z
return true; return true;
} }
return ( return (
data.destination !== undefined && data.destination.trim() !== "" data.destination !== undefined &&
data.destination?.trim() !== ""
); );
}, },
{ {
@@ -616,10 +617,7 @@ export async function updateSiteResource(
await trx await trx
.delete(roleSiteResources) .delete(roleSiteResources)
.where( .where(
eq( eq(roleSiteResources.siteResourceId, siteResourceId)
roleSiteResources.siteResourceId,
siteResourceId
)
); );
} }
+3 -1
View File
@@ -26,6 +26,7 @@ import m17 from "./scriptsPg/1.18.0";
import m18 from "./scriptsPg/1.18.3"; import m18 from "./scriptsPg/1.18.3";
import m19 from "./scriptsPg/1.18.4"; import m19 from "./scriptsPg/1.18.4";
import m20 from "./scriptsPg/1.19.0"; import m20 from "./scriptsPg/1.19.0";
import m21 from "./scriptsPg/1.20.0";
// THIS CANNOT IMPORT ANYTHING FROM THE SERVER // THIS CANNOT IMPORT ANYTHING FROM THE SERVER
// EXCEPT FOR THE DATABASE AND THE SCHEMA // EXCEPT FOR THE DATABASE AND THE SCHEMA
@@ -51,7 +52,8 @@ const migrations = [
{ version: "1.18.0", run: m17 }, { version: "1.18.0", run: m17 },
{ version: "1.18.3", run: m18 }, { version: "1.18.3", run: m18 },
{ version: "1.18.4", run: m19 }, { version: "1.18.4", run: m19 },
{ version: "1.19.0", run: m20 } { version: "1.19.0", run: m20 },
{ version: "1.20.0", run: m21 }
// Add new migrations here as they are created // Add new migrations here as they are created
] as { ] as {
version: string; version: string;
+2 -2
View File
@@ -45,7 +45,7 @@ import m39 from "./scriptsSqlite/1.18.3";
import m40 from "./scriptsSqlite/1.18.4"; import m40 from "./scriptsSqlite/1.18.4";
import m41 from "./scriptsSqlite/1.19.0"; import m41 from "./scriptsSqlite/1.19.0";
import m42 from "./scriptsSqlite/1.19.1"; import m42 from "./scriptsSqlite/1.19.1";
import m43 from "./scriptsSqlite/1.19.5"; import m43 from "./scriptsSqlite/1.20.0";
// THIS CANNOT IMPORT ANYTHING FROM THE SERVER // THIS CANNOT IMPORT ANYTHING FROM THE SERVER
// EXCEPT FOR THE DATABASE AND THE SCHEMA // EXCEPT FOR THE DATABASE AND THE SCHEMA
@@ -89,7 +89,7 @@ const migrations = [
{ version: "1.18.4", run: m40 }, { version: "1.18.4", run: m40 },
{ version: "1.19.0", run: m41 }, { version: "1.19.0", run: m41 },
{ version: "1.19.1", run: m42 }, { version: "1.19.1", run: m42 },
{ version: "1.19.5", run: m43 } { version: "1.20.0", run: m43 }
// Add new migrations here as they are created // Add new migrations here as they are created
] as const; ] as const;
+104
View File
@@ -0,0 +1,104 @@
import { db } from "@server/db/pg/driver";
import { sql } from "drizzle-orm";
const version = "1.20.0";
export default async function migration() {
console.log(`Running setup script ${version}...`);
try {
await db.execute(sql`BEGIN`);
await db.execute(sql`
CREATE TABLE "remoteExitNodePreferenceLabels" (
"remoteExitNodePreferenceLabelId" serial PRIMARY KEY NOT NULL,
"remoteExitNodeId" varchar NOT NULL,
"labelId" integer NOT NULL,
CONSTRAINT "remote_exit_node_preference_label_uniq" UNIQUE("remoteExitNodeId","labelId")
);
`);
await db.execute(sql`
CREATE TABLE "remoteExitNodeResources" (
"remoteExitNodeResourceId" serial PRIMARY KEY NOT NULL,
"remoteExitNodeId" varchar NOT NULL,
"destination" varchar NOT NULL
);
`);
await db.execute(sql`
CREATE TABLE "launcherViews" (
"viewId" serial PRIMARY KEY NOT NULL,
"orgId" varchar NOT NULL,
"userId" varchar,
"name" varchar NOT NULL,
"config" text NOT NULL,
"isDefault" boolean DEFAULT false NOT NULL,
"createdAt" varchar NOT NULL,
"updatedAt" varchar NOT NULL
);
`);
await db.execute(
sql`ALTER TABLE "domains" ADD COLUMN "lastCheckedAt" integer;`
);
await db.execute(sql`
ALTER TABLE "remoteExitNodePreferenceLabels" ADD CONSTRAINT "remoteExitNodePreferenceLabels_remoteExitNodeId_remoteExitNode_id_fk" FOREIGN KEY ("remoteExitNodeId") REFERENCES "public"."remoteExitNode"("id") ON DELETE cascade ON UPDATE no action;
`);
await db.execute(sql`
ALTER TABLE "remoteExitNodePreferenceLabels" ADD CONSTRAINT "remoteExitNodePreferenceLabels_labelId_labels_labelId_fk" FOREIGN KEY ("labelId") REFERENCES "public"."labels"("labelId") ON DELETE cascade ON UPDATE no action;
`);
await db.execute(sql`
ALTER TABLE "remoteExitNodeResources" ADD CONSTRAINT "remoteExitNodeResources_remoteExitNodeId_remoteExitNode_id_fk" FOREIGN KEY ("remoteExitNodeId") REFERENCES "public"."remoteExitNode"("id") ON DELETE cascade ON UPDATE no action;
`);
await db.execute(sql`
ALTER TABLE "launcherViews" ADD CONSTRAINT "launcherViews_orgId_orgs_orgId_fk" FOREIGN KEY ("orgId") REFERENCES "public"."orgs"("orgId") ON DELETE cascade ON UPDATE no action;
`);
await db.execute(sql`
ALTER TABLE "launcherViews" ADD CONSTRAINT "launcherViews_userId_user_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action;
`);
await db.execute(sql`
CREATE INDEX "idx_clients_orgid_niceid" ON "clients" USING btree ("orgId","niceId");
`);
await db.execute(sql`
CREATE INDEX "idx_networks_orgid" ON "networks" USING btree ("orgId");
`);
await db.execute(sql`
CREATE INDEX "idx_resourcepolicies_orgid_niceid" ON "resourcePolicies" USING btree ("orgId","niceId");
`);
await db.execute(sql`
CREATE INDEX "idx_resources_niceid" ON "resources" USING btree ("niceId");
`);
await db.execute(sql`
CREATE INDEX "idx_resources_orgid_niceid" ON "resources" USING btree ("orgId","niceId");
`);
await db.execute(sql`
CREATE INDEX "idx_siteresources_orgid_niceid" ON "siteResources" USING btree ("orgId","niceId");
`);
await db.execute(sql`
CREATE INDEX "idx_sites_orgid_niceid" ON "sites" USING btree ("orgId","niceId");
`);
await db.execute(sql`COMMIT`);
console.log("Migrated database");
} catch (e) {
await db.execute(sql`ROLLBACK`);
console.log("Unable to migrate database");
console.log(e);
throw e;
}
console.log(`${version} migration complete`);
}
@@ -2,7 +2,7 @@ import { APP_PATH } from "@server/lib/consts";
import Database from "better-sqlite3"; import Database from "better-sqlite3";
import path from "path"; import path from "path";
const version = "1.19.5"; const version = "1.20.0";
export default async function migration() { export default async function migration() {
console.log(`Running setup script ${version}...`); console.log(`Running setup script ${version}...`);
@@ -92,6 +92,64 @@ export default async function migration() {
db.prepare( db.prepare(
`ALTER TABLE 'resourceSessions_new' RENAME TO 'resourceSessions';` `ALTER TABLE 'resourceSessions_new' RENAME TO 'resourceSessions';`
).run(); ).run();
db.prepare(
`
CREATE TABLE 'remoteExitNodePreferenceLabels' (
'remoteExitNodePreferenceLabelId' integer PRIMARY KEY AUTOINCREMENT NOT NULL,
'remoteExitNodeId' text NOT NULL,
'labelId' integer NOT NULL,
FOREIGN KEY ('remoteExitNodeId') REFERENCES 'remoteExitNode'('id') ON UPDATE no action ON DELETE cascade,
FOREIGN KEY ('labelId') REFERENCES 'labels'('labelId') ON UPDATE no action ON DELETE cascade
);
`
).run();
db.prepare(
`
CREATE UNIQUE INDEX 'remote_exit_node_preference_label_uniq' ON 'remoteExitNodePreferenceLabels' ('remoteExitNodeId','labelId');
`
).run();
db.prepare(
`
CREATE TABLE 'remoteExitNodeResources' (
'remoteExitNodeResourceId' integer PRIMARY KEY AUTOINCREMENT NOT NULL,
'remoteExitNodeId' text NOT NULL,
'destination' text NOT NULL,
FOREIGN KEY ('remoteExitNodeId') REFERENCES 'remoteExitNode'('id') ON UPDATE no action ON DELETE cascade
);
`
).run();
db.prepare(
`
CREATE TABLE 'launcherViews' (
'viewId' integer PRIMARY KEY AUTOINCREMENT NOT NULL,
'orgId' text NOT NULL,
'userId' text,
'name' text NOT NULL,
'config' text NOT NULL,
'isDefault' integer DEFAULT false NOT NULL,
'createdAt' text NOT NULL,
'updatedAt' text NOT NULL,
FOREIGN KEY ('orgId') REFERENCES 'orgs'('orgId') ON UPDATE no action ON DELETE cascade,
FOREIGN KEY ('userId') REFERENCES 'user'('id') ON UPDATE no action ON DELETE cascade
);
`
).run();
db.prepare(
`
ALTER TABLE 'domains' ADD 'customCertResolver' text;
`
).run();
db.prepare(
`
ALTER TABLE 'domains' ADD 'lastCheckedAt' integer;
`
).run();
})(); })();
db.pragma("foreign_keys = ON"); db.pragma("foreign_keys = ON");
+7
View File
@@ -1,9 +1,11 @@
import { Layout } from "@app/components/Layout"; import { Layout } from "@app/components/Layout";
import ResourceLauncher from "@app/components/resource-launcher/ResourceLauncher"; import ResourceLauncher from "@app/components/resource-launcher/ResourceLauncher";
import { commandBarNavSections } from "@app/app/navigation";
import { internal } from "@app/lib/api"; import { internal } from "@app/lib/api";
import { authCookieHeader } from "@app/lib/api/cookies"; import { authCookieHeader } from "@app/lib/api/cookies";
import { fetchLauncherPageData } from "@app/lib/launcherServerData"; import { fetchLauncherPageData } from "@app/lib/launcherServerData";
import { verifySession } from "@app/lib/auth/verifySession"; import { verifySession } from "@app/lib/auth/verifySession";
import { pullEnv } from "@app/lib/pullEnv";
import UserProvider from "@app/providers/UserProvider"; import UserProvider from "@app/providers/UserProvider";
import { ListUserOrgsResponse } from "@server/routers/org"; import { ListUserOrgsResponse } from "@server/routers/org";
import { GetOrgOverviewResponse } from "@server/routers/org/getOrgOverview"; import { GetOrgOverviewResponse } from "@server/routers/org/getOrgOverview";
@@ -57,6 +59,8 @@ export default async function OrgPage(props: OrgPageProps) {
} catch (e) {} } catch (e) {}
const isAdminOrOwner = Boolean(overview?.isAdmin || overview?.isOwner); const isAdminOrOwner = Boolean(overview?.isAdmin || overview?.isOwner);
const env = pullEnv();
const primaryOrg = orgs.find((o) => o.orgId === orgId)?.isPrimaryOrg;
const searchParams = new URLSearchParams(await props.searchParams); const searchParams = new URLSearchParams(await props.searchParams);
const launcherData = overview const launcherData = overview
@@ -73,6 +77,9 @@ export default async function OrgPage(props: OrgPageProps) {
orgId={orgId} orgId={orgId}
orgs={orgs} orgs={orgs}
navItems={[]} navItems={[]}
commandNavItems={commandBarNavSections(env, {
isPrimaryOrg: primaryOrg
})}
showSidebar={false} showSidebar={false}
launcherMode launcherMode
showViewAsAdmin={isAdminOrOwner} showViewAsAdmin={isAdminOrOwner}
@@ -111,7 +111,7 @@ export default function AccessControlsPage() {
if (values.roles.length === 0) { if (values.roles.length === 0) {
toast({ toast({
variant: "destructive", variant: "destructive",
title: t("accessRoleErrorAdd"), title: t("accessRoleRequired"),
description: t("accessRoleSelectPlease") description: t("accessRoleSelectPlease")
}); });
return; return;
@@ -173,15 +173,13 @@ export default function AccessControlsPage() {
if (values.roles.length === 0) { if (values.roles.length === 0) {
toast({ toast({
variant: "destructive", variant: "destructive",
title: t("accessRoleErrorAdd"), title: t("accessRoleRequired"),
description: t("accessRoleSelectPlease") description: t("accessRoleSelectPlease")
}); });
return; return;
} }
const willHaveAdminRole = values.roles.some( const willHaveAdminRole = values.roles.some((r) => r.isAdmin === true);
(r) => r.isAdmin === true
);
const isRemovingOwnAdmin = const isRemovingOwnAdmin =
sessionUser.userId === user.userId && sessionUser.userId === user.userId &&
@@ -226,7 +224,9 @@ export default function AccessControlsPage() {
<SettingsSectionForm> <SettingsSectionForm>
<Form {...form}> <Form {...form}>
<form <form
onSubmit={(e) => void handleAccessControlsSubmit(e)} onSubmit={(e) =>
void handleAccessControlsSubmit(e)
}
className="space-y-4" className="space-y-4"
id="access-controls-form" id="access-controls-form"
> >
@@ -195,9 +195,9 @@ export default function GeneralPage() {
if (agent in latestPlatformVersions) { if (agent in latestPlatformVersions) {
const agentVersion = latestPlatformVersions[agent]; const agentVersion = latestPlatformVersions[agent];
updateAvailable = semver.lt( updateAvailable = Boolean(
client.olmVersion, semver.valid(client.olmVersion) &&
agentVersion.latestVersion semver.lt(client.olmVersion, agentVersion.latestVersion)
); );
} }
} }
+4 -1
View File
@@ -12,7 +12,7 @@ import UserProvider from "@app/providers/UserProvider";
import { Layout } from "@app/components/Layout"; import { Layout } from "@app/components/Layout";
import { getTranslations } from "next-intl/server"; import { getTranslations } from "next-intl/server";
import { pullEnv } from "@app/lib/pullEnv"; import { pullEnv } from "@app/lib/pullEnv";
import { orgNavSections } from "@app/app/navigation"; import { commandBarNavSections, orgNavSections } from "@app/app/navigation";
import { getCachedOrgUser } from "@app/lib/api/getCachedOrgUser"; import { getCachedOrgUser } from "@app/lib/api/getCachedOrgUser";
export const dynamic = "force-dynamic"; export const dynamic = "force-dynamic";
@@ -82,6 +82,9 @@ export default async function SettingsLayout(props: SettingsLayoutProps) {
navItems={orgNavSections(env, { navItems={orgNavSections(env, {
isPrimaryOrg: primaryOrg isPrimaryOrg: primaryOrg
})} })}
commandNavItems={commandBarNavSections(env, {
isPrimaryOrg: primaryOrg
})}
> >
{children} {children}
</Layout> </Layout>
@@ -1,18 +1,15 @@
import PrivateResourcesBanner from "@app/components/PrivateResourcesBanner";
import type { InternalResourceRow } from "@app/components/PrivateResourcesTable"; import type { InternalResourceRow } from "@app/components/PrivateResourcesTable";
import PrivateResourcesTable from "@app/components/PrivateResourcesTable"; import PrivateResourcesTable from "@app/components/PrivateResourcesTable";
import SettingsSectionTitle from "@app/components/SettingsSectionTitle"; import SettingsSectionTitle from "@app/components/SettingsSectionTitle";
import PrivateResourcesBanner from "@app/components/PrivateResourcesBanner";
import { internal } from "@app/lib/api"; import { internal } from "@app/lib/api";
import { authCookieHeader } from "@app/lib/api/cookies"; import { authCookieHeader } from "@app/lib/api/cookies";
import { getCachedOrg } from "@app/lib/api/getCachedOrg"; import { getCachedOrg } from "@app/lib/api/getCachedOrg";
import OrgProvider from "@app/providers/OrgProvider"; import OrgProvider from "@app/providers/OrgProvider";
import type { ListResourcesResponse } from "@server/routers/resource";
import { GetSiteResponse } from "@server/routers/site/getSite";
import type { ListAllSiteResourcesByOrgResponse } from "@server/routers/siteResource"; import type { ListAllSiteResourcesByOrgResponse } from "@server/routers/siteResource";
import type ResponseT from "@server/types/Response";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import { getTranslations } from "next-intl/server";
import type { Metadata } from "next"; import type { Metadata } from "next";
import { getTranslations } from "next-intl/server";
import { redirect } from "next/navigation"; import { redirect } from "next/navigation";
export const metadata: Metadata = { export const metadata: Metadata = {
@@ -24,13 +21,6 @@ export interface ClientResourcesPageProps {
searchParams: Promise<Record<string, string>>; searchParams: Promise<Record<string, string>>;
} }
function parsePositiveInt(s: string | undefined): number | undefined {
if (!s) return undefined;
const n = Number(s);
if (!Number.isInteger(n) || n <= 0) return undefined;
return n;
}
export default async function ClientResourcesPage( export default async function ClientResourcesPage(
props: ClientResourcesPageProps props: ClientResourcesPageProps
) { ) {
@@ -39,7 +29,7 @@ export default async function ClientResourcesPage(
const searchParams = new URLSearchParams(await props.searchParams); const searchParams = new URLSearchParams(await props.searchParams);
let siteResources: ListAllSiteResourcesByOrgResponse["siteResources"] = []; let siteResources: ListAllSiteResourcesByOrgResponse["siteResources"] = [];
let pagination: ListResourcesResponse["pagination"] = { let pagination: ListAllSiteResourcesByOrgResponse["pagination"] = {
total: 0, total: 0,
page: 1, page: 1,
pageSize: 20 pageSize: 20
@@ -56,34 +46,6 @@ export default async function ClientResourcesPage(
pagination = responseData.pagination; pagination = responseData.pagination;
} catch (e) {} } catch (e) {}
const siteIdParam = parsePositiveInt(
searchParams.get("siteId") ?? undefined
);
let initialFilterSite: {
siteId: number;
name: string;
type: string;
} | null = null;
if (siteIdParam) {
try {
const siteRes = await internal.get(
`/site/${siteIdParam}`,
await authCookieHeader()
);
const s = (siteRes.data as ResponseT<GetSiteResponse>).data;
if (s && s.orgId === params.orgId) {
initialFilterSite = {
siteId: s.siteId,
name: s.name,
type: s.type
};
}
} catch {
// leave null
}
}
let org = null; let org = null;
try { try {
const res = await getCachedOrg(params.orgId); const res = await getCachedOrg(params.orgId);
@@ -154,7 +116,6 @@ export default async function ClientResourcesPage(
pageIndex: pagination.page - 1, pageIndex: pagination.page - 1,
pageSize: pagination.pageSize pageSize: pagination.pageSize
}} }}
initialFilterSite={initialFilterSite}
/> />
</OrgProvider> </OrgProvider>
</> </>
@@ -166,11 +166,13 @@ export default async function ResourceAuthPage(props: {
// If user is not compliant with org policies, show policy requirements // If user is not compliant with org policies, show policy requirements
if (orgPolicyCheck && !orgPolicyCheck.allowed && orgPolicyCheck.policies) { if (orgPolicyCheck && !orgPolicyCheck.allowed && orgPolicyCheck.policies) {
const resourceAuthPageUrl = `/auth/resource/${authInfo.resourceGuid}${redirectUrl !== authInfo.url ? `?redirect=${encodeURIComponent(redirectUrl)}` : ""}`;
return ( return (
<div className="w-full max-w-md"> <div className="w-full max-w-md">
<OrgPolicyRequired <OrgPolicyRequired
orgId={authInfo.orgId} orgId={authInfo.orgId}
policies={orgPolicyCheck.policies} policies={orgPolicyCheck.policies}
redirectAfterAuth={resourceAuthPageUrl}
/> />
</div> </div>
); );
+244 -1
View File
@@ -15,6 +15,7 @@ import {
GlobeLock, GlobeLock,
KeyRound, KeyRound,
Laptop, Laptop,
LayoutGrid,
Link as LinkIcon, Link as LinkIcon,
Logs, Logs,
MonitorUp, MonitorUp,
@@ -49,7 +50,7 @@ export const orgLangingNavItems: SidebarNavItem[] = [
{ {
title: "sidebarAccount", title: "sidebarAccount",
href: "/{orgId}", href: "/{orgId}",
icon: <User className="size-4 flex-none" /> icon: <LayoutGrid className="size-4 flex-none" />
} }
]; ];
@@ -341,3 +342,245 @@ export const adminNavSections = (env?: Env): SidebarNavSection[] => [
] ]
} }
]; ];
export type CommandBarNavSection = {
// Added from 'dev' branch
heading: string;
items: CommandBarNavItem[];
};
export type CommandBarNavItem = {
href?: string;
title: string;
icon?: React.ReactNode;
showEE?: boolean;
isBeta?: boolean;
};
export const commandBarNavSections = (
env?: Env,
options?: OrgNavSectionsOptions
): CommandBarNavSection[] => [
{
heading: "commandLauncher",
items: [
{
title: "commandResourceLauncher",
href: "/{orgId}",
icon: <LayoutGrid className="size-4 flex-none" />
}
]
},
{
heading: "network",
items: [
{
title: "commandSites",
href: "/{orgId}/settings/sites",
icon: <Plug className="size-4 flex-none" />
},
{
title: "commandProxyResources",
href: "/{orgId}/settings/resources/public",
icon: <Globe className="size-4 flex-none" />
},
{
title: "commandClientResources",
href: "/{orgId}/settings/resources/private",
icon: <GlobeLock className="size-4 flex-none" />
},
{
href: "/{orgId}/settings/clients/user",
title: "commandUserDevices",
icon: <Laptop className="size-4 flex-none" />
},
{
href: "/{orgId}/settings/clients/machine",
title: "commandMachineClients",
icon: <Server className="size-4 flex-none" />
},
...(build === "saas"
? [
{
title: "commandRemoteExitNodes",
href: "/{orgId}/settings/remote-exit-nodes",
icon: <Server className="size-4 flex-none" />
}
]
: [])
]
},
{
heading: "commandTeam",
items: [
{
title: "commandUsers",
href: "/{orgId}/settings/access/users",
icon: <User className="size-4 flex-none" />
},
{
title: "commandRoles",
href: "/{orgId}/settings/access/roles",
icon: <Users className="size-4 flex-none" />
},
{
title: "commandInvitations",
href: "/{orgId}/settings/access/invitations",
icon: <TicketCheck className="size-4 flex-none" />
}
]
},
{
heading: "accessControl",
items: [
...(!env?.flags.disableEnterpriseFeatures
? [
{
title: "commandResourcePolicies",
href: "/{orgId}/settings/policies/resources/public",
icon: <ShieldIcon className="size-4 flex-none" />
}
]
: []),
// PaidFeaturesAlert
...((build === "oss" && !env?.flags.disableEnterpriseFeatures) ||
build === "saas" ||
env?.app.identityProviderMode === "org" ||
(env?.app.identityProviderMode === undefined && build !== "oss")
? [
{
title: "commandIdentityProviders",
href: "/{orgId}/settings/idp",
icon: <Fingerprint className="size-4 flex-none" />
}
]
: []),
...(!env?.flags.disableEnterpriseFeatures
? [
{
title: "commandApprovals",
href: "/{orgId}/settings/access/approvals",
icon: <UserCog className="size-4 flex-none" />
}
]
: []),
{
title: "commandShareableLinks",
href: "/{orgId}/settings/share-links",
icon: <LinkIcon className="size-4 flex-none" />
}
]
},
{
heading: "commandLogsAndAnalytics",
items: [
{
title: "commandLogsAnalytics",
href: "/{orgId}/settings/logs/analytics",
icon: <ChartLine className="size-4 flex-none" />
},
{
title: "commandLogsRequest",
href: "/{orgId}/settings/logs/request",
icon: <SquareMousePointer className="size-4 flex-none" />
},
...(!env?.flags.disableEnterpriseFeatures
? [
{
title: "commandLogsAccess",
href: "/{orgId}/settings/logs/access",
icon: <ScanEye className="size-4 flex-none" />
},
{
title: "commandLogsAction",
href: "/{orgId}/settings/logs/action",
icon: <Logs className="size-4 flex-none" />
},
{
title: "commandLogsConnection",
href: "/{orgId}/settings/logs/connection",
icon: <Cable className="size-4 flex-none" />
},
{
title: "commandLogsStreaming",
href: "/{orgId}/settings/logs/streaming",
icon: <Unplug className="size-4 flex-none" />
}
]
: [])
]
},
{
heading: "commandManagement",
items: [
...(!env?.flags.disableEnterpriseFeatures
? [
{
title: "commandAlerting",
href: "/{orgId}/settings/alerting",
icon: <BellRing className="size-4 flex-none" />
},
{
title: "commandProvisioning",
href: "/{orgId}/settings/provisioning",
icon: <Boxes className="size-4 flex-none" />
}
]
: []),
{
title: "commandBluePrints",
href: "/{orgId}/settings/blueprints",
icon: <ReceiptText className="size-4 flex-none" />
},
{
title: "commandApiKeys",
href: "/{orgId}/settings/api-keys",
icon: <KeyRound className="size-4 flex-none" />
},
...(!env?.flags.disableEnterpriseFeatures
? [
{
title: "labels",
href: "/{orgId}/settings/labels",
icon: <TagIcon className="size-4 flex-none" />
}
]
: [])
]
},
{
heading: "commandOrganization",
items: [
{
title: "commandSettings",
href: "/{orgId}/settings/general",
icon: <Settings className="size-4 flex-none" />
},
{
title: "commandDomains",
href: "/{orgId}/settings/domains",
icon: <Globe className="size-4 flex-none" />
}
]
},
...(build === "saas" && options?.isPrimaryOrg
? [
{
heading: "commandBillingAndLicenses",
items: [
{
title: "commandBilling",
href: "/{orgId}/settings/billing",
icon: <CreditCard className="size-4 flex-none" />
},
{
title: "commandEnterpriseLicenses",
href: "/{orgId}/settings/license",
icon: <TicketCheck className="size-4 flex-none" />
}
]
}
]
: [])
];
+3 -1
View File
@@ -21,9 +21,11 @@ export default async function Page(props: {
searchParams: Promise<{ searchParams: Promise<{
redirect: string | undefined; redirect: string | undefined;
t: string | undefined; t: string | undefined;
orgs?: string | undefined;
}>; }>;
}) { }) {
const params = await props.searchParams; // this is needed to prevent static optimization const params = await props.searchParams; // this is needed to prevent static optimization
const showOrgPicker = params.orgs === "1";
const env = pullEnv(); const env = pullEnv();
@@ -106,7 +108,7 @@ export default async function Page(props: {
} }
} }
if (targetOrgId) { if (targetOrgId && !showOrgPicker) {
const targetOrg = orgs.find((org) => org.orgId === targetOrgId); const targetOrg = orgs.find((org) => org.orgId === targetOrgId);
return ( return (
<RedirectToOrg <RedirectToOrg
+1 -5
View File
@@ -39,7 +39,6 @@ export function CreateOrgLabelDialog({
const t = useTranslations(); const t = useTranslations();
const api = createApiClient(useEnvContext()); const api = createApiClient(useEnvContext());
const { isPaidUser } = usePaidStatus(); const { isPaidUser } = usePaidStatus();
const canManageLabels = isPaidUser(tierMatrix.labels);
const [isSubmitting, startTransition] = useTransition(); const [isSubmitting, startTransition] = useTransition();
async function createOrgLabel(data: { name: string; color: string }) { async function createOrgLabel(data: { name: string; color: string }) {
@@ -84,11 +83,8 @@ export function CreateOrgLabelDialog({
</CredenzaDescription> </CredenzaDescription>
</CredenzaHeader> </CredenzaHeader>
<CredenzaBody> <CredenzaBody>
<PaidFeaturesAlert tiers={tierMatrix.labels} />
<OrgLabelForm <OrgLabelForm
disabled={!canManageLabels}
onSubmit={(data) => { onSubmit={(data) => {
if (!canManageLabels) return;
startTransition(async () => createOrgLabel(data)); startTransition(async () => createOrgLabel(data));
}} }}
/> />
@@ -106,7 +102,7 @@ export function CreateOrgLabelDialog({
<Button <Button
type="submit" type="submit"
form="org-label-form" form="org-label-form"
disabled={isSubmitting || !canManageLabels} disabled={isSubmitting}
loading={isSubmitting} loading={isSubmitting}
> >
{t("labelCreate")} {t("labelCreate")}
+1 -1
View File
@@ -90,7 +90,7 @@ export default function CreateShareLinkForm({
const t = useTranslations(); const t = useTranslations();
const { data: allResources = [] } = useQuery( const { data: allResources = [] } = useQuery(
orgQueries.resources({ orgId: org?.org.orgId ?? "" }) orgQueries.proxyResources({ orgId: org?.org.orgId ?? "" })
); );
const [selectedResource, setSelectedResource] = const [selectedResource, setSelectedResource] =
+1 -6
View File
@@ -44,8 +44,6 @@ export function EditOrgLabelDialog({
}: EditOrgLabelDialogProps) { }: EditOrgLabelDialogProps) {
const t = useTranslations(); const t = useTranslations();
const api = createApiClient(useEnvContext()); const api = createApiClient(useEnvContext());
const { isPaidUser } = usePaidStatus();
const canManageLabels = isPaidUser(tierMatrix.labels);
const [isSubmitting, startTransition] = useTransition(); const [isSubmitting, startTransition] = useTransition();
async function editOrgLabel(data: { name: string; color: string }) { async function editOrgLabel(data: { name: string; color: string }) {
@@ -90,12 +88,9 @@ export function EditOrgLabelDialog({
</CredenzaDescription> </CredenzaDescription>
</CredenzaHeader> </CredenzaHeader>
<CredenzaBody> <CredenzaBody>
<PaidFeaturesAlert tiers={tierMatrix.labels} />
<OrgLabelForm <OrgLabelForm
disabled={!canManageLabels}
defaultValue={label} defaultValue={label}
onSubmit={(data) => { onSubmit={(data) => {
if (!canManageLabels) return;
startTransition(async () => editOrgLabel(data)); startTransition(async () => editOrgLabel(data));
}} }}
/> />
@@ -113,7 +108,7 @@ export function EditOrgLabelDialog({
<Button <Button
type="submit" type="submit"
form="org-label-form" form="org-label-form"
disabled={isSubmitting || !canManageLabels} disabled={isSubmitting}
loading={isSubmitting} loading={isSubmitting}
> >
{t("labelEdit")} {t("labelEdit")}
+61 -49
View File
@@ -1,17 +1,22 @@
import React from "react"; import React from "react";
import { cn } from "@app/lib/cn"; import { cn } from "@app/lib/cn";
import { ListUserOrgsResponse } from "@server/routers/org"; import { ListUserOrgsResponse } from "@server/routers/org";
import type { SidebarNavSection } from "@app/app/navigation"; import type {
CommandBarNavSection,
SidebarNavSection
} from "@app/app/navigation";
import { LayoutSidebar } from "@app/components/LayoutSidebar"; import { LayoutSidebar } from "@app/components/LayoutSidebar";
import { LayoutHeader } from "@app/components/LayoutHeader"; import { LayoutHeader } from "@app/components/LayoutHeader";
import { LayoutMobileMenu } from "@app/components/LayoutMobileMenu"; import { LayoutMobileMenu } from "@app/components/LayoutMobileMenu";
import { cookies } from "next/headers"; import { cookies } from "next/headers";
import { CommandPaletteProvider } from "./command-palette/CommandPalette";
interface LayoutProps { interface LayoutProps {
children: React.ReactNode; children: React.ReactNode;
orgId?: string; orgId?: string;
orgs?: ListUserOrgsResponse["orgs"]; orgs?: ListUserOrgsResponse["orgs"];
navItems?: SidebarNavSection[]; navItems?: SidebarNavSection[];
commandNavItems?: CommandBarNavSection[];
showSidebar?: boolean; showSidebar?: boolean;
showHeader?: boolean; showHeader?: boolean;
showTopBar?: boolean; showTopBar?: boolean;
@@ -25,6 +30,7 @@ export async function Layout({
orgId, orgId,
orgs, orgs,
navItems = [], navItems = [],
commandNavItems = [],
showSidebar = true, showSidebar = true,
showHeader = true, showHeader = true,
showTopBar = true, showTopBar = true,
@@ -41,61 +47,67 @@ export async function Layout({
(sidebarStateCookie !== "expanded" && defaultSidebarCollapsed); (sidebarStateCookie !== "expanded" && defaultSidebarCollapsed);
return ( return (
<div className="flex h-screen-safe overflow-hidden"> <CommandPaletteProvider
{/* Desktop Sidebar */} orgId={orgId}
{showSidebar && ( orgs={orgs}
<LayoutSidebar navItems={commandNavItems}
orgId={orgId} >
orgs={orgs} <div className="flex h-screen-safe overflow-hidden">
navItems={navItems} {/* Desktop Sidebar */}
defaultSidebarCollapsed={initialSidebarCollapsed} {showSidebar && (
hasCookiePreference={hasCookiePreference} <LayoutSidebar
/>
)}
{/* Main content area */}
<div
className={cn(
"flex-1 flex flex-col h-full min-w-0 relative",
!showSidebar && "w-full"
)}
>
{/* Mobile header */}
{showHeader && (
<LayoutMobileMenu
orgId={orgId} orgId={orgId}
orgs={orgs} orgs={orgs}
navItems={navItems} navItems={navItems}
showSidebar={showSidebar} defaultSidebarCollapsed={initialSidebarCollapsed}
showTopBar={showTopBar} hasCookiePreference={hasCookiePreference}
launcherMode={launcherMode}
showViewAsAdmin={showViewAsAdmin}
/> />
)} )}
{/* Desktop header */} {/* Main content area */}
{showHeader && ( <div
<LayoutHeader className={cn(
showTopBar={showTopBar} "flex-1 flex flex-col h-full min-w-0 relative",
launcherMode={launcherMode} !showSidebar && "w-full"
orgId={orgId} )}
orgs={orgs} >
showViewAsAdmin={showViewAsAdmin} {/* Mobile header */}
/> {showHeader && (
)} <LayoutMobileMenu
orgId={orgId}
orgs={orgs}
navItems={navItems}
showSidebar={showSidebar}
showTopBar={showTopBar}
launcherMode={launcherMode}
showViewAsAdmin={showViewAsAdmin}
/>
)}
{/* Main content */} {/* Desktop header */}
<main className="flex-1 overflow-y-auto p-3 md:p-6 w-full"> {showHeader && (
<div <LayoutHeader
className={cn( showTopBar={showTopBar}
"container mx-auto max-w-12xl mb-12", launcherMode={launcherMode}
showHeader && "md:pt-14" // Add top padding only on desktop to account for fixed header orgId={orgId}
)} orgs={orgs}
> showViewAsAdmin={showViewAsAdmin}
{children} />
</div> )}
</main>
{/* Main content */}
<main className="flex-1 overflow-y-auto p-3 md:p-6 w-full">
<div
className={cn(
"container mx-auto max-w-12xl mb-12",
showHeader && "md:pt-14" // Add top padding only on desktop to account for fixed header
)}
>
{children}
</div>
</main>
</div>
</div> </div>
</div> </CommandPaletteProvider>
); );
} }
+5
View File
@@ -12,6 +12,7 @@ import { ListUserOrgsResponse } from "@server/routers/org";
import { LauncherOrgSelector } from "@app/components/resource-launcher/LauncherOrgSelector"; import { LauncherOrgSelector } from "@app/components/resource-launcher/LauncherOrgSelector";
import { Button } from "@app/components/ui/button"; import { Button } from "@app/components/ui/button";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { CommandPaletteTrigger } from "@app/components/command-palette/CommandPaletteTrigger";
type LayoutHeaderProps = { type LayoutHeaderProps = {
showTopBar: boolean; showTopBar: boolean;
@@ -105,6 +106,10 @@ export function LayoutHeader({
{showTopBar && ( {showTopBar && (
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
<ThemeSwitcher /> <ThemeSwitcher />
<CommandPaletteTrigger
orgId={orgId}
orgs={orgs}
/>
<ProfileIcon /> <ProfileIcon />
</div> </div>
)} )}
+22 -17
View File
@@ -1,27 +1,27 @@
"use client"; "use client";
import React, { useState } from "react";
import { SidebarNav } from "@app/components/SidebarNav";
import { OrgSelector } from "@app/components/OrgSelector";
import { cn } from "@app/lib/cn";
import { ListUserOrgsResponse } from "@server/routers/org";
import { Button } from "@app/components/ui/button";
import { Menu, Server, Settings, SquareMousePointer } from "lucide-react";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { useUserContext } from "@app/hooks/useUserContext";
import { useTranslations } from "next-intl";
import ProfileIcon from "@app/components/ProfileIcon";
import ThemeSwitcher from "@app/components/ThemeSwitcher";
import type { SidebarNavSection } from "@app/app/navigation"; import type { SidebarNavSection } from "@app/app/navigation";
import { CommandPaletteTrigger } from "@app/components/command-palette/CommandPaletteTrigger";
import { OrgSelector } from "@app/components/OrgSelector";
import ProfileIcon from "@app/components/ProfileIcon";
import { SidebarNav } from "@app/components/SidebarNav";
import ThemeSwitcher from "@app/components/ThemeSwitcher";
import { Button } from "@app/components/ui/button";
import { import {
Sheet, Sheet,
SheetContent, SheetContent,
SheetTrigger, SheetDescription,
SheetTitle, SheetTitle,
SheetDescription SheetTrigger
} from "@app/components/ui/sheet"; } from "@app/components/ui/sheet";
import { Abel } from "next/font/google"; import { useUserContext } from "@app/hooks/useUserContext";
import { cn } from "@app/lib/cn";
import { ListUserOrgsResponse } from "@server/routers/org";
import { Menu, Server, Settings, LayoutGrid } from "lucide-react";
import { useTranslations } from "next-intl";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { useState } from "react";
interface LayoutMobileMenuProps { interface LayoutMobileMenuProps {
orgId?: string; orgId?: string;
@@ -151,7 +151,7 @@ export function LayoutMobileMenu({
} }
> >
<span className="flex-shrink-0 w-5 h-5 flex items-center justify-center text-muted-foreground mr-3"> <span className="flex-shrink-0 w-5 h-5 flex items-center justify-center text-muted-foreground mr-3">
<SquareMousePointer className="h-4 w-4" /> <LayoutGrid className="h-4 w-4" />
</span> </span>
<span className="flex-1"> <span className="flex-1">
{t( {t(
@@ -207,6 +207,11 @@ export function LayoutMobileMenu({
{showTopBar && ( {showTopBar && (
<div className="ml-auto flex items-center justify-end"> <div className="ml-auto flex items-center justify-end">
<div className="flex items-center space-x-2"> <div className="flex items-center space-x-2">
<CommandPaletteTrigger
variant="mobile"
orgId={orgId}
orgs={orgs}
/>
<ThemeSwitcher /> <ThemeSwitcher />
<ProfileIcon /> <ProfileIcon />
</div> </div>
+7 -5
View File
@@ -21,9 +21,9 @@ import { ListUserOrgsResponse } from "@server/routers/org";
import { import {
ArrowRight, ArrowRight,
ExternalLink, ExternalLink,
LayoutGrid,
PanelRightOpen, PanelRightOpen,
Server, Server
SquareMousePointer
} from "lucide-react"; } from "lucide-react";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import dynamic from "next/dynamic"; import dynamic from "next/dynamic";
@@ -186,7 +186,7 @@ export function LayoutSidebar({
)} )}
> >
<span className="flex-shrink-0 w-5 h-5 flex items-center justify-center text-muted-foreground"> <span className="flex-shrink-0 w-5 h-5 flex items-center justify-center text-muted-foreground">
<SquareMousePointer className="h-4 w-4" /> <LayoutGrid className="h-4 w-4" />
</span> </span>
</Link> </Link>
</TooltipTrigger> </TooltipTrigger>
@@ -195,7 +195,9 @@ export function LayoutSidebar({
sideOffset={8} sideOffset={8}
> >
<p> <p>
{t("resourceSidebarLauncherTitle")} {t(
"resourceSidebarLauncherTitle"
)}
</p> </p>
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
@@ -208,7 +210,7 @@ export function LayoutSidebar({
)} )}
> >
<span className="flex-shrink-0 mr-3 w-5 h-5 flex items-center justify-center text-muted-foreground"> <span className="flex-shrink-0 mr-3 w-5 h-5 flex items-center justify-center text-muted-foreground">
<SquareMousePointer className="h-4 w-4" /> <LayoutGrid className="h-4 w-4" />
</span> </span>
<span className="flex-1"> <span className="flex-1">
{t("resourceSidebarLauncherTitle")} {t("resourceSidebarLauncherTitle")}
+6 -3
View File
@@ -404,9 +404,12 @@ export default function MachineClientsTable({
if (agent in latestPlatformVersions) { if (agent in latestPlatformVersions) {
const agentVersion = latestPlatformVersions[agent]; const agentVersion = latestPlatformVersions[agent];
updateAvailable = semver.lt( updateAvailable = Boolean(
originalRow.olmVersion, semver.valid(originalRow.olmVersion) &&
agentVersion.latestVersion semver.lt(
originalRow.olmVersion,
agentVersion.latestVersion
)
); );
} }
} }
+59 -4
View File
@@ -11,24 +11,79 @@ import {
import { Shield, ArrowRight } from "lucide-react"; import { Shield, ArrowRight } from "lucide-react";
import Link from "next/link"; import Link from "next/link";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { useRouter } from "next/navigation";
import { createApiClient } from "@app/lib/api";
import { useEnvContext } from "@app/hooks/useEnvContext";
type OrgPolicyRequiredProps = { type OrgPolicyRequiredProps = {
orgId: string; orgId: string;
policies: { policies: {
requiredTwoFactor?: boolean; requiredTwoFactor?: boolean;
maxSessionLength?: {
compliant: boolean;
maxSessionLengthHours: number;
sessionAgeHours: number;
};
passwordAge?: {
compliant: boolean;
maxPasswordAgeDays: number;
passwordAgeDays: number;
};
}; };
redirectAfterAuth?: string;
}; };
export default function OrgPolicyRequired({ export default function OrgPolicyRequired({
orgId, orgId,
policies policies,
redirectAfterAuth
}: OrgPolicyRequiredProps) { }: OrgPolicyRequiredProps) {
const t = useTranslations(); const t = useTranslations();
const router = useRouter();
const policySteps = []; const api = createApiClient(useEnvContext());
if (policies?.requiredTwoFactor === false) { const sessionExpired =
policySteps.push(t("enableTwoFactorAuthentication")); policies?.maxSessionLength &&
policies.maxSessionLength.compliant === false;
function reauthenticate() {
api.post("/auth/logout")
.catch(() => {})
.then(() => {
const destination = redirectAfterAuth ?? `/${orgId}`;
router.push(destination);
router.refresh();
});
}
if (sessionExpired) {
return (
<Card className="w-full max-w-md">
<CardHeader className="text-center">
<div className="mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-orange-100">
<Shield className="h-6 w-6 text-orange-600" />
</div>
<CardTitle className="text-xl font-semibold">
{t("sessionExpired")}
</CardTitle>
<CardDescription>
{t("sessionExpiredReauthRequired")}
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
<div className="pt-4">
<Button
className="w-full"
onClick={reauthenticate}
>
{t("reauthenticate")}
<ArrowRight className="ml-2 h-4 w-4" />
</Button>
</div>
</CardContent>
</Card>
);
} }
return ( return (
+72 -26
View File
@@ -12,6 +12,7 @@ import {
import { toast } from "@app/hooks/useToast"; import { toast } from "@app/hooks/useToast";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { useRef } from "react";
import type { FieldValues, Path, UseFormReturn } from "react-hook-form"; import type { FieldValues, Path, UseFormReturn } from "react-hook-form";
import { RolesSelector, type SelectedRole } from "./roles-selector"; import { RolesSelector, type SelectedRole } from "./roles-selector";
@@ -41,6 +42,46 @@ export default function OrgRolesTagField<TFieldValues extends FieldValues>({
disabled disabled
}: OrgRolesTagFieldProps<TFieldValues>) { }: OrgRolesTagFieldProps<TFieldValues>) {
const t = useTranslations(); const t = useTranslations();
const isPopoverOpenRef = useRef(false);
const lastValidRolesRef = useRef<SelectedRole[]>(
(form.getValues(name) as SelectedRole[]) ?? []
);
function validateRolesSelection() {
const current = form.getValues(name) as SelectedRole[];
if (current.length === 0 && lastValidRolesRef.current.length > 0) {
form.setValue(name, lastValidRolesRef.current as never, {
shouldDirty: true
});
toast({
variant: "destructive",
title: t("accessRoleRequired"),
description: t("accessRoleSelectPlease")
});
return false;
}
if (current.length > 0) {
lastValidRolesRef.current = current;
}
return true;
}
function handlePopoverOpenChange(open: boolean) {
isPopoverOpenRef.current = open;
if (open) {
const current = form.getValues(name) as SelectedRole[];
if (current.length > 0) {
lastValidRolesRef.current = current;
}
return;
}
validateRolesSelection();
}
function setRoleTags(nextValue: SelectedRole[]) { function setRoleTags(nextValue: SelectedRole[]) {
const prev = form.getValues(name) as SelectedRole[]; const prev = form.getValues(name) as SelectedRole[];
@@ -61,39 +102,44 @@ export default function OrgRolesTagField<TFieldValues extends FieldValues>({
return; return;
} }
if (next.length === 0) {
toast({
variant: "destructive",
title: t("accessRoleErrorAdd"),
description: t("accessRoleSelectPlease")
});
return;
}
form.setValue(name, next as never, { shouldDirty: true }); form.setValue(name, next as never, { shouldDirty: true });
if (next.length > 0 && !isPopoverOpenRef.current) {
lastValidRolesRef.current = next;
} else if (!isPopoverOpenRef.current) {
validateRolesSelection();
}
} }
return ( return (
<FormField <FormField
control={form.control} control={form.control}
name={name} name={name}
render={({ field }) => ( render={({ field }) => {
<FormItem className="flex flex-col items-start"> const selectedRoles = (field.value ?? []) as SelectedRole[];
<FormLabel>{label ?? t("roles")}</FormLabel> if (!isPopoverOpenRef.current && selectedRoles.length > 0) {
<FormControl> lastValidRolesRef.current = selectedRoles;
<RolesSelector }
orgId={orgId}
selectedRoles={field.value ?? []} return (
onSelectRoles={setRoleTags} <FormItem className="flex flex-col items-start">
disabled={disabled} <FormLabel>{label ?? t("roles")}</FormLabel>
/> <FormControl>
</FormControl> <RolesSelector
{showMultiRolePaywallMessage && ( orgId={orgId}
<FormDescription>{paywallMessage}</FormDescription> selectedRoles={selectedRoles}
)} onSelectRoles={setRoleTags}
<FormMessage /> onPopoverOpenChange={handlePopoverOpenChange}
</FormItem> disabled={disabled}
)} />
</FormControl>
{showMultiRolePaywallMessage && (
<FormDescription>{paywallMessage}</FormDescription>
)}
<FormMessage />
</FormItem>
);
}}
/> />
); );
} }
+14
View File
@@ -111,6 +111,20 @@ function getActionsCategories(root: boolean) {
[t("actionUpdateResourceRule")]: "updateResourceRule" [t("actionUpdateResourceRule")]: "updateResourceRule"
}, },
"Resource Policy": {
[t("actionGetResourcePolicy")]: "getResourcePolicy",
[t("actionUpdateResourcePolicy")]: "updateResourcePolicy",
[t("actionSetResourcePolicyUsers")]: "setResourcePolicyUsers",
[t("actionSetResourcePolicyRoles")]: "setResourcePolicyRoles",
[t("actionSetResourcePolicyPassword")]: "setResourcePolicyPassword",
[t("actionSetResourcePolicyPincode")]: "setResourcePolicyPincode",
[t("actionSetResourcePolicyHeaderAuth")]:
"setResourcePolicyHeaderAuth",
[t("actionSetResourcePolicyWhitelist")]:
"setResourcePolicyWhitelist",
[t("actionSetResourcePolicyRules")]: "setResourcePolicyRules"
},
Client: { Client: {
[t("actionCreateClient")]: "createClient", [t("actionCreateClient")]: "createClient",
[t("actionDeleteClient")]: "deleteClient", [t("actionDeleteClient")]: "deleteClient",
+26 -24
View File
@@ -119,15 +119,13 @@ type ClientResourcesTableProps = {
orgId: string; orgId: string;
pagination: PaginationState; pagination: PaginationState;
rowCount: number; rowCount: number;
initialFilterSite?: Selectedsite | null;
}; };
export default function PrivateResourcesTable({ export default function PrivateResourcesTable({
internalResources, internalResources,
orgId, orgId,
pagination, pagination,
rowCount, rowCount
initialFilterSite = null
}: ClientResourcesTableProps) { }: ClientResourcesTableProps) {
const router = useRouter(); const router = useRouter();
const { const {
@@ -145,7 +143,11 @@ export default function PrivateResourcesTable({
const [isNavigatingToAddPage, startNavigation] = useTransition(); const [isNavigatingToAddPage, startNavigation] = useTransition();
const [selectedInternalResource, setSelectedInternalResource] = const [selectedInternalResource, setSelectedInternalResource] =
useState<InternalResourceRow | null>(null);
const [isEditDialogOpen, setIsEditDialogOpen] = useState(false);
const [editingResource, setEditingResource] =
useState<InternalResourceRow | null>(); useState<InternalResourceRow | null>();
const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
const [isRefreshing, startRefreshTransition] = useTransition(); const [isRefreshing, startRefreshTransition] = useTransition();
@@ -427,6 +429,27 @@ export default function PrivateResourcesTable({
); );
} }
}, },
{
id: "labels",
accessorKey: "labels",
header: () => (
<LabelColumnFilterButton
orgId={orgId}
selectedValues={searchParams.getAll("labels")}
onSelectedValuesChange={(value) =>
handleFilterChange("labels", value)
}
label={t("labels")}
className="p-3"
/>
),
cell: ({ row }: { row: { original: InternalResourceRow } }) => (
<ClientResourceLabelCell
resource={row.original}
orgId={orgId}
/>
)
},
{ {
id: "actions", id: "actions",
enableHiding: false, enableHiding: false,
@@ -487,27 +510,6 @@ export default function PrivateResourcesTable({
</div> </div>
); );
} }
},
{
id: "labels",
accessorKey: "labels",
header: () => (
<LabelColumnFilterButton
orgId={orgId}
selectedValues={searchParams.getAll("labels")}
onSelectedValuesChange={(value) =>
handleFilterChange("labels", value)
}
label={t("labels")}
className="p-3"
/>
),
cell: ({ row }: { row: { original: InternalResourceRow } }) => (
<ClientResourceLabelCell
resource={row.original}
orgId={orgId}
/>
)
} }
]; ];
+18 -18
View File
@@ -551,6 +551,24 @@ export default function PublicResourcesTable({
/> />
) )
}, },
{
id: "labels",
accessorKey: "labels",
header: () => (
<LabelColumnFilterButton
orgId={orgId}
selectedValues={searchParams.getAll("labels")}
onSelectedValuesChange={(value) =>
handleFilterChange("labels", value)
}
label={t("labels")}
className="p-3"
/>
),
cell: ({ row }: { row: { original: ResourceRow } }) => (
<ResourceLabelCell resource={row.original} orgId={orgId} />
)
},
{ {
id: "actions", id: "actions",
enableHiding: false, enableHiding: false,
@@ -603,24 +621,6 @@ export default function PublicResourcesTable({
</div> </div>
); );
} }
},
{
id: "labels",
accessorKey: "labels",
header: () => (
<LabelColumnFilterButton
orgId={orgId}
selectedValues={searchParams.getAll("labels")}
onSelectedValuesChange={(value) =>
handleFilterChange("labels", value)
}
label={t("labels")}
className="p-3"
/>
),
cell: ({ row }: { row: { original: ResourceRow } }) => (
<ResourceLabelCell resource={row.original} orgId={orgId} />
)
} }
]; ];
+26 -23
View File
@@ -359,10 +359,15 @@ export default function SitesTable({
cell: ({ row }) => { cell: ({ row }) => {
const originalRow = row.original; const originalRow = row.original;
let updateAvailable = let updateAvailable = Boolean(
latestNewtVersion && latestNewtVersion &&
originalRow.newtVersion && originalRow.newtVersion &&
semver.lt(originalRow.newtVersion, latestNewtVersion); semver.valid(originalRow.newtVersion) &&
semver.lt(
originalRow.newtVersion,
latestNewtVersion
)
);
if (originalRow.type === "newt") { if (originalRow.type === "newt") {
return ( return (
@@ -498,6 +503,23 @@ export default function SitesTable({
); );
} }
}, },
{
accessorKey: "labels",
header: () => (
<LabelColumnFilterButton
orgId={orgId}
selectedValues={searchParams.getAll("labels")}
onSelectedValuesChange={(value) =>
handleFilterChange("labels", value)
}
label={t("labels")}
className="p-3"
/>
),
cell: ({ row }: { row: { original: SiteRow } }) => (
<SiteLabelCell site={row.original} orgId={orgId} />
)
},
{ {
id: "actions", id: "actions",
enableHiding: false, enableHiding: false,
@@ -553,9 +575,7 @@ export default function SitesTable({
setRestartingSite(siteRow) setRestartingSite(siteRow)
} }
> >
<span className="text-orange-500"> {t("siteRestartButton")}
{t("siteRestartButton")}
</span>
</DropdownMenuItem> </DropdownMenuItem>
<DropdownMenuSeparator /> <DropdownMenuSeparator />
</> </>
@@ -599,23 +619,6 @@ export default function SitesTable({
</div> </div>
); );
} }
},
{
accessorKey: "labels",
header: () => (
<LabelColumnFilterButton
orgId={orgId}
selectedValues={searchParams.getAll("labels")}
onSelectedValuesChange={(value) =>
handleFilterChange("labels", value)
}
label={t("labels")}
className="p-3"
/>
),
cell: ({ row }: { row: { original: SiteRow } }) => (
<SiteLabelCell site={row.original} orgId={orgId} />
)
} }
]; ];
+6 -3
View File
@@ -588,9 +588,12 @@ export default function UserDevicesTable({
if (agent in latestPlatformVersions) { if (agent in latestPlatformVersions) {
const agentVersion = latestPlatformVersions[agent]; const agentVersion = latestPlatformVersions[agent];
updateAvailable = semver.lt( updateAvailable = Boolean(
originalRow.olmVersion, semver.valid(originalRow.olmVersion) &&
agentVersion.latestVersion semver.lt(
originalRow.olmVersion,
agentVersion.latestVersion
)
); );
} }
} }
@@ -348,7 +348,7 @@ function ResourceMultiSelect({
const [debounced] = useDebounce(q, 150); const [debounced] = useDebounce(q, 150);
const { data: resources = [] } = useQuery( const { data: resources = [] } = useQuery(
orgQueries.resources({ orgId, query: debounced, perPage: 10 }) orgQueries.proxyResources({ orgId, query: debounced, perPage: 10 })
); );
const shown = useMemo(() => { const shown = useMemo(() => {
@@ -0,0 +1,508 @@
"use client";
import type {
CommandBarNavSection,
SidebarNavSection
} from "@app/app/navigation";
import {
CommandDialog,
CommandEmpty,
CommandGroup,
CommandInput,
CommandItem,
CommandList,
CommandSeparator
} from "@app/components/ui/command";
import { Button } from "@app/components/ui/button";
import { cn } from "@app/lib/cn";
import { useMediaQuery } from "@app/hooks/useMediaQuery";
import { ListUserOrgsResponse } from "@server/routers/org";
import {
ChevronRightIcon,
GlobeIcon,
GlobeLockIcon,
LaptopIcon,
PlugIcon,
ServerIcon,
UserIcon,
X
} from "lucide-react";
import { useTranslations } from "next-intl";
import { useRouter } from "next/navigation";
import React, {
createContext,
useCallback,
useContext,
useEffect,
useMemo,
useState
} from "react";
import { useCanUseCommandPalette } from "./useCanUseCommandPalette";
import { useCommandPaletteActions } from "./useCommandPaletteActions";
import { useCommandPaletteNavigation } from "./useCommandPaletteNavigation";
import { useCommandPaletteSearch } from "./useCommandPaletteSearch";
import { resources } from "@server/db";
type CommandPaletteProps = {
orgId?: string;
orgs?: ListUserOrgsResponse["orgs"];
navItems: CommandBarNavSection[];
};
/**
* Plan for command bar:
* - the nav items should be custom items instead of all of the ones in the sidebar
* - actions should be triggered by using `>` (like in Github)
* -> if search starts with `>`, the filter should exclude that char in the filter string
*/
export function CommandPalette({ orgId, orgs, navItems }: CommandPaletteProps) {
const t = useTranslations();
const router = useRouter();
const { open, setOpen } = useCommandPalette();
const [search, setSearch] = useState("");
const isDesktop = useMediaQuery("(min-width: 768px)");
const isActionMode = search.startsWith(">");
const navigationGroups = useCommandPaletteNavigation(navItems);
// const organizations = useCommandPaletteOrganizations(orgs);
const actions = useCommandPaletteActions(orgId, orgs);
const {
shouldSearch,
sites,
publicResources,
privateResources,
users,
machineClients,
userDevices,
isLoading,
hasResults: hasEntityResults
} = useCommandPaletteSearch({
orgId,
query: search,
enabled: !isActionMode && open
});
const handleOpenChange = useCallback(
(nextOpen: boolean) => {
setOpen(nextOpen);
if (!nextOpen) {
setSearch("");
}
},
[setOpen]
);
const runCommand = useCallback(
(command: () => void) => {
setOpen(false);
setSearch("");
command();
},
[setOpen]
);
return (
<CommandDialog
open={open}
onOpenChange={handleOpenChange}
title={t("commandPaletteTitle")}
description={t("commandPaletteDescription")}
className="max-w-2xl **:data-[slot=command-input-wrapper]:h-15"
commandProps={{
loop: true,
filter(value, query) {
let search = query;
if (query.startsWith(">")) {
search = query.substring(1);
console.log({
search,
value
});
}
if (
value
.toLowerCase()
.includes(search.trim().toLowerCase())
) {
return 1;
}
return 0;
}
}}
>
<CommandInput
placeholder={t("commandPaletteSearchPlaceholder")}
value={search}
onValueChange={setSearch}
isLoading={!isActionMode && shouldSearch && isLoading}
trailing={
!isDesktop ? (
<Button
type="button"
variant="ghost"
size="icon"
className="size-8 shrink-0"
aria-label={t("close")}
onClick={() => handleOpenChange(false)}
>
<X className="size-4" />
</Button>
) : undefined
}
/>
<CommandList className="max-h-118 min-h-0 h-(--cmdk-list-height) scroll-pb-4 scroll-pt-2 transition-[height] duration-250 ease-in-out">
<CommandEmpty>{t("commandPaletteNoResults")}</CommandEmpty>
<CommandGroup
heading={t("commandActionModeInfo")}
className="[&_[cmdk-group-heading]]:text-sm"
/>
{!isActionMode &&
navigationGroups.map((group, groupIndex) => (
<React.Fragment key={group.heading}>
{groupIndex > 0 && <CommandSeparator />}
<CommandGroup
heading={group.heading}
className={cn(
"[&_[cmdk-group-heading]]:py-2 [&_[cmdk-group-heading]]:text-sm pb-2.5",
groupIndex > 0 &&
"[&_[cmdk-group-heading]]:pt-3"
)}
>
{group.items.map((item) => (
<CommandItem
key={item.id}
value={`${item.title} ${group.heading}`}
onSelect={() =>
runCommand(() =>
router.push(item.href)
)
}
className="h-9"
>
{item.icon}
<span>{item.title}</span>
</CommandItem>
))}
</CommandGroup>
</React.Fragment>
))}
{/* {organizations.length > 1 && (
<>
<CommandSeparator />
<CommandGroup
heading={t("commandPaletteOrganizations")}
>
{organizations.map((org) => (
<CommandItem
key={org.id}
value={`${org.name} ${org.orgId}`}
onSelect={() =>
runCommand(() => router.push(org.href))
}
>
<span className="truncate">{org.name}</span>
<span className="text-xs text-muted-foreground font-mono truncate">
{org.orgId}
</span>
{org.isPrimaryOrg && (
<Badge
variant="outline"
className="ml-auto shrink-0 text-[10px] px-1.5 py-0"
>
{t("primary")}
</Badge>
)}
</CommandItem>
))}
</CommandGroup>
</>
)} */}
{!isActionMode && shouldSearch && orgId && hasEntityResults && (
<CommandGroup
heading={t("commandSearchResults")}
className={cn(
"[&_[cmdk-group-heading]]:py-2 [&_[cmdk-group-heading]]:text-sm pb-2.5"
)}
>
{sites.map((site) => (
<CommandItem
key={site.id}
value={`${site.name} site`}
onSelect={() =>
runCommand(() => router.push(site.href))
}
className="h-9"
>
<div className="inline-flex items-center gap-1">
<PlugIcon className="size-4 flex-none" />
<span className="text-muted-foreground">
{t("commandSites")}
</span>
<ChevronRightIcon className="size-3.5! flex-none relative p-0! top-px" />
<span className="truncate">
{site.name}
</span>
</div>
</CommandItem>
))}
{publicResources.map((resource) => (
<CommandItem
key={resource.id}
value={`${resource.name} public resource`}
onSelect={() =>
runCommand(() => router.push(resource.href))
}
className="h-9"
>
<div className="inline-flex items-center gap-1">
<GlobeIcon className="size-4 flex-none" />
<span className="text-muted-foreground">
{t("commandProxyResources")}
</span>
<ChevronRightIcon className="size-3.5! flex-none relative p-0! top-px" />
<span className="truncate">
{resource.name}
</span>
</div>
</CommandItem>
))}
{privateResources.map((resource) => (
<CommandItem
key={resource.id}
value={`${resource.name} private resource`}
onSelect={() =>
runCommand(() => router.push(resource.href))
}
className="h-9"
>
<div className="inline-flex items-center gap-1">
<GlobeLockIcon className="size-4 flex-none" />
<span className="text-muted-foreground">
{t("commandClientResources")}
</span>
<ChevronRightIcon className="size-3.5! flex-none relative p-0! top-px" />
<span className="truncate">
{resource.name}
</span>
</div>
</CommandItem>
))}
{users.map((user) => (
<CommandItem
key={user.id}
value={`${user.name} ${user.email}`}
onSelect={() =>
runCommand(() => router.push(user.href))
}
className="h-9"
>
<div className="inline-flex items-center gap-1">
<UserIcon className="size-4 flex-none" />
<span className="text-muted-foreground">
{t("commandUsers")}
</span>
<ChevronRightIcon className="size-3.5! flex-none relative p-0! top-px" />
<div className="inline-flex min-w-0 items-center gap-1">
<span className="truncate">
{user.name}
</span>
<span className="text-muted-foreground">
&middot;
</span>
<span className="truncate text-xs text-muted-foreground">
{user.email}
</span>
</div>
</div>
</CommandItem>
))}
{machineClients.map((client) => (
<CommandItem
key={client.id}
value={`${client.name} client`}
onSelect={() =>
runCommand(() => router.push(client.href))
}
className="h-9"
>
<div className="inline-flex items-center gap-1">
<ServerIcon className="size-4 flex-none" />
<span className="text-muted-foreground">
{t("commandMachineClients")}
</span>
<ChevronRightIcon className="size-3.5! flex-none relative p-0! top-px" />
<span className="truncate">
{client.name}
</span>
</div>
</CommandItem>
))}
{userDevices.map((device) => (
<CommandItem
key={device.id}
value={`${device.name} user device`}
onSelect={() =>
runCommand(() => router.push(device.href))
}
className="h-9"
>
<div className="inline-flex items-center gap-1">
<LaptopIcon className="size-4 flex-none" />
<span className="text-muted-foreground">
{t("commandUserDevices")}
</span>
<ChevronRightIcon className="size-3.5! flex-none relative p-0! top-px" />
<span className="truncate">
{device.name}
</span>
</div>
</CommandItem>
))}
</CommandGroup>
)}
{isActionMode && actions.length > 0 && (
<>
<CommandGroup
heading={t("commandPaletteActions")}
className={cn(
"[&_[cmdk-group-heading]]:py-2 [&_[cmdk-group-heading]]:text-sm pb-2.5"
)}
>
{actions.map((action) => (
<CommandItem
key={action.id}
value={action.label}
onSelect={() =>
runCommand(() => {
if (action.onSelect) {
action.onSelect();
} else if (action.href) {
router.push(action.href);
}
})
}
className="h-9"
>
{action.icon}
<span>{action.label}</span>
</CommandItem>
))}
</CommandGroup>
</>
)}
</CommandList>
</CommandDialog>
);
}
/*******************************/
/* COMMAND PALETTE CONTEXT */
/*******************************/
export type CommandPaletteContextValue = {
open: boolean;
setOpen: (open: boolean) => void;
toggle: () => void;
};
const CommandPaletteContext = createContext<CommandPaletteContextValue | null>(
null
);
export function useCommandPalette() {
const context = useContext(CommandPaletteContext);
if (!context) {
throw new Error(
"useCommandPalette must be used within CommandPaletteProvider"
);
}
return context;
}
//*******************************/
/* COMMAND PALETTE PROVIDER */
/*******************************/
type CommandPaletteProviderProps = {
children: React.ReactNode;
orgId?: string;
orgs?: ListUserOrgsResponse["orgs"];
navItems: SidebarNavSection[];
};
function isEditableTarget(target: EventTarget | null) {
if (!(target instanceof HTMLElement)) return false;
if (target.isContentEditable) return true;
const tagName = target.tagName;
return (
tagName === "INPUT" || tagName === "TEXTAREA" || tagName === "SELECT"
);
}
function CommandPaletteProviderInner({
children,
orgId,
orgs,
navItems
}: CommandPaletteProviderProps) {
const [open, setOpen] = useState(false);
const canUseCommandPalette = useCanUseCommandPalette(orgId, orgs);
const toggle = useCallback(() => {
setOpen((current) => !current);
}, []);
const contextValue = useMemo<CommandPaletteContextValue>(
() => ({
open,
setOpen,
toggle
}),
[open, toggle]
);
useEffect(() => {
if (!canUseCommandPalette) {
return;
}
function onKeyDown(event: KeyboardEvent) {
if (
event.key.toLowerCase() !== "k" ||
!(event.metaKey || event.ctrlKey)
) {
return;
}
if (!open && isEditableTarget(event.target)) {
return;
}
event.preventDefault();
toggle();
}
document.addEventListener("keydown", onKeyDown);
return () => document.removeEventListener("keydown", onKeyDown);
}, [canUseCommandPalette, open, toggle]);
return (
<CommandPaletteContext value={contextValue}>
{children}
{canUseCommandPalette ? (
<CommandPalette orgId={orgId} orgs={orgs} navItems={navItems} />
) : null}
</CommandPaletteContext>
);
}
export function CommandPaletteProvider(props: CommandPaletteProviderProps) {
return <CommandPaletteProviderInner {...props} />;
}
@@ -0,0 +1,80 @@
"use client";
import { Button } from "@app/components/ui/button";
import { CommandShortcut } from "@app/components/ui/command";
import { cn } from "@app/lib/cn";
import { Search } from "lucide-react";
import { useEffect, useState } from "react";
import { useTranslations } from "next-intl";
import { ListUserOrgsResponse } from "@server/routers/org";
import { useCommandPalette } from "./CommandPalette";
import { useCanUseCommandPalette } from "./useCanUseCommandPalette";
type CommandPaletteTriggerProps = {
variant?: "header" | "mobile";
className?: string;
orgId?: string;
orgs?: ListUserOrgsResponse["orgs"];
};
function useIsMac() {
const [isMac, setIsMac] = useState(false);
useEffect(() => {
setIsMac(/Mac|iPhone|iPod|iPad/.test(navigator.platform));
}, []);
return isMac;
}
export function CommandPaletteTrigger({
variant = "header",
className,
orgId,
orgs
}: CommandPaletteTriggerProps) {
const t = useTranslations();
const { setOpen } = useCommandPalette();
const isMac = useIsMac();
const canUseCommandPalette = useCanUseCommandPalette(orgId, orgs);
if (!canUseCommandPalette) {
return null;
}
if (variant === "mobile") {
return (
<Button
variant="ghost"
size="icon"
className={className}
aria-label={t("commandPaletteTitle")}
onClick={() => setOpen(true)}
>
<Search className="size-5" />
</Button>
);
}
return (
<Button
variant="outline"
className={cn(
"relative hidden h-9 w-56 justify-start pl-8 pr-3 text-muted-foreground md:flex lg:w-64",
className
)}
aria-label={t("commandPaletteTitle")}
onClick={() => setOpen(true)}
>
<Search className="absolute left-2 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground" />
<span className="flex-1 truncate text-left text-sm font-normal">
{t("commandPaletteSearchPlaceholder")}
</span>
<CommandShortcut>
{isMac
? t("commandPaletteShortcutMac")
: t("commandPaletteShortcutWindows")}
</CommandShortcut>
</Button>
);
}
@@ -0,0 +1,24 @@
"use client";
import { useUserContext } from "@app/hooks/useUserContext";
import { ListUserOrgsResponse } from "@server/routers/org";
import { usePathname } from "next/navigation";
export function useCanUseCommandPalette(
orgId?: string,
orgs?: ListUserOrgsResponse["orgs"]
) {
const pathname = usePathname();
const { user } = useUserContext();
if (pathname?.startsWith("/admin")) {
return user.serverAdmin;
}
if (!orgId) {
return false;
}
const currentOrg = orgs?.find((org) => org.orgId === orgId);
return Boolean(currentOrg?.isAdmin || currentOrg?.isOwner);
}
@@ -0,0 +1,157 @@
"use client";
import { useEnvContext } from "@app/hooks/useEnvContext";
import { useUserContext } from "@app/hooks/useUserContext";
import { build } from "@server/build";
import {
BellRing,
Building2,
Globe,
GlobeLock,
KeyRound,
MonitorUp,
Plus,
SunMoon,
UserPlus
} from "lucide-react";
import { useTheme } from "next-themes";
import { usePathname } from "next/navigation";
import type { ReactNode } from "react";
import { useMemo } from "react";
import { useTranslations } from "next-intl";
import { ListUserOrgsResponse } from "@server/routers/org";
export type CommandPaletteAction = {
id: string;
label: string;
icon: ReactNode;
href?: string;
onSelect?: () => void;
};
export function useCommandPaletteActions(
orgId?: string,
orgs?: ListUserOrgsResponse["orgs"]
): CommandPaletteAction[] {
const t = useTranslations();
const pathname = usePathname();
const { env } = useEnvContext();
const { user } = useUserContext();
const { setTheme, theme } = useTheme();
const isAdminPage = pathname?.startsWith("/admin");
return useMemo(() => {
const actions: CommandPaletteAction[] = [];
function cycleTheme() {
const currentTheme = theme || "system";
if (currentTheme === "light") {
setTheme("dark");
} else if (currentTheme === "dark") {
setTheme("system");
} else {
setTheme("light");
}
}
if (isAdminPage) {
actions.push({
id: "create-admin-api-key",
label: t("commandPaletteCreateApiKey"),
icon: <KeyRound className="size-4" />,
href: "/admin/api-keys/create"
});
if (
build === "oss" ||
env?.app.identityProviderMode === "global" ||
env?.app.identityProviderMode === undefined
) {
actions.push({
id: "create-admin-idp",
label: t("commandPaletteCreateIdentityProvider"),
icon: <Plus className="size-4" />,
href: "/admin/idp/create"
});
}
} else if (orgId) {
actions.push({
id: "create-site",
label: t("commandPaletteCreateSite"),
icon: <Plus className="size-4" />,
href: `/${orgId}/settings/sites/create`
});
actions.push({
id: "create-proxy-resource",
label: t("commandPaletteCreateProxyResource"),
icon: <Globe className="size-4" />,
href: `/${orgId}/settings/resources/proxy/create`
});
actions.push({
id: "create-private-resource",
label: t("commandPaletteCreatePrivateResource"),
icon: <GlobeLock className="size-4" />,
href: `/${orgId}/settings/resources/private/create`
});
actions.push({
id: "create-machine-client",
label: t("commandPaletteCreateMachineClient"),
icon: <MonitorUp className="size-4" />,
href: `/${orgId}/settings/clients/machine/create`
});
actions.push({
id: "create-user",
label: t("commandPaletteCreateUser"),
icon: <UserPlus className="size-4" />,
href: `/${orgId}/settings/access/users/create`
});
actions.push({
id: "create-api-key",
label: t("commandPaletteCreateApiKey"),
icon: <KeyRound className="size-4" />,
href: `/${orgId}/settings/api-keys/create`
});
if (!env?.flags.disableEnterpriseFeatures) {
actions.push({
id: "create-alert-rule",
label: t("commandPaletteCreateAlertRule"),
icon: <BellRing className="size-4" />,
href: `/${orgId}/settings/alerting/create`
});
}
if (
(build === "oss" && !env?.flags.disableEnterpriseFeatures) ||
build === "saas" ||
env?.app.identityProviderMode === "org" ||
(env?.app.identityProviderMode === undefined && build !== "oss")
) {
actions.push({
id: "create-idp",
label: t("commandPaletteCreateIdentityProvider"),
icon: <Plus className="size-4" />,
href: `/${orgId}/settings/idp/create`
});
}
}
actions.push({
id: "toggle-theme",
label: t("commandPaletteToggleTheme"),
icon: <SunMoon className="size-4" />,
onSelect: cycleTheme
});
if (user.serverAdmin && !isAdminPage) {
actions.push({
id: "go-admin",
label: t("serverAdmin"),
icon: <Building2 className="size-4" />,
href: "/admin/users"
});
}
return actions;
}, [isAdminPage, orgId, orgs, env, user.serverAdmin, theme, setTheme, t]);
}
@@ -0,0 +1,57 @@
"use client";
import type { CommandBarNavSection } from "@app/app/navigation";
import { flattenNavSections } from "@app/lib/flattenNavItems";
import {
hydrateNavHref,
navHrefParamsFromRoute
} from "@app/lib/hydrateNavHref";
import { useTranslations } from "next-intl";
import { useParams } from "next/navigation";
import { useMemo } from "react";
export type NavigationCommand = {
id: string;
title: string;
href: string;
icon?: React.ReactNode;
sectionHeading: string;
};
export type NavigationCommandGroup = {
heading: string;
items: NavigationCommand[];
};
export function useCommandPaletteNavigation(
navItems: CommandBarNavSection[]
): NavigationCommandGroup[] {
const params = useParams();
const t = useTranslations();
return useMemo(() => {
const hrefParams = navHrefParamsFromRoute(params);
const flat = flattenNavSections(navItems);
const groups = new Map<string, NavigationCommand[]>();
for (const item of flat) {
const href = hydrateNavHref(item.href, hrefParams);
if (!href) continue;
const groupItems = groups.get(item.sectionHeading) ?? [];
groupItems.push({
id: `nav-${item.sectionHeading}-${item.title}-${href}`,
title: t(item.title),
href,
icon: item.icon,
sectionHeading: item.sectionHeading
});
groups.set(item.sectionHeading, groupItems);
}
return Array.from(groups.entries()).map(([heading, items]) => ({
heading: t(heading),
items
}));
}, [navItems, params, t]);
}
@@ -0,0 +1,45 @@
"use client";
import { ListUserOrgsResponse } from "@server/routers/org";
import { usePathname } from "next/navigation";
import { useMemo } from "react";
export type OrganizationCommand = {
id: string;
orgId: string;
name: string;
isPrimaryOrg?: boolean;
href: string;
};
export function useCommandPaletteOrganizations(
orgs: ListUserOrgsResponse["orgs"] | undefined
): OrganizationCommand[] {
const pathname = usePathname();
return useMemo(() => {
if (!orgs?.length) return [];
const sortedOrgs = [...orgs].sort((a, b) => {
const aPrimary = Boolean(a.isPrimaryOrg);
const bPrimary = Boolean(b.isPrimaryOrg);
if (aPrimary && !bPrimary) return -1;
if (!aPrimary && bPrimary) return 1;
return 0;
});
return sortedOrgs.map((org) => {
const newPath = pathname.includes("/settings/")
? pathname.replace(/^\/[^/]+/, `/${org.orgId}`)
: `/${org.orgId}`;
return {
id: `org-${org.orgId}`,
orgId: org.orgId,
name: org.name,
isPrimaryOrg: org.isPrimaryOrg,
href: newPath
};
});
}, [orgs, pathname]);
}
@@ -0,0 +1,198 @@
"use client";
import { orgQueries } from "@app/lib/queries";
import { useQueries } from "@tanstack/react-query";
import { useMemo } from "react";
import { useDebounce } from "use-debounce";
const SEARCH_PER_PAGE = 5;
const MIN_QUERY_LENGTH = 2;
export type SiteSearchResult = {
id: string;
name: string;
href: string;
};
export type ResourceSearchResult = {
id: string;
name: string;
href: string;
};
export type UserSearchResult = {
id: string;
name: string;
email: string;
href: string;
};
export type ClientSearchResult = {
id: string;
name: string;
href: string;
};
export function useCommandPaletteSearch({
orgId,
query,
enabled
}: {
orgId?: string;
query: string;
enabled: boolean;
}) {
const [debouncedQuery] = useDebounce(query, 150);
const trimmedQuery = debouncedQuery.trim();
const shouldSearch =
enabled && !!orgId && trimmedQuery.length >= MIN_QUERY_LENGTH;
const [
sitesQuery,
proxyResourcesQuery,
privateResourcesQuery,
usersQuery,
clientsQuery,
userDevicesQuery
] = useQueries({
queries: [
{
...orgQueries.sites({
orgId: orgId ?? "",
query: trimmedQuery,
perPage: SEARCH_PER_PAGE
}),
enabled: shouldSearch
},
{
...orgQueries.proxyResources({
orgId: orgId ?? "",
query: trimmedQuery,
perPage: SEARCH_PER_PAGE
}),
enabled: shouldSearch
},
{
...orgQueries.privateResources({
orgId: orgId ?? "",
query: trimmedQuery,
perPage: SEARCH_PER_PAGE
}),
enabled: shouldSearch
},
{
...orgQueries.users({
orgId: orgId ?? "",
query: trimmedQuery,
perPage: SEARCH_PER_PAGE
}),
enabled: shouldSearch
},
{
...orgQueries.machineClients({
orgId: orgId ?? "",
query: trimmedQuery,
perPage: SEARCH_PER_PAGE
}),
enabled: shouldSearch
},
{
...orgQueries.userDevices({
orgId: orgId ?? "",
query: trimmedQuery,
perPage: SEARCH_PER_PAGE
}),
enabled: shouldSearch
}
]
});
const sites = useMemo((): SiteSearchResult[] => {
if (!orgId || !sitesQuery.data) return [];
return sitesQuery.data.map((site) => ({
id: `site-${site.siteId}`,
name: site.name,
href: `/${orgId}/settings/sites/${site.niceId}`
}));
}, [orgId, sitesQuery.data]);
const publicResources = useMemo((): ResourceSearchResult[] => {
if (!orgId || !proxyResourcesQuery.data) return [];
return proxyResourcesQuery.data.map((resource) => ({
id: `resource-${resource.resourceId}`,
name: resource.name,
href: `/${orgId}/settings/resources/proxy/${resource.niceId}`
}));
}, [orgId, proxyResourcesQuery.data]);
const privateResources = useMemo((): ResourceSearchResult[] => {
if (!orgId || !privateResourcesQuery.data) return [];
return privateResourcesQuery.data.map((resource) => ({
id: `site-resource-${resource.siteResourceId}`,
name: resource.name,
href: `/${orgId}/settings/resources/private/${resource.niceId}`
}));
}, [orgId, privateResourcesQuery.data]);
const users = useMemo((): UserSearchResult[] => {
if (!orgId || !usersQuery.data) return [];
return usersQuery.data.map((user) => ({
id: `user-${user.id}`,
name: user.name ?? user.email ?? user.username ?? "",
email: user.email ?? user.username ?? "",
href: `/${orgId}/settings/access/users/${user.id}`
}));
}, [orgId, usersQuery.data]);
const machineClients = useMemo((): ClientSearchResult[] => {
if (!orgId || !clientsQuery.data) return [];
return clientsQuery.data
.filter((client) => !client.userId)
.map((client) => ({
id: `client-${client.clientId}`,
name: client.name,
href: `/${orgId}/settings/clients/machine/${client.niceId}`
}));
}, [orgId, clientsQuery.data]);
const userDevices = useMemo((): ClientSearchResult[] => {
if (!orgId || !userDevicesQuery.data) return [];
return userDevicesQuery.data
.filter((client) => !client.userId)
.map((client) => ({
id: `client-${client.clientId}`,
name: client.name,
href: `/${orgId}/settings/clients/user/${client.niceId}`
}));
}, [orgId, userDevicesQuery.data]);
const isLoading =
shouldSearch &&
(sitesQuery.isFetching ||
proxyResourcesQuery.isFetching ||
privateResourcesQuery.isFetching ||
usersQuery.isFetching ||
userDevicesQuery.isFetching ||
clientsQuery.isFetching);
const hasResults =
sites.length > 0 ||
publicResources.length > 0 ||
users.length > 0 ||
privateResources.length > 0 ||
userDevices.length > 0 ||
machineClients.length > 0;
return {
debouncedQuery: trimmedQuery,
shouldSearch,
sites,
publicResources,
privateResources,
users,
machineClients,
userDevices,
isLoading,
hasResults
};
}
@@ -17,11 +17,13 @@ export interface MultiSelectInputProps<
> extends MultiSelectTagsProps<T> { > extends MultiSelectTagsProps<T> {
buttonText?: string; buttonText?: string;
lockedIds?: Set<string>; lockedIds?: Set<string>;
onPopoverOpenChange?: (open: boolean) => void;
} }
export function MultiSelectTagInput<T extends TagValue>({ export function MultiSelectTagInput<T extends TagValue>({
buttonText, buttonText,
lockedIds, lockedIds,
onPopoverOpenChange,
...props ...props
}: MultiSelectInputProps<T>) { }: MultiSelectInputProps<T>) {
const selectedValues = new Set(props.value.map((v) => v.id)); const selectedValues = new Set(props.value.map((v) => v.id));
@@ -33,6 +35,7 @@ export function MultiSelectTagInput<T extends TagValue>({
// clear input when popover is closed // clear input when popover is closed
props.onSearch(""); props.onSearch("");
} }
onPopoverOpenChange?.(open);
}} }}
> >
<PopoverTrigger asChild> <PopoverTrigger asChild>
@@ -587,7 +587,9 @@ export default function ResourceLauncher({
const renderToolbarSearch = (searchClassName: string) => ( const renderToolbarSearch = (searchClassName: string) => (
<div className={cn("relative shrink-0", searchClassName)}> <div className={cn("relative shrink-0", searchClassName)}>
<Search className="absolute left-2.5 top-1/2 -translate-y-1/2 size-4 text-muted-foreground" /> <span className="pointer-events-none absolute inset-y-0 left-2 flex items-center">
<Search className="size-4 text-muted-foreground" />
</span>
<Input <Input
key={`${activeViewId}-${searchInputResetKey}`} key={`${activeViewId}-${searchInputResetKey}`}
defaultValue={config.query} defaultValue={config.query}
@@ -75,6 +75,7 @@ import {
type PolicyAccessRule type PolicyAccessRule
} from "./policy-access-rule-utils"; } from "./policy-access-rule-utils";
import { countryCodeToFlagEmoji } from "@app/lib/countryCodeToFlagEmoji"; import { countryCodeToFlagEmoji } from "@app/lib/countryCodeToFlagEmoji";
import type { readonly } from "zod";
export type PolicyAccessRulesTableProps = { export type PolicyAccessRulesTableProps = {
rules: PolicyAccessRule[]; rules: PolicyAccessRule[];
@@ -106,7 +107,7 @@ function getColumnClassName(columnId: string) {
return "w-42 max-w-42"; return "w-42 max-w-42";
} }
if (columnId === "match") { if (columnId === "match") {
return "w-36 max-w-36"; return "w-42 max-w-42";
} }
return ""; return "";
} }
@@ -230,6 +231,7 @@ export function PolicyAccessRulesTable({
IP: "IP", IP: "IP",
CIDR: t("ipAddressRange"), CIDR: t("ipAddressRange"),
COUNTRY: t("country"), COUNTRY: t("country"),
COUNTRY_IS_NOT: t("countryIsNot"),
ASN: "ASN", ASN: "ASN",
REGION: t("region") REGION: t("region")
}), }),
@@ -442,13 +444,15 @@ export function PolicyAccessRulesTable({
| "IP" | "IP"
| "PATH" | "PATH"
| "COUNTRY" | "COUNTRY"
| "COUNTRY_IS_NOT"
| "ASN" | "ASN"
| "REGION" | "REGION"
) => ) =>
updateRule(row.original.ruleId, { updateRule(row.original.ruleId, {
match: value, match: value,
value: value:
value === "COUNTRY" value === "COUNTRY" ||
value === "COUNTRY_IS_NOT"
? "US" ? "US"
: value === "ASN" : value === "ASN"
? "AS15169" ? "AS15169"
@@ -458,7 +462,7 @@ export function PolicyAccessRulesTable({
}) })
} }
> >
<SelectTrigger className="h-8 w-full min-w-0"> <SelectTrigger className="h-8 w-36 min-w-0">
<SelectValue /> <SelectValue />
</SelectTrigger> </SelectTrigger>
<SelectContent> <SelectContent>
@@ -470,9 +474,14 @@ export function PolicyAccessRulesTable({
{RuleMatch.CIDR} {RuleMatch.CIDR}
</SelectItem> </SelectItem>
{isMaxmindAvailable && ( {isMaxmindAvailable && (
<SelectItem value="COUNTRY"> <>
{RuleMatch.COUNTRY} <SelectItem value="COUNTRY">
</SelectItem> {RuleMatch.COUNTRY}
</SelectItem>
<SelectItem value="COUNTRY_IS_NOT">
{RuleMatch.COUNTRY_IS_NOT}
</SelectItem>
</>
)} )}
{includeRegionMatch && isMaxmindAvailable && ( {includeRegionMatch && isMaxmindAvailable && (
<SelectItem value="REGION"> <SelectItem value="REGION">
@@ -494,14 +503,16 @@ export function PolicyAccessRulesTable({
cell: ({ row }) => { cell: ({ row }) => {
let selectedCountry: (typeof COUNTRIES)[number] | undefined; let selectedCountry: (typeof COUNTRIES)[number] | undefined;
if ( if (
row.original.match === "COUNTRY" && (row.original.match === "COUNTRY" ||
row.original.match === "COUNTRY_IS_NOT") &&
row.original.value row.original.value
) { ) {
selectedCountry = COUNTRIES.find( selectedCountry = COUNTRIES.find(
(c) => c.code === row.original.value (c) => c.code === row.original.value
); );
} }
return row.original.match === "COUNTRY" ? ( return row.original.match === "COUNTRY" ||
row.original.match === "COUNTRY_IS_NOT" ? (
<Popover> <Popover>
<PopoverTrigger asChild> <PopoverTrigger asChild>
<Button <Button
@@ -17,6 +17,7 @@ export const POLICY_RULE_MATCH_TYPES = [
"IP", "IP",
"PATH", "PATH",
"COUNTRY", "COUNTRY",
"COUNTRY_IS_NOT",
"ASN", "ASN",
"REGION" "REGION"
] as const; ] as const;
@@ -78,6 +79,7 @@ export function createPolicyRuleValueSchema(t: TranslateFn, match: string) {
message: t("rulesErrorInvalidRegionDescription") message: t("rulesErrorInvalidRegionDescription")
}); });
case "COUNTRY": case "COUNTRY":
case "COUNTRY_IS_NOT":
return required.refine( return required.refine(
(value) => COUNTRIES.some((country) => country.code === value), (value) => COUNTRIES.some((country) => country.code === value),
{ message: t("rulesErrorInvalidCountryDescription") } { message: t("rulesErrorInvalidCountryDescription") }
+1 -1
View File
@@ -39,7 +39,7 @@ export function ResourceSelector({
const [debouncedSearchQuery] = useDebounce(resourceSearchQuery, 150); const [debouncedSearchQuery] = useDebounce(resourceSearchQuery, 150);
const { data: resources = [] } = useQuery( const { data: resources = [] } = useQuery(
orgQueries.resources({ orgQueries.proxyResources({
orgId: orgId, orgId: orgId,
query: debouncedSearchQuery, query: debouncedSearchQuery,
perPage: 10 perPage: 10
+3
View File
@@ -12,6 +12,7 @@ export type RolesSelectorProps = {
orgId: string; orgId: string;
selectedRoles?: SelectedRole[]; selectedRoles?: SelectedRole[];
onSelectRoles: (roles: SelectedRole[]) => void; onSelectRoles: (roles: SelectedRole[]) => void;
onPopoverOpenChange?: (open: boolean) => void;
disabled?: boolean; disabled?: boolean;
restrictAdminRole?: boolean; restrictAdminRole?: boolean;
mapRolesByName?: boolean; mapRolesByName?: boolean;
@@ -23,6 +24,7 @@ export function RolesSelector({
orgId, orgId,
selectedRoles = [], selectedRoles = [],
onSelectRoles, onSelectRoles,
onPopoverOpenChange,
disabled, disabled,
restrictAdminRole, restrictAdminRole,
mapRolesByName, mapRolesByName,
@@ -77,6 +79,7 @@ export function RolesSelector({
options={rolesShown} options={rolesShown}
value={selectedRoles} value={selectedRoles}
onChange={onSelectRoles} onChange={onSelectRoles}
onPopoverOpenChange={onPopoverOpenChange}
disabled={disabled} disabled={disabled}
lockedIds={lockedIds} lockedIds={lockedIds}
/> />
+67 -9
View File
@@ -2,7 +2,7 @@
import * as React from "react"; import * as React from "react";
import { Command as CommandPrimitive } from "cmdk"; import { Command as CommandPrimitive } from "cmdk";
import { SearchIcon } from "lucide-react"; import { LoaderIcon, SearchIcon } from "lucide-react";
import { import {
Dialog, Dialog,
@@ -11,8 +11,21 @@ import {
DialogHeader, DialogHeader,
DialogTitle DialogTitle
} from "@/components/ui/dialog"; } from "@/components/ui/dialog";
import {
Sheet,
SheetContent,
SheetDescription,
SheetHeader,
SheetTitle
} from "@/components/ui/sheet";
import { useMediaQuery } from "@app/hooks/useMediaQuery";
import { cn } from "@app/lib/cn"; import { cn } from "@app/lib/cn";
const desktop = "(min-width: 768px)";
const commandSurfaceClassName =
"transition duration-150 mt-0 [&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5";
function Command({ function Command({
className, className,
...props ...props
@@ -35,23 +48,57 @@ function CommandDialog({
children, children,
className, className,
showCloseButton = true, showCloseButton = true,
commandProps,
...props ...props
}: React.ComponentProps<typeof Dialog> & { }: React.ComponentProps<typeof Dialog> & {
title?: string; title?: string;
description?: string; description?: string;
className?: string; className?: string;
showCloseButton?: boolean; showCloseButton?: boolean;
commandProps?: React.ComponentProps<typeof Command>;
}) { }) {
const isDesktop = useMediaQuery(desktop);
const command = (
<Command {...commandProps} className={commandSurfaceClassName}>
{children}
</Command>
);
if (!isDesktop) {
return (
<Sheet open={props.open} onOpenChange={props.onOpenChange}>
<SheetContent
side="top"
className={cn(
"flex max-h-[85dvh] w-full flex-col gap-0 overflow-hidden rounded-none border-x-0 p-0 pt-[env(safe-area-inset-top,0px)]",
className
)}
onOpenAutoFocus={(event) => event.preventDefault()}
>
<SheetHeader className="sr-only">
<SheetTitle>{title}</SheetTitle>
<SheetDescription>{description}</SheetDescription>
</SheetHeader>
{command}
</SheetContent>
</Sheet>
);
}
return ( return (
<Dialog {...props}> <Dialog {...props}>
<DialogHeader className="sr-only"> <DialogHeader className="sr-only">
<DialogTitle>{title}</DialogTitle> <DialogTitle>{title}</DialogTitle>
<DialogDescription>{description}</DialogDescription> <DialogDescription>{description}</DialogDescription>
</DialogHeader> </DialogHeader>
<DialogContent className={cn("overflow-hidden p-0", className)}> <DialogContent
<Command className="[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5"> className={cn(
{children} "overflow-hidden p-0 place-items-start md:top-[clamp(1.5rem,12vh,200px)] md:max-h-[calc(100dvh-clamp(1.5rem,12vh,200px)-1.5rem)] md:translate-y-0",
</Command> className
)}
>
{command}
</DialogContent> </DialogContent>
</Dialog> </Dialog>
); );
@@ -59,22 +106,32 @@ function CommandDialog({
function CommandInput({ function CommandInput({
className, className,
isLoading,
trailing,
...props ...props
}: React.ComponentProps<typeof CommandPrimitive.Input>) { }: React.ComponentProps<typeof CommandPrimitive.Input> & {
isLoading?: boolean;
trailing?: React.ReactNode;
}) {
return ( return (
<div <div
data-slot="command-input-wrapper" data-slot="command-input-wrapper"
className="flex h-9 items-center gap-2 border-b px-3" className="flex h-9 items-center gap-2 border-b px-3"
> >
<SearchIcon className="size-4 shrink-0 opacity-50" /> {isLoading ? (
<LoaderIcon className="animate-spin size-4 shrink-0 opacity-50" />
) : (
<SearchIcon className="size-4 shrink-0 opacity-50" />
)}
<CommandPrimitive.Input <CommandPrimitive.Input
data-slot="command-input" data-slot="command-input"
className={cn( className={cn(
"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", "placeholder:text-muted-foreground flex h-10 min-w-0 flex-1 rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
className className
)} )}
{...props} {...props}
/> />
{trailing ? <div className="shrink-0">{trailing}</div> : null}
</div> </div>
); );
} }
@@ -158,10 +215,11 @@ function CommandShortcut({
...props ...props
}: React.ComponentProps<"span">) { }: React.ComponentProps<"span">) {
return ( return (
<span <kbd
data-slot="command-shortcut" data-slot="command-shortcut"
className={cn( className={cn(
"text-muted-foreground ml-auto text-xs tracking-widest", "text-muted-foreground ml-auto text-xs tracking-widest",
"px-1 py-0.5 rounded-sm border-border bg-muted border",
className className
)} )}
{...props} {...props}
+42
View File
@@ -0,0 +1,42 @@
import type { ReactNode } from "react";
import type {
SidebarNavItem,
SidebarNavSection
} from "@app/components/SidebarNav";
export type FlatNavItem = {
title: string;
href: string;
icon?: ReactNode;
sectionHeading: string;
};
function flattenItems(
items: SidebarNavItem[],
sectionHeading: string,
result: FlatNavItem[]
) {
for (const item of items) {
if (item.href) {
result.push({
title: item.title,
href: item.href,
icon: item.icon,
sectionHeading
});
}
if (item.items?.length) {
flattenItems(item.items, sectionHeading, result);
}
}
}
export function flattenNavSections(
sections: SidebarNavSection[]
): FlatNavItem[] {
const result: FlatNavItem[] = [];
for (const section of sections) {
flattenItems(section.items, section.heading, result);
}
return result;
}
+35
View File
@@ -0,0 +1,35 @@
export type NavHrefParams = {
orgId?: string;
niceId?: string;
resourceId?: string;
userId?: string;
apiKeyId?: string;
clientId?: string;
};
export function hydrateNavHref(
val: string | undefined,
params: NavHrefParams
): string | undefined {
if (!val) return undefined;
return val
.replace("{orgId}", params.orgId ?? "")
.replace("{niceId}", params.niceId ?? "")
.replace("{resourceId}", params.resourceId ?? "")
.replace("{userId}", params.userId ?? "")
.replace("{apiKeyId}", params.apiKeyId ?? "")
.replace("{clientId}", params.clientId ?? "");
}
export function navHrefParamsFromRoute(
params: Record<string, string | string[] | undefined>
): NavHrefParams {
return {
orgId: params.orgId as string | undefined,
niceId: params.niceId as string | undefined,
resourceId: params.resourceId as string | undefined,
userId: params.userId as string | undefined,
apiKeyId: params.apiKeyId as string | undefined,
clientId: params.clientId as string | undefined
};
}
+78 -4
View File
@@ -7,7 +7,10 @@ import type {
QueryConnectionAuditLogResponse, QueryConnectionAuditLogResponse,
QueryRequestAuditLogResponse QueryRequestAuditLogResponse
} from "@server/routers/auditLogs/types"; } from "@server/routers/auditLogs/types";
import type { ListClientsResponse } from "@server/routers/client"; import type {
ListClientsResponse,
ListUserDevicesResponse
} from "@server/routers/client";
import type { import type {
GetDNSRecordsResponse, GetDNSRecordsResponse,
ListDomainsResponse ListDomainsResponse
@@ -25,6 +28,7 @@ import type {
import type { ListRolesResponse } from "@server/routers/role"; import type { ListRolesResponse } from "@server/routers/role";
import type { ListSitesResponse } from "@server/routers/site"; import type { ListSitesResponse } from "@server/routers/site";
import type { import type {
ListAllSiteResourcesByOrgResponse,
ListSiteResourceClientsResponse, ListSiteResourceClientsResponse,
ListSiteResourceRolesResponse, ListSiteResourceRolesResponse,
ListSiteResourceUsersResponse ListSiteResourceUsersResponse
@@ -38,7 +42,7 @@ import {
queryOptions queryOptions
} from "@tanstack/react-query"; } from "@tanstack/react-query";
import type { AxiosResponse } from "axios"; import type { AxiosResponse } from "axios";
import z from "zod"; import z, { meta } from "zod";
import { remote } from "./api"; import { remote } from "./api";
import { durationToMs } from "./durationToMs"; import { durationToMs } from "./durationToMs";
import type { ListOrgLabelsResponse } from "@server/routers/labels/types"; import type { ListOrgLabelsResponse } from "@server/routers/labels/types";
@@ -185,6 +189,38 @@ export const orgQueries = {
return res.data.data.clients; return res.data.data.clients;
} }
}), }),
userDevices: ({
orgId,
query,
perPage = 10_000
}: {
orgId: string;
query?: string;
perPage?: number;
}) =>
queryOptions({
queryKey: [
"ORG",
orgId,
"USER_DEVICES",
{ query, perPage }
] as const,
queryFn: async ({ signal, meta }) => {
const sp = new URLSearchParams({
pageSize: perPage.toString()
});
if (query?.trim()) {
sp.set("query", query);
}
const res = await meta!.api.get<
AxiosResponse<ListUserDevicesResponse>
>(`/org/${orgId}/user-devices?${sp.toString()}`, { signal });
return res.data.data.devices;
}
}),
users: ({ users: ({
orgId, orgId,
query, query,
@@ -329,7 +365,7 @@ export const orgQueries = {
} }
}), }),
resources: ({ proxyResources: ({
orgId, orgId,
query, query,
perPage = 10_000 perPage = 10_000
@@ -339,7 +375,12 @@ export const orgQueries = {
perPage?: number; perPage?: number;
}) => }) =>
queryOptions({ queryOptions({
queryKey: ["ORG", orgId, "RESOURCES", { query, perPage }] as const, queryKey: [
"ORG",
orgId,
"PROXY_RESOURCES",
{ query, perPage }
] as const,
queryFn: async ({ signal, meta }) => { queryFn: async ({ signal, meta }) => {
const sp = new URLSearchParams({ const sp = new URLSearchParams({
pageSize: perPage.toString() pageSize: perPage.toString()
@@ -357,6 +398,39 @@ export const orgQueries = {
} }
}), }),
privateResources: ({
orgId,
query,
perPage = 10_000
}: {
orgId: string;
query?: string;
perPage?: number;
}) =>
queryOptions({
queryKey: [
"ORG",
orgId,
"PRIVATE_RESOURCES",
{ query, perPage }
] as const,
queryFn: async ({ signal, meta }) => {
const sp = new URLSearchParams({
pageSize: perPage.toString()
});
if (query?.trim()) {
sp.set("query", query);
}
const res = await meta!.api.get<
AxiosResponse<ListAllSiteResourcesByOrgResponse>
>(`/org/${orgId}/site-resources?${sp.toString()}`, { signal });
return res.data.data.siteResources;
}
}),
healthChecks: ({ healthChecks: ({
orgId, orgId,
perPage = 10_000 perPage = 10_000