Compare commits

..

45 Commits

Author SHA1 Message Date
Owen Schwartz 2f3c23c552 New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-07-06 14:38:02 -04:00
Owen Schwartz 11dd7241d1 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-07-06 14:38:00 -04:00
Owen Schwartz 6ef539af4a New translations en-us.json (Turkish)
[ci skip]
2026-07-06 14:37:58 -04:00
Owen Schwartz 06c8a9a6d8 New translations en-us.json (Russian)
[ci skip]
2026-07-06 14:37:55 -04:00
Owen Schwartz 908ded8aee New translations en-us.json (Portuguese)
[ci skip]
2026-07-06 14:37:53 -04:00
Owen Schwartz 520507a3e6 New translations en-us.json (Polish)
[ci skip]
2026-07-06 14:37:50 -04:00
Owen Schwartz 38ea582265 New translations en-us.json (Dutch)
[ci skip]
2026-07-06 14:37:48 -04:00
Owen Schwartz dce63bdbbd New translations en-us.json (Korean)
[ci skip]
2026-07-06 14:37:46 -04:00
Owen Schwartz 0edf53f2b5 New translations en-us.json (Italian)
[ci skip]
2026-07-06 14:37:43 -04:00
Owen Schwartz ef8f3f1070 New translations en-us.json (German)
[ci skip]
2026-07-06 14:37:41 -04:00
Owen Schwartz 1bcf90ad76 New translations en-us.json (Danish)
[ci skip]
2026-07-06 14:37:39 -04:00
Owen Schwartz a2399a082a New translations en-us.json (Czech)
[ci skip]
2026-07-06 14:37:37 -04:00
Owen Schwartz fdee4a166c New translations en-us.json (Bulgarian)
[ci skip]
2026-07-06 14:37:35 -04:00
Owen Schwartz 91864ae097 New translations en-us.json (Spanish)
[ci skip]
2026-07-06 14:37:33 -04:00
Owen Schwartz 3536b9c30f New translations en-us.json (French)
[ci skip]
2026-07-06 14:37:31 -04:00
Owen Schwartz 3db28e5140 New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-07-03 17:35:49 -04:00
Owen Schwartz 2e95257e09 New translations en-us.json (Chinese Simplified)
[ci skip]
2026-07-03 17:35:47 -04:00
Owen Schwartz dcd6d6486d New translations en-us.json (Turkish)
[ci skip]
2026-07-03 17:35:45 -04:00
Owen Schwartz df145ac14c New translations en-us.json (Russian)
[ci skip]
2026-07-03 17:35:44 -04:00
Owen Schwartz 00de9ed49f New translations en-us.json (Portuguese)
[ci skip]
2026-07-03 17:35:42 -04:00
Owen Schwartz 3b6ce77972 New translations en-us.json (Polish)
[ci skip]
2026-07-03 17:35:40 -04:00
Owen Schwartz 5589e4da1d New translations en-us.json (Dutch)
[ci skip]
2026-07-03 17:35:38 -04:00
Owen Schwartz b662a4c06f New translations en-us.json (Korean)
[ci skip]
2026-07-03 17:35:36 -04:00
Owen Schwartz b4d0354740 New translations en-us.json (Italian)
[ci skip]
2026-07-03 17:35:35 -04:00
Owen Schwartz 949a0221d8 New translations en-us.json (German)
[ci skip]
2026-07-03 17:35:33 -04:00
Owen Schwartz c4b56b2b29 New translations en-us.json (Danish)
[ci skip]
2026-07-03 17:35:31 -04:00
Owen Schwartz da7676de14 New translations en-us.json (Czech)
[ci skip]
2026-07-03 17:35:30 -04:00
Owen Schwartz d2e7438692 New translations en-us.json (Bulgarian)
[ci skip]
2026-07-03 17:35:28 -04:00
Owen Schwartz b0f196b4ec New translations en-us.json (Spanish)
[ci skip]
2026-07-03 17:35:26 -04:00
Owen Schwartz ef9d15fded New translations en-us.json (French)
[ci skip]
2026-07-03 17:35:24 -04:00
Owen Schwartz 04a4a1899d New translations en-us.json (Norwegian Bokmal)
[ci skip]
2026-07-02 11:09:52 -04:00
Owen Schwartz f9c3d0647d New translations en-us.json (Chinese Simplified)
[ci skip]
2026-07-02 11:09:49 -04:00
Owen Schwartz 6bac384b19 New translations en-us.json (Turkish)
[ci skip]
2026-07-02 11:09:47 -04:00
Owen Schwartz bf4426f1f9 New translations en-us.json (Russian)
[ci skip]
2026-07-02 11:09:44 -04:00
Owen Schwartz 7bf419d058 New translations en-us.json (Portuguese)
[ci skip]
2026-07-02 11:09:42 -04:00
Owen Schwartz e85ebe717c New translations en-us.json (Polish)
[ci skip]
2026-07-02 11:09:39 -04:00
Owen Schwartz 2ec527f5d7 New translations en-us.json (Dutch)
[ci skip]
2026-07-02 11:09:37 -04:00
Owen Schwartz d334e6c3a5 New translations en-us.json (Korean)
[ci skip]
2026-07-02 11:09:35 -04:00
Owen Schwartz 755281abc3 New translations en-us.json (Italian)
[ci skip]
2026-07-02 11:09:32 -04:00
Owen Schwartz 7b05ad6b1d New translations en-us.json (German)
[ci skip]
2026-07-02 11:09:30 -04:00
Owen Schwartz edbd1a743e New translations en-us.json (Danish)
[ci skip]
2026-07-02 11:09:27 -04:00
Owen Schwartz fa5397095d New translations en-us.json (Czech)
[ci skip]
2026-07-02 11:09:24 -04:00
Owen Schwartz 3f914c4eab New translations en-us.json (Bulgarian)
[ci skip]
2026-07-02 11:09:22 -04:00
Owen Schwartz 18b1460615 New translations en-us.json (Spanish)
[ci skip]
2026-07-02 11:09:19 -04:00
Owen Schwartz 267ee63a60 New translations en-us.json (French)
[ci skip]
2026-07-02 11:09:17 -04:00
29 changed files with 650 additions and 633 deletions
+35 -5
View File
@@ -864,8 +864,8 @@
"policyAuthHeaderAuthTitle": "Базово удостоверяване чрез заглавие", "policyAuthHeaderAuthTitle": "Базово удостоверяване чрез заглавие",
"policyAuthHeaderAuthDescription": "Валидирайте собствено HTTP заглавие и стойност при всяка заявка", "policyAuthHeaderAuthDescription": "Валидирайте собствено HTTP заглавие и стойност при всяка заявка",
"policyAuthHeaderAuthSummary": "Конфигурирано заглавие", "policyAuthHeaderAuthSummary": "Конфигурирано заглавие",
"policyAuthHeaderName": "Име на заглавието", "policyAuthHeaderName": "Username",
"policyAuthHeaderValue": "Очаквана стойност", "policyAuthHeaderValue": "Password",
"policyAuthSetPasscode": "Задайте парола", "policyAuthSetPasscode": "Задайте парола",
"policyAuthSetPincode": "Задайте ПИН код", "policyAuthSetPincode": "Задайте ПИН код",
"policyAuthSetEmailWhitelist": "Задайте списък с имейли", "policyAuthSetEmailWhitelist": "Задайте списък с имейли",
@@ -1915,6 +1915,9 @@
"billingDomains": "Домейни", "billingDomains": "Домейни",
"billingOrganizations": "Организации", "billingOrganizations": "Организации",
"billingRemoteExitNodes": "Дистанционни възли", "billingRemoteExitNodes": "Дистанционни възли",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"billingNoLimitConfigured": "Няма конфигуриран лимит", "billingNoLimitConfigured": "Няма конфигуриран лимит",
"billingEstimatedPeriod": "Очакван период на фактуриране", "billingEstimatedPeriod": "Очакван период на фактуриране",
"billingIncludedUsage": "Включено използване", "billingIncludedUsage": "Включено използване",
@@ -1943,6 +1946,9 @@
"billingUsersInfo": "Колко потребители можете да използвате", "billingUsersInfo": "Колко потребители можете да използвате",
"billingDomainInfo": "Колко домейни можете да използвате", "billingDomainInfo": "Колко домейни можете да използвате",
"billingRemoteExitNodesInfo": "Колко дистанционни възли можете да използвате", "billingRemoteExitNodesInfo": "Колко дистанционни възли можете да използвате",
"billingPublicResourcesInfo": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "Лицензионни ключове", "billingLicenseKeys": "Лицензионни ключове",
"billingLicenseKeysDescription": "Управлявайте вашите абонаменти за лицензионни ключове", "billingLicenseKeysDescription": "Управлявайте вашите абонаменти за лицензионни ключове",
"billingLicenseSubscription": "Абонамент за лиценз", "billingLicenseSubscription": "Абонамент за лиценз",
@@ -3571,18 +3577,23 @@
"memberPortalResourceDisabled": "Ресурсът е деактивиран", "memberPortalResourceDisabled": "Ресурсът е деактивиран",
"memberPortalShowingResources": "Показва {start}-{end} от {total} ресурси", "memberPortalShowingResources": "Показва {start}-{end} от {total} ресурси",
"resourceLauncherTitle": "Стартер за Ресурси", "resourceLauncherTitle": "Стартер за Ресурси",
"resourceLauncherDescription": "Преглеждайте детайлите на ресурса и ги стартирайте от едно място", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Търсете във всички сайтове...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "По Подразбиране", "resourceLauncherDefaultView": "По Подразбиране",
"resourceLauncherSaveView": "Запазете Изгледа", "resourceLauncherSaveView": "Запазете Изгледа",
"resourceLauncherSaveToCurrentView": "Запазете в Текущ Изглед", "resourceLauncherSaveToCurrentView": "Запазете в Текущ Изглед",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "Нулирайте Изгледа", "resourceLauncherResetView": "Нулирайте Изгледа",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"resourceLauncherSaveAsNewView": "Запазете като Нов Изглед", "resourceLauncherSaveAsNewView": "Запазете като Нов Изглед",
"resourceLauncherSaveAsNewViewDescription": "Дайте име на този изглед, за да запазите текущите си филтри и оформление.", "resourceLauncherSaveAsNewViewDescription": "Дайте име на този изглед, за да запазите текущите си филтри и оформление.",
"resourceLauncherSaveForEveryone": "Запазете за Всеки", "resourceLauncherSaveForEveryone": "Запазете за Всеки",
"resourceLauncherSaveForEveryoneDescription": "Споделете този изглед с всички членове на организацията. Когато е изключено, изгледът е видим само за вас.", "resourceLauncherSaveForEveryoneDescription": "Споделете този изглед с всички членове на организацията. Когато е изключено, изгледът е видим само за вас.",
"resourceLauncherMakePersonal": "Направи Личен", "resourceLauncherMakePersonal": "Направи Личен",
"resourceLauncherFilter": "Филтър", "resourceLauncherFilter": "Филтър",
"resourceLauncherFilterWithCount": "Filter, {count} applied",
"resourceLauncherSort": "Сортиране", "resourceLauncherSort": "Сортиране",
"resourceLauncherSortAscending": "Сортиране възходящо", "resourceLauncherSortAscending": "Сортиране възходящо",
"resourceLauncherSortDescending": "Сортиране низходящо", "resourceLauncherSortDescending": "Сортиране низходящо",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Групирай По", "resourceLauncherGroupBy": "Групирай По",
"resourceLauncherGroupBySite": "Сайт", "resourceLauncherGroupBySite": "Сайт",
"resourceLauncherGroupByLabel": "Етикет", "resourceLauncherGroupByLabel": "Етикет",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Оформление", "resourceLauncherLayout": "Оформление",
"resourceLauncherLayoutGrid": "Мрежа", "resourceLauncherLayoutGrid": "Мрежа",
"resourceLauncherLayoutList": "Списък", "resourceLauncherLayoutList": "Списък",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "Показване на Тагове на Сайт", "resourceLauncherShowSiteTags": "Показване на Тагове на Сайт",
"resourceLauncherShowRecents": "Показване на Последни", "resourceLauncherShowRecents": "Показване на Последни",
"resourceLauncherDeleteView": "Изтриване на Изглед", "resourceLauncherDeleteView": "Изтриване на Изглед",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Вижте като Админ", "resourceLauncherViewAsAdmin": "Вижте като Админ",
"resourceLauncherResourceDetailsDescription": "Вижте детайлите за този ресурс.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Без Етикет", "resourceLauncherUnlabeled": "Без Етикет",
"resourceLauncherNoSite": "Няма Сайт", "resourceLauncherNoSite": "Няма Сайт",
"resourceLauncherNoResourcesInGroup": "Няма ресурси в тази група", "resourceLauncherNoResourcesInGroup": "Няма ресурси в тази група",
@@ -3607,6 +3631,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Няма Намерени Ресурси", "resourceLauncherEmptyStateNoResultsTitle": "Няма Намерени Ресурси",
"resourceLauncherEmptyStateNoResultsDescription": "Никакви ресурси не съвпадат с текущото ви търсене или филтри. Опитайте да ги коригирате, за да намерите това, което търсите.", "resourceLauncherEmptyStateNoResultsDescription": "Никакви ресурси не съвпадат с текущото ви търсене или филтри. Опитайте да ги коригирате, за да намерите това, което търсите.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Никакви ресурси не съвпадат с \"{query}\". Опитайте да коригирате търсенето или да изтриете филтри, за да видите всички ресурси.", "resourceLauncherEmptyStateNoResultsWithQuery": "Никакви ресурси не съвпадат с \"{query}\". Опитайте да коригирате търсенето или да изтриете филтри, за да видите всички ресурси.",
"resourceLauncherSearchFirstTitle": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"resourceLauncherCopiedToClipboard": "Копирано в клипборда", "resourceLauncherCopiedToClipboard": "Копирано в клипборда",
"resourceLauncherCopiedAccessDescription": "Достъпът до ресурса е копиран на вашия клипборд.", "resourceLauncherCopiedAccessDescription": "Достъпът до ресурса е копиран на вашия клипборд.",
"resourceLauncherViewNamePlaceholder": "Име на Изгледа", "resourceLauncherViewNamePlaceholder": "Име на Изгледа",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Očekávaná hodnota", "policyAuthHeaderValue": "Password",
"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",
@@ -1915,6 +1915,9 @@
"billingDomains": "Domény", "billingDomains": "Domény",
"billingOrganizations": "Tělo", "billingOrganizations": "Tělo",
"billingRemoteExitNodes": "Vzdálené uzly", "billingRemoteExitNodes": "Vzdálené uzly",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"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 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"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",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Hledat všechny lokality...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"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": "Save for Me",
"resourceLauncherResetView": "Obnovit pohled", "resourceLauncherResetView": "Obnovit pohled",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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": "Filter, {count} applied",
"resourceLauncherSort": "Řadit", "resourceLauncherSort": "Řadit",
"resourceLauncherSortAscending": "Řadit vzestupně", "resourceLauncherSortAscending": "Řadit vzestupně",
"resourceLauncherSortDescending": "Řadit sestupně", "resourceLauncherSortDescending": "Řadit sestupně",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Seskupit podle", "resourceLauncherGroupBy": "Seskupit podle",
"resourceLauncherGroupBySite": "Lokalita", "resourceLauncherGroupBySite": "Lokalita",
"resourceLauncherGroupByLabel": "Název", "resourceLauncherGroupByLabel": "Název",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Rozvržení", "resourceLauncherLayout": "Rozvržení",
"resourceLauncherLayoutGrid": "Mřížka", "resourceLauncherLayoutGrid": "Mřížka",
"resourceLauncherLayoutList": "Seznam", "resourceLauncherLayoutList": "Seznam",
@@ -3597,8 +3609,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": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Zobrazit jako administrátor", "resourceLauncherViewAsAdmin": "Zobrazit jako administrátor",
"resourceLauncherResourceDetailsDescription": "Podívejte se na podrobnosti o tomto zdroji.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Forventet værdi", "policyAuthHeaderValue": "Password",
"policyAuthSetPasscode": "Angiv adgangskode", "policyAuthSetPasscode": "Angiv adgangskode",
"policyAuthSetPincode": "Sett PIN-kode", "policyAuthSetPincode": "Sett PIN-kode",
"policyAuthSetEmailWhitelist": "Angiv e-mail hviteliste", "policyAuthSetEmailWhitelist": "Angiv e-mail hviteliste",
@@ -1915,6 +1915,9 @@
"billingDomains": "Domæner", "billingDomains": "Domæner",
"billingOrganizations": "Orger", "billingOrganizations": "Orger",
"billingRemoteExitNodes": "Eksterne noder", "billingRemoteExitNodes": "Eksterne noder",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"billingNoLimitConfigured": "Ingen grænse konfigureret", "billingNoLimitConfigured": "Ingen grænse konfigureret",
"billingEstimatedPeriod": "Estimert faktureringsperiode", "billingEstimatedPeriod": "Estimert faktureringsperiode",
"billingIncludedUsage": "Inklusive Brug", "billingIncludedUsage": "Inklusive Brug",
@@ -1943,6 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "Licensnøgler", "billingLicenseKeys": "Licensnøgler",
"billingLicenseKeysDescription": "Administrer dine licensnøgleabonnementer", "billingLicenseKeysDescription": "Administrer dine licensnøgleabonnementer",
"billingLicenseSubscription": "Licens abonnement", "billingLicenseSubscription": "Licens abonnement",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Søg i alle sites...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "Standard", "resourceLauncherDefaultView": "Standard",
"resourceLauncherSaveView": "Gem Visning", "resourceLauncherSaveView": "Gem Visning",
"resourceLauncherSaveToCurrentView": "Gem til nuværende visning", "resourceLauncherSaveToCurrentView": "Gem til nuværende visning",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "Nulstil Visning", "resourceLauncherResetView": "Nulstil Visning",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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} applied",
"resourceLauncherSort": "Sortér", "resourceLauncherSort": "Sortér",
"resourceLauncherSortAscending": "Sortér stigende", "resourceLauncherSortAscending": "Sortér stigende",
"resourceLauncherSortDescending": "Sortér faldende", "resourceLauncherSortDescending": "Sortér faldende",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Gruppér Efter", "resourceLauncherGroupBy": "Gruppér Efter",
"resourceLauncherGroupBySite": "Websted", "resourceLauncherGroupBySite": "Websted",
"resourceLauncherGroupByLabel": "Etikett", "resourceLauncherGroupByLabel": "Etikett",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Layout", "resourceLauncherLayout": "Layout",
"resourceLauncherLayoutGrid": "Gitter", "resourceLauncherLayoutGrid": "Gitter",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "Vis Site Tags", "resourceLauncherShowSiteTags": "Vis Site Tags",
"resourceLauncherShowRecents": "Vis Seneste", "resourceLauncherShowRecents": "Vis Seneste",
"resourceLauncherDeleteView": "Slet Visning", "resourceLauncherDeleteView": "Slet Visning",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Vis som Admin", "resourceLauncherViewAsAdmin": "Vis som Admin",
"resourceLauncherResourceDetailsDescription": "Se detaljer for denne ressource.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Erwarteter Wert", "policyAuthHeaderValue": "Password",
"policyAuthSetPasscode": "Passcode setzen", "policyAuthSetPasscode": "Passcode setzen",
"policyAuthSetPincode": "PIN-Code festlegen", "policyAuthSetPincode": "PIN-Code festlegen",
"policyAuthSetEmailWhitelist": "E-Mail-Whitelist festlegen", "policyAuthSetEmailWhitelist": "E-Mail-Whitelist festlegen",
@@ -1915,6 +1915,9 @@
"billingDomains": "Domänen", "billingDomains": "Domänen",
"billingOrganizations": "Orden", "billingOrganizations": "Orden",
"billingRemoteExitNodes": "Entfernte Knoten", "billingRemoteExitNodes": "Entfernte Knoten",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine 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 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "Lizenzschlüssel", "billingLicenseKeys": "Lizenzschlüssel",
"billingLicenseKeysDescription": "Verwalten Sie Ihre Lizenzschlüssel Abonnements", "billingLicenseKeysDescription": "Verwalten Sie Ihre Lizenzschlüssel Abonnements",
"billingLicenseSubscription": "Lizenzabonnement", "billingLicenseSubscription": "Lizenzabonnement",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Alle Standorte durchsuchen...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "Standard", "resourceLauncherDefaultView": "Standard",
"resourceLauncherSaveView": "Ansicht speichern", "resourceLauncherSaveView": "Ansicht speichern",
"resourceLauncherSaveToCurrentView": "In aktueller Ansicht speichern", "resourceLauncherSaveToCurrentView": "In aktueller Ansicht speichern",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "Ansicht zurücksetzen", "resourceLauncherResetView": "Ansicht zurücksetzen",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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 +3601,7 @@
"resourceLauncherGroupBy": "Gruppieren nach", "resourceLauncherGroupBy": "Gruppieren nach",
"resourceLauncherGroupBySite": "Standort", "resourceLauncherGroupBySite": "Standort",
"resourceLauncherGroupByLabel": "Etikett", "resourceLauncherGroupByLabel": "Etikett",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Layout", "resourceLauncherLayout": "Layout",
"resourceLauncherLayoutGrid": "Raster", "resourceLauncherLayoutGrid": "Raster",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3609,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": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Ansicht als Administrator anzeigen", "resourceLauncherViewAsAdmin": "Ansicht als Administrator anzeigen",
"resourceLauncherResourceDetailsDescription": "Anzeigen von Details zu dieser Ressource.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
-7
View File
@@ -1503,7 +1503,6 @@
"otpAuthDescription": "Enter the code from your authenticator app or one of your single-use backup codes.", "otpAuthDescription": "Enter the code from your authenticator app or one of your single-use backup codes.",
"otpAuthSubmit": "Submit Code", "otpAuthSubmit": "Submit Code",
"idpContinue": "Or continue with", "idpContinue": "Or continue with",
"idpLastUsed": "Last used",
"otpAuthBack": "Back to Password", "otpAuthBack": "Back to Password",
"navbar": "Navigation Menu", "navbar": "Navigation Menu",
"navbarDescription": "Main navigation menu for the application", "navbarDescription": "Main navigation menu for the application",
@@ -1916,9 +1915,6 @@
"billingDomains": "Domains", "billingDomains": "Domains",
"billingOrganizations": "Orgs", "billingOrganizations": "Orgs",
"billingRemoteExitNodes": "Remote Nodes", "billingRemoteExitNodes": "Remote Nodes",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"billingNoLimitConfigured": "No limit configured", "billingNoLimitConfigured": "No limit configured",
"billingEstimatedPeriod": "Estimated Billing Period", "billingEstimatedPeriod": "Estimated Billing Period",
"billingIncludedUsage": "Included Usage", "billingIncludedUsage": "Included Usage",
@@ -1947,9 +1943,6 @@
"billingUsersInfo": "How many users you can use", "billingUsersInfo": "How many users you can use",
"billingDomainInfo": "How many domains you can use", "billingDomainInfo": "How many domains you can use",
"billingRemoteExitNodesInfo": "How many remote nodes you can use", "billingRemoteExitNodesInfo": "How many remote nodes you can use",
"billingPublicResourcesInfo": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "License Keys", "billingLicenseKeys": "License Keys",
"billingLicenseKeysDescription": "Manage your license key subscriptions", "billingLicenseKeysDescription": "Manage your license key subscriptions",
"billingLicenseSubscription": "License Subscription", "billingLicenseSubscription": "License Subscription",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Valor esperado", "policyAuthHeaderValue": "Password",
"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",
@@ -1915,6 +1915,9 @@
"billingDomains": "Dominios", "billingDomains": "Dominios",
"billingOrganizations": "Orgánico", "billingOrganizations": "Orgánico",
"billingRemoteExitNodes": "Nodos remotos", "billingRemoteExitNodes": "Nodos remotos",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"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 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"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",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Buscar en todos los sitios...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "Predeterminado", "resourceLauncherDefaultView": "Predeterminado",
"resourceLauncherSaveView": "Guardar Vista", "resourceLauncherSaveView": "Guardar Vista",
"resourceLauncherSaveToCurrentView": "Guardar en la Vista Actual", "resourceLauncherSaveToCurrentView": "Guardar en la Vista Actual",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "Restablecer Vista", "resourceLauncherResetView": "Restablecer Vista",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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": "Filter, {count} applied",
"resourceLauncherSort": "Ordenar", "resourceLauncherSort": "Ordenar",
"resourceLauncherSortAscending": "Ordenar Ascendente", "resourceLauncherSortAscending": "Ordenar Ascendente",
"resourceLauncherSortDescending": "Ordenar Descendente", "resourceLauncherSortDescending": "Ordenar Descendente",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Agrupar Por", "resourceLauncherGroupBy": "Agrupar Por",
"resourceLauncherGroupBySite": "Sitio", "resourceLauncherGroupBySite": "Sitio",
"resourceLauncherGroupByLabel": "Etiqueta", "resourceLauncherGroupByLabel": "Etiqueta",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Disposición", "resourceLauncherLayout": "Disposición",
"resourceLauncherLayoutGrid": "Cuadrícula", "resourceLauncherLayoutGrid": "Cuadrícula",
"resourceLauncherLayoutList": "Lista", "resourceLauncherLayoutList": "Lista",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "Mostrar Etiquetas del Sitio", "resourceLauncherShowSiteTags": "Mostrar Etiquetas del Sitio",
"resourceLauncherShowRecents": "Mostrar Recientes", "resourceLauncherShowRecents": "Mostrar Recientes",
"resourceLauncherDeleteView": "Eliminar Vista", "resourceLauncherDeleteView": "Eliminar Vista",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Ver como Administrador", "resourceLauncherViewAsAdmin": "Ver como Administrador",
"resourceLauncherResourceDetailsDescription": "Ver detalles de este recurso.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Valeur attendue", "policyAuthHeaderValue": "Password",
"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",
@@ -1915,6 +1915,9 @@
"billingDomains": "Domaines", "billingDomains": "Domaines",
"billingOrganizations": "Organes", "billingOrganizations": "Organes",
"billingRemoteExitNodes": "Nœuds distants", "billingRemoteExitNodes": "Nœuds distants",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"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 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"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",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Rechercher sur tous les sites...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"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": "Save for Me",
"resourceLauncherResetView": "Réinitialiser la vue", "resourceLauncherResetView": "Réinitialiser la vue",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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": "Filter, {count} applied",
"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 +3601,7 @@
"resourceLauncherGroupBy": "Grouper par", "resourceLauncherGroupBy": "Grouper par",
"resourceLauncherGroupBySite": "Nœud", "resourceLauncherGroupBySite": "Nœud",
"resourceLauncherGroupByLabel": "Étiquette", "resourceLauncherGroupByLabel": "Étiquette",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Mise en page", "resourceLauncherLayout": "Mise en page",
"resourceLauncherLayoutGrid": "Grille", "resourceLauncherLayoutGrid": "Grille",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3609,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": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Voir en tant qu'admin", "resourceLauncherViewAsAdmin": "Voir en tant qu'admin",
"resourceLauncherResourceDetailsDescription": "Afficher les détails pour cette ressource.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"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",
@@ -1915,6 +1915,9 @@
"billingDomains": "Domini", "billingDomains": "Domini",
"billingOrganizations": "Organi", "billingOrganizations": "Organi",
"billingRemoteExitNodes": "Nodi Remoti", "billingRemoteExitNodes": "Nodi Remoti",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"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 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"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",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Cerca tutti i siti...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "Predefinito", "resourceLauncherDefaultView": "Predefinito",
"resourceLauncherSaveView": "Salva Visualizzazione", "resourceLauncherSaveView": "Salva Visualizzazione",
"resourceLauncherSaveToCurrentView": "Salva alla Visualizzazione Corrente", "resourceLauncherSaveToCurrentView": "Salva alla Visualizzazione Corrente",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "Reimposta Visualizzazione", "resourceLauncherResetView": "Reimposta Visualizzazione",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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": "Filter, {count} applied",
"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 +3601,7 @@
"resourceLauncherGroupBy": "Raggruppa per", "resourceLauncherGroupBy": "Raggruppa per",
"resourceLauncherGroupBySite": "Sito", "resourceLauncherGroupBySite": "Sito",
"resourceLauncherGroupByLabel": "Etichetta", "resourceLauncherGroupByLabel": "Etichetta",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Layout", "resourceLauncherLayout": "Layout",
"resourceLauncherLayoutGrid": "Griglia", "resourceLauncherLayoutGrid": "Griglia",
"resourceLauncherLayoutList": "Lista", "resourceLauncherLayoutList": "Lista",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "Mostra Tag di Sito", "resourceLauncherShowSiteTags": "Mostra Tag di Sito",
"resourceLauncherShowRecents": "Mostra Recenti", "resourceLauncherShowRecents": "Mostra Recenti",
"resourceLauncherDeleteView": "Elimina Visualizzazione", "resourceLauncherDeleteView": "Elimina Visualizzazione",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Visualizza come Admin", "resourceLauncherViewAsAdmin": "Visualizza come Admin",
"resourceLauncherResourceDetailsDescription": "Visualizza i dettagli per questa risorsa.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,8 @@
"policyAuthHeaderAuthTitle": "기본 헤더 인증", "policyAuthHeaderAuthTitle": "기본 헤더 인증",
"policyAuthHeaderAuthDescription": "각 요청에서 맞춤 HTTP 헤더 이름 및 값을 검증", "policyAuthHeaderAuthDescription": "각 요청에서 맞춤 HTTP 헤더 이름 및 값을 검증",
"policyAuthHeaderAuthSummary": "헤더 구성됨", "policyAuthHeaderAuthSummary": "헤더 구성됨",
"policyAuthHeaderName": "헤더 이름", "policyAuthHeaderName": "Username",
"policyAuthHeaderValue": "예상 값", "policyAuthHeaderValue": "Password",
"policyAuthSetPasscode": "패스코드 설정", "policyAuthSetPasscode": "패스코드 설정",
"policyAuthSetPincode": "PIN 코드 설정", "policyAuthSetPincode": "PIN 코드 설정",
"policyAuthSetEmailWhitelist": "이메일 화이트리스트 설정", "policyAuthSetEmailWhitelist": "이메일 화이트리스트 설정",
@@ -1915,6 +1915,9 @@
"billingDomains": "도메인", "billingDomains": "도메인",
"billingOrganizations": "조직", "billingOrganizations": "조직",
"billingRemoteExitNodes": "원격 노드", "billingRemoteExitNodes": "원격 노드",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"billingNoLimitConfigured": "구성된 한도가 없습니다.", "billingNoLimitConfigured": "구성된 한도가 없습니다.",
"billingEstimatedPeriod": "예상 청구 기간", "billingEstimatedPeriod": "예상 청구 기간",
"billingIncludedUsage": "포함 사용량", "billingIncludedUsage": "포함 사용량",
@@ -1943,6 +1946,9 @@
"billingUsersInfo": "사용할 수 있는 사용자 수", "billingUsersInfo": "사용할 수 있는 사용자 수",
"billingDomainInfo": "사용할 수 있는 도메인 수", "billingDomainInfo": "사용할 수 있는 도메인 수",
"billingRemoteExitNodesInfo": "사용할 수 있는 원격 노드 수", "billingRemoteExitNodesInfo": "사용할 수 있는 원격 노드 수",
"billingPublicResourcesInfo": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "라이센스 키", "billingLicenseKeys": "라이센스 키",
"billingLicenseKeysDescription": "라이센스 키 구독을 관리하세요", "billingLicenseKeysDescription": "라이센스 키 구독을 관리하세요",
"billingLicenseSubscription": "라이센스 구독", "billingLicenseSubscription": "라이센스 구독",
@@ -3571,18 +3577,23 @@
"memberPortalResourceDisabled": "리소스 비활성화됨", "memberPortalResourceDisabled": "리소스 비활성화됨",
"memberPortalShowingResources": "{start}-{end} 중 {total}개의 리소스를 표시 중", "memberPortalShowingResources": "{start}-{end} 중 {total}개의 리소스를 표시 중",
"resourceLauncherTitle": "리소스 런처", "resourceLauncherTitle": "리소스 런처",
"resourceLauncherDescription": "리소스 세부 정보를 보고 한 곳에서 실행하세요", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "모든 사이트 검색...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "기본값", "resourceLauncherDefaultView": "기본값",
"resourceLauncherSaveView": "보기를 저장", "resourceLauncherSaveView": "보기를 저장",
"resourceLauncherSaveToCurrentView": "현재 보기로 저장", "resourceLauncherSaveToCurrentView": "현재 보기로 저장",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "보기를 재설정", "resourceLauncherResetView": "보기를 재설정",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"resourceLauncherSaveAsNewView": "새 보기로 저장", "resourceLauncherSaveAsNewView": "새 보기로 저장",
"resourceLauncherSaveAsNewViewDescription": "현재 필터와 레이아웃을 저장할 이름을 입력하세요.", "resourceLauncherSaveAsNewViewDescription": "현재 필터와 레이아웃을 저장할 이름을 입력하세요.",
"resourceLauncherSaveForEveryone": "모두에게 저장", "resourceLauncherSaveForEveryone": "모두에게 저장",
"resourceLauncherSaveForEveryoneDescription": "이 보기를 모든 조직 구성원과 공유합니다. 체크 해제하면 해당 뷰는 사용자에게만 표시됩니다.", "resourceLauncherSaveForEveryoneDescription": "이 보기를 모든 조직 구성원과 공유합니다. 체크 해제하면 해당 뷰는 사용자에게만 표시됩니다.",
"resourceLauncherMakePersonal": "개인적으로 만들기", "resourceLauncherMakePersonal": "개인적으로 만들기",
"resourceLauncherFilter": "필터", "resourceLauncherFilter": "필터",
"resourceLauncherFilterWithCount": "Filter, {count} applied",
"resourceLauncherSort": "정렬", "resourceLauncherSort": "정렬",
"resourceLauncherSortAscending": "오름차순 정렬", "resourceLauncherSortAscending": "오름차순 정렬",
"resourceLauncherSortDescending": "내림차순 정렬", "resourceLauncherSortDescending": "내림차순 정렬",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "그룹화 기준", "resourceLauncherGroupBy": "그룹화 기준",
"resourceLauncherGroupBySite": "사이트", "resourceLauncherGroupBySite": "사이트",
"resourceLauncherGroupByLabel": "레이블", "resourceLauncherGroupByLabel": "레이블",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "레이아웃", "resourceLauncherLayout": "레이아웃",
"resourceLauncherLayoutGrid": "그리드", "resourceLauncherLayoutGrid": "그리드",
"resourceLauncherLayoutList": "목록", "resourceLauncherLayoutList": "목록",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "사이트 태그 표시", "resourceLauncherShowSiteTags": "사이트 태그 표시",
"resourceLauncherShowRecents": "최근 항목 표시", "resourceLauncherShowRecents": "최근 항목 표시",
"resourceLauncherDeleteView": "보기 삭제", "resourceLauncherDeleteView": "보기 삭제",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "관리자로 보기", "resourceLauncherViewAsAdmin": "관리자로 보기",
"resourceLauncherResourceDetailsDescription": "이 리소스의 세부정보를 봅니다.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "레이블 없음", "resourceLauncherUnlabeled": "레이블 없음",
"resourceLauncherNoSite": "사이트 없음", "resourceLauncherNoSite": "사이트 없음",
"resourceLauncherNoResourcesInGroup": "이 그룹에는 리소스가 없습니다", "resourceLauncherNoResourcesInGroup": "이 그룹에는 리소스가 없습니다",
@@ -3607,6 +3631,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "리소스를 찾을 수 없음", "resourceLauncherEmptyStateNoResultsTitle": "리소스를 찾을 수 없음",
"resourceLauncherEmptyStateNoResultsDescription": "현재 검색이나 필터에 맞는 리소스가 없습니다. 필터를 조정하여 찾으려는 항목을 확인해보세요.", "resourceLauncherEmptyStateNoResultsDescription": "현재 검색이나 필터에 맞는 리소스가 없습니다. 필터를 조정하여 찾으려는 항목을 확인해보세요.",
"resourceLauncherEmptyStateNoResultsWithQuery": "\"{query}\"와 일치하는 리소스가 없습니다. 검색을 조정하거나 필터를 지워서 모든 리소스를 확인해보세요.", "resourceLauncherEmptyStateNoResultsWithQuery": "\"{query}\"와 일치하는 리소스가 없습니다. 검색을 조정하거나 필터를 지워서 모든 리소스를 확인해보세요.",
"resourceLauncherSearchFirstTitle": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"resourceLauncherCopiedToClipboard": "클립보드에 복사됨", "resourceLauncherCopiedToClipboard": "클립보드에 복사됨",
"resourceLauncherCopiedAccessDescription": "리소스 액세스가 클립보드에 복사되었습니다.", "resourceLauncherCopiedAccessDescription": "리소스 액세스가 클립보드에 복사되었습니다.",
"resourceLauncherViewNamePlaceholder": "보기 이름", "resourceLauncherViewNamePlaceholder": "보기 이름",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Forventet verdi", "policyAuthHeaderValue": "Password",
"policyAuthSetPasscode": "Angi passordkode", "policyAuthSetPasscode": "Angi passordkode",
"policyAuthSetPincode": "Sett PIN-kode", "policyAuthSetPincode": "Sett PIN-kode",
"policyAuthSetEmailWhitelist": "Angi e-post hviteliste", "policyAuthSetEmailWhitelist": "Angi e-post hviteliste",
@@ -1915,6 +1915,9 @@
"billingDomains": "Domener", "billingDomains": "Domener",
"billingOrganizations": "Orger", "billingOrganizations": "Orger",
"billingRemoteExitNodes": "Eksterne Noder", "billingRemoteExitNodes": "Eksterne Noder",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"billingNoLimitConfigured": "Ingen grense konfigurert", "billingNoLimitConfigured": "Ingen grense konfigurert",
"billingEstimatedPeriod": "Estimert faktureringsperiode", "billingEstimatedPeriod": "Estimert faktureringsperiode",
"billingIncludedUsage": "Inkludert Bruk", "billingIncludedUsage": "Inkludert Bruk",
@@ -1943,6 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "Lisensnøkler", "billingLicenseKeys": "Lisensnøkler",
"billingLicenseKeysDescription": "Administrer dine lisensnøkkelabonnementer", "billingLicenseKeysDescription": "Administrer dine lisensnøkkelabonnementer",
"billingLicenseSubscription": "Lisens abonnement", "billingLicenseSubscription": "Lisens abonnement",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Søk i alle områder...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"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": "Save for Me",
"resourceLauncherResetView": "Tilbakestill visning", "resourceLauncherResetView": "Tilbakestill visning",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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} applied",
"resourceLauncherSort": "Sorter", "resourceLauncherSort": "Sorter",
"resourceLauncherSortAscending": "Sorter stigende", "resourceLauncherSortAscending": "Sorter stigende",
"resourceLauncherSortDescending": "Sorter synkende", "resourceLauncherSortDescending": "Sorter synkende",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Grupper etter", "resourceLauncherGroupBy": "Grupper etter",
"resourceLauncherGroupBySite": "Område", "resourceLauncherGroupBySite": "Område",
"resourceLauncherGroupByLabel": "Etikett", "resourceLauncherGroupByLabel": "Etikett",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Oppsett", "resourceLauncherLayout": "Oppsett",
"resourceLauncherLayoutGrid": "Rutenett", "resourceLauncherLayoutGrid": "Rutenett",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "Vis områdestikkord", "resourceLauncherShowSiteTags": "Vis områdestikkord",
"resourceLauncherShowRecents": "Vis nylige", "resourceLauncherShowRecents": "Vis nylige",
"resourceLauncherDeleteView": "Slett visning", "resourceLauncherDeleteView": "Slett visning",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Vis som administrator", "resourceLauncherViewAsAdmin": "Vis som administrator",
"resourceLauncherResourceDetailsDescription": "Vis detaljer for denne ressursen.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Verwachte waarde", "policyAuthHeaderValue": "Password",
"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",
@@ -1915,6 +1915,9 @@
"billingDomains": "Domeinen", "billingDomains": "Domeinen",
"billingOrganizations": "Ordenen", "billingOrganizations": "Ordenen",
"billingRemoteExitNodes": "Externe knooppunten", "billingRemoteExitNodes": "Externe knooppunten",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"billingNoLimitConfigured": "Geen limiet ingesteld", "billingNoLimitConfigured": "Geen limiet ingesteld",
"billingEstimatedPeriod": "Geschatte Facturatie Periode", "billingEstimatedPeriod": "Geschatte Facturatie Periode",
"billingIncludedUsage": "Opgenomen Gebruik", "billingIncludedUsage": "Opgenomen Gebruik",
@@ -1943,6 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "Licentie Sleutels", "billingLicenseKeys": "Licentie Sleutels",
"billingLicenseKeysDescription": "Beheer uw licentiesleutelabonnementen", "billingLicenseKeysDescription": "Beheer uw licentiesleutelabonnementen",
"billingLicenseSubscription": "Licentie abonnement", "billingLicenseSubscription": "Licentie abonnement",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Zoek alle sites...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "Standaard", "resourceLauncherDefaultView": "Standaard",
"resourceLauncherSaveView": "Weergave Opslaan", "resourceLauncherSaveView": "Weergave Opslaan",
"resourceLauncherSaveToCurrentView": "Opslaan naar huidige weergave", "resourceLauncherSaveToCurrentView": "Opslaan naar huidige weergave",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "Weergave Herstellen", "resourceLauncherResetView": "Weergave Herstellen",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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} applied",
"resourceLauncherSort": "Sorteren", "resourceLauncherSort": "Sorteren",
"resourceLauncherSortAscending": "Oplopend sorteren", "resourceLauncherSortAscending": "Oplopend sorteren",
"resourceLauncherSortDescending": "Aflopend sorteren", "resourceLauncherSortDescending": "Aflopend sorteren",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Groep Op", "resourceLauncherGroupBy": "Groep Op",
"resourceLauncherGroupBySite": "Site", "resourceLauncherGroupBySite": "Site",
"resourceLauncherGroupByLabel": "Label", "resourceLauncherGroupByLabel": "Label",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Lay-out", "resourceLauncherLayout": "Lay-out",
"resourceLauncherLayoutGrid": "Raster", "resourceLauncherLayoutGrid": "Raster",
"resourceLauncherLayoutList": "Lijst", "resourceLauncherLayoutList": "Lijst",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "Site Tags Weergeven", "resourceLauncherShowSiteTags": "Site Tags Weergeven",
"resourceLauncherShowRecents": "Recente Weergeven", "resourceLauncherShowRecents": "Recente Weergeven",
"resourceLauncherDeleteView": "Weergave Verwijderen", "resourceLauncherDeleteView": "Weergave Verwijderen",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Bekijk als Admin", "resourceLauncherViewAsAdmin": "Bekijk als Admin",
"resourceLauncherResourceDetailsDescription": "Bekijk details voor deze bron.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Oczekiwana wartość", "policyAuthHeaderValue": "Password",
"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",
@@ -1915,6 +1915,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": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"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 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "Klucze licencyjne", "billingLicenseKeys": "Klucze licencyjne",
"billingLicenseKeysDescription": "Zarządzaj subskrypcjami kluczy licencyjnych", "billingLicenseKeysDescription": "Zarządzaj subskrypcjami kluczy licencyjnych",
"billingLicenseSubscription": "Subskrypcja licencji", "billingLicenseSubscription": "Subskrypcja licencji",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Szukaj we wszystkich stronach...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"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": "Save for Me",
"resourceLauncherResetView": "Resetuj Widok", "resourceLauncherResetView": "Resetuj Widok",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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": "Filter, {count} applied",
"resourceLauncherSort": "Sortuj", "resourceLauncherSort": "Sortuj",
"resourceLauncherSortAscending": "Sortuj rosnąco", "resourceLauncherSortAscending": "Sortuj rosnąco",
"resourceLauncherSortDescending": "Sortuj malejąco", "resourceLauncherSortDescending": "Sortuj malejąco",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Grupuj według", "resourceLauncherGroupBy": "Grupuj według",
"resourceLauncherGroupBySite": "Witryna", "resourceLauncherGroupBySite": "Witryna",
"resourceLauncherGroupByLabel": "Etykieta", "resourceLauncherGroupByLabel": "Etykieta",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Układ", "resourceLauncherLayout": "Układ",
"resourceLauncherLayoutGrid": "Siatka", "resourceLauncherLayoutGrid": "Siatka",
"resourceLauncherLayoutList": "Lista", "resourceLauncherLayoutList": "Lista",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "Pokaż tagi stron", "resourceLauncherShowSiteTags": "Pokaż tagi stron",
"resourceLauncherShowRecents": "Pokaż ostatnie", "resourceLauncherShowRecents": "Pokaż ostatnie",
"resourceLauncherDeleteView": "Usuń Widok", "resourceLauncherDeleteView": "Usuń Widok",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Przeglądaj jako Administrator", "resourceLauncherViewAsAdmin": "Przeglądaj jako Administrator",
"resourceLauncherResourceDetailsDescription": "Pokaż szczegóły tego zasobu.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Valor esperado", "policyAuthHeaderValue": "Password",
"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",
@@ -1915,6 +1915,9 @@
"billingDomains": "Domínios", "billingDomains": "Domínios",
"billingOrganizations": "Órgãos", "billingOrganizations": "Órgãos",
"billingRemoteExitNodes": "Nós remotos", "billingRemoteExitNodes": "Nós remotos",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"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 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"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",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Procurar todos os sites...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"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": "Save for Me",
"resourceLauncherResetView": "Redefinir Visualização", "resourceLauncherResetView": "Redefinir Visualização",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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": "Filter, {count} applied",
"resourceLauncherSort": "Ordenar", "resourceLauncherSort": "Ordenar",
"resourceLauncherSortAscending": "Ordenar ascendente", "resourceLauncherSortAscending": "Ordenar ascendente",
"resourceLauncherSortDescending": "Ordenar descendente", "resourceLauncherSortDescending": "Ordenar descendente",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Agrupar por", "resourceLauncherGroupBy": "Agrupar por",
"resourceLauncherGroupBySite": "Site", "resourceLauncherGroupBySite": "Site",
"resourceLauncherGroupByLabel": "Marcador", "resourceLauncherGroupByLabel": "Marcador",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Layout", "resourceLauncherLayout": "Layout",
"resourceLauncherLayoutGrid": "Grade", "resourceLauncherLayoutGrid": "Grade",
"resourceLauncherLayoutList": "Lista", "resourceLauncherLayoutList": "Lista",
@@ -3597,8 +3609,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": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Visualizar como Administrador", "resourceLauncherViewAsAdmin": "Visualizar como Administrador",
"resourceLauncherResourceDetailsDescription": "Veja detalhes deste recurso.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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",
+35 -5
View File
@@ -864,8 +864,8 @@
"policyAuthHeaderAuthTitle": "Базовая аутентификация заголовка", "policyAuthHeaderAuthTitle": "Базовая аутентификация заголовка",
"policyAuthHeaderAuthDescription": "Проверка пользовательского имени и значения HTTP-заголовка для каждого запроса", "policyAuthHeaderAuthDescription": "Проверка пользовательского имени и значения HTTP-заголовка для каждого запроса",
"policyAuthHeaderAuthSummary": "Заголовок настроен", "policyAuthHeaderAuthSummary": "Заголовок настроен",
"policyAuthHeaderName": "Имя заголовка", "policyAuthHeaderName": "Username",
"policyAuthHeaderValue": "Ожидаемое значение", "policyAuthHeaderValue": "Password",
"policyAuthSetPasscode": "Установить пароль", "policyAuthSetPasscode": "Установить пароль",
"policyAuthSetPincode": "Установить ПИН-код", "policyAuthSetPincode": "Установить ПИН-код",
"policyAuthSetEmailWhitelist": "Установить белый список email", "policyAuthSetEmailWhitelist": "Установить белый список email",
@@ -1915,6 +1915,9 @@
"billingDomains": "Домены", "billingDomains": "Домены",
"billingOrganizations": "Орги", "billingOrganizations": "Орги",
"billingRemoteExitNodes": "Удаленные узлы", "billingRemoteExitNodes": "Удаленные узлы",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"billingNoLimitConfigured": "Лимит не установлен", "billingNoLimitConfigured": "Лимит не установлен",
"billingEstimatedPeriod": "Предполагаемый период выставления счетов", "billingEstimatedPeriod": "Предполагаемый период выставления счетов",
"billingIncludedUsage": "Включенное использование", "billingIncludedUsage": "Включенное использование",
@@ -1943,6 +1946,9 @@
"billingUsersInfo": "Сколько пользователей вы можете использовать", "billingUsersInfo": "Сколько пользователей вы можете использовать",
"billingDomainInfo": "Сколько доменов вы можете использовать", "billingDomainInfo": "Сколько доменов вы можете использовать",
"billingRemoteExitNodesInfo": "Сколько удаленных узлов вы можете использовать", "billingRemoteExitNodesInfo": "Сколько удаленных узлов вы можете использовать",
"billingPublicResourcesInfo": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "Лицензионные ключи", "billingLicenseKeys": "Лицензионные ключи",
"billingLicenseKeysDescription": "Управление подписками на лицензионные ключи", "billingLicenseKeysDescription": "Управление подписками на лицензионные ключи",
"billingLicenseSubscription": "Лицензионное соглашение", "billingLicenseSubscription": "Лицензионное соглашение",
@@ -3571,18 +3577,23 @@
"memberPortalResourceDisabled": "Ресурс отключён", "memberPortalResourceDisabled": "Ресурс отключён",
"memberPortalShowingResources": "Показаны {start}-{end} из {total} ресурсов", "memberPortalShowingResources": "Показаны {start}-{end} из {total} ресурсов",
"resourceLauncherTitle": "Запуск ресурса", "resourceLauncherTitle": "Запуск ресурса",
"resourceLauncherDescription": "Просмотр деталей ресурса и запуск их из одного места", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Поиск всех сайтов...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "По умолчанию", "resourceLauncherDefaultView": "По умолчанию",
"resourceLauncherSaveView": "Сохранить вид", "resourceLauncherSaveView": "Сохранить вид",
"resourceLauncherSaveToCurrentView": "Сохранить в текущий вид", "resourceLauncherSaveToCurrentView": "Сохранить в текущий вид",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "Сбросить вид", "resourceLauncherResetView": "Сбросить вид",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"resourceLauncherSaveAsNewView": "Сохранить как новый вид", "resourceLauncherSaveAsNewView": "Сохранить как новый вид",
"resourceLauncherSaveAsNewViewDescription": "Дайте этому виду имя, чтобы сохранить текущие фильтры и макет.", "resourceLauncherSaveAsNewViewDescription": "Дайте этому виду имя, чтобы сохранить текущие фильтры и макет.",
"resourceLauncherSaveForEveryone": "Сохранить для всех", "resourceLauncherSaveForEveryone": "Сохранить для всех",
"resourceLauncherSaveForEveryoneDescription": "Поделитесь этим видом со всеми членами организации. Если не отмечено, видимость только для вас.", "resourceLauncherSaveForEveryoneDescription": "Поделитесь этим видом со всеми членами организации. Если не отмечено, видимость только для вас.",
"resourceLauncherMakePersonal": "Сделать личным", "resourceLauncherMakePersonal": "Сделать личным",
"resourceLauncherFilter": "Фильтр", "resourceLauncherFilter": "Фильтр",
"resourceLauncherFilterWithCount": "Filter, {count} applied",
"resourceLauncherSort": "Сортировать", "resourceLauncherSort": "Сортировать",
"resourceLauncherSortAscending": "Сортировать по возрастанию", "resourceLauncherSortAscending": "Сортировать по возрастанию",
"resourceLauncherSortDescending": "Сортировать по убыванию", "resourceLauncherSortDescending": "Сортировать по убыванию",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Группировать по", "resourceLauncherGroupBy": "Группировать по",
"resourceLauncherGroupBySite": "Сайт", "resourceLauncherGroupBySite": "Сайт",
"resourceLauncherGroupByLabel": "Метка", "resourceLauncherGroupByLabel": "Метка",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Макет", "resourceLauncherLayout": "Макет",
"resourceLauncherLayoutGrid": "Сетка", "resourceLauncherLayoutGrid": "Сетка",
"resourceLauncherLayoutList": "Список", "resourceLauncherLayoutList": "Список",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "Показать теги сайта", "resourceLauncherShowSiteTags": "Показать теги сайта",
"resourceLauncherShowRecents": "Показать недавно", "resourceLauncherShowRecents": "Показать недавно",
"resourceLauncherDeleteView": "Удалить вид", "resourceLauncherDeleteView": "Удалить вид",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "Просмотр как администратор", "resourceLauncherViewAsAdmin": "Просмотр как администратор",
"resourceLauncherResourceDetailsDescription": "Просмотр деталей этого ресурса.", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "Без меток", "resourceLauncherUnlabeled": "Без меток",
"resourceLauncherNoSite": "Без сайта", "resourceLauncherNoSite": "Без сайта",
"resourceLauncherNoResourcesInGroup": "Нет ресурсов в данной группе", "resourceLauncherNoResourcesInGroup": "Нет ресурсов в данной группе",
@@ -3607,6 +3631,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "Ресурсы не найдены", "resourceLauncherEmptyStateNoResultsTitle": "Ресурсы не найдены",
"resourceLauncherEmptyStateNoResultsDescription": "Ни один ресурс не соответствует вашему текущему поисковому запросу или фильтрам. Попробуйте их изменить, чтобы найти нужное.", "resourceLauncherEmptyStateNoResultsDescription": "Ни один ресурс не соответствует вашему текущему поисковому запросу или фильтрам. Попробуйте их изменить, чтобы найти нужное.",
"resourceLauncherEmptyStateNoResultsWithQuery": "Ни один ресурс не соответствует \"{query}\". Попробуйте изменить параметры поиска или очистить фильтры, чтобы увидеть все ресурсы.", "resourceLauncherEmptyStateNoResultsWithQuery": "Ни один ресурс не соответствует \"{query}\". Попробуйте изменить параметры поиска или очистить фильтры, чтобы увидеть все ресурсы.",
"resourceLauncherSearchFirstTitle": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"resourceLauncherCopiedToClipboard": "Скопировано в буфер обмена", "resourceLauncherCopiedToClipboard": "Скопировано в буфер обмена",
"resourceLauncherCopiedAccessDescription": "Доступ к ресурсу был скопирован в ваш буфер обмена.", "resourceLauncherCopiedAccessDescription": "Доступ к ресурсу был скопирован в ваш буфер обмена.",
"resourceLauncherViewNamePlaceholder": "Имя вида", "resourceLauncherViewNamePlaceholder": "Имя вида",
+35 -5
View File
@@ -864,8 +864,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": "Username",
"policyAuthHeaderValue": "Beklenen değer", "policyAuthHeaderValue": "Password",
"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",
@@ -1915,6 +1915,9 @@
"billingDomains": "Alan Adları", "billingDomains": "Alan Adları",
"billingOrganizations": "Organizasyonlar", "billingOrganizations": "Organizasyonlar",
"billingRemoteExitNodes": "Uzak Düğümler", "billingRemoteExitNodes": "Uzak Düğümler",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"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 +1946,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": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"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",
@@ -3571,18 +3577,23 @@
"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", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "Tüm siteleri ara...", "resourceLauncherSearchPlaceholder": "Search your resources...",
"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": "Save for Me",
"resourceLauncherResetView": "Görünümü Sıfırla", "resourceLauncherResetView": "Görünümü Sıfırla",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"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": "Filter, {count} applied",
"resourceLauncherSort": "Sıralama", "resourceLauncherSort": "Sıralama",
"resourceLauncherSortAscending": "Artan sırala", "resourceLauncherSortAscending": "Artan sırala",
"resourceLauncherSortDescending": "Azalan sırala", "resourceLauncherSortDescending": "Azalan sırala",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "Grupla", "resourceLauncherGroupBy": "Grupla",
"resourceLauncherGroupBySite": "Site", "resourceLauncherGroupBySite": "Site",
"resourceLauncherGroupByLabel": "Etiket", "resourceLauncherGroupByLabel": "Etiket",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "Düzen", "resourceLauncherLayout": "Düzen",
"resourceLauncherLayoutGrid": "Izgara", "resourceLauncherLayoutGrid": "Izgara",
"resourceLauncherLayoutList": "Liste", "resourceLauncherLayoutList": "Liste",
@@ -3597,8 +3609,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": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"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": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"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 +3631,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": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"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ı",
+35 -5
View File
@@ -864,8 +864,8 @@
"policyAuthHeaderAuthTitle": "基础标题认证", "policyAuthHeaderAuthTitle": "基础标题认证",
"policyAuthHeaderAuthDescription": "在每次请求上验证自定义 HTTP 标头名称和值", "policyAuthHeaderAuthDescription": "在每次请求上验证自定义 HTTP 标头名称和值",
"policyAuthHeaderAuthSummary": "标头已配置", "policyAuthHeaderAuthSummary": "标头已配置",
"policyAuthHeaderName": "标头名称", "policyAuthHeaderName": "Username",
"policyAuthHeaderValue": "预期值", "policyAuthHeaderValue": "Password",
"policyAuthSetPasscode": "设定密码", "policyAuthSetPasscode": "设定密码",
"policyAuthSetPincode": "设置 PIN 码", "policyAuthSetPincode": "设置 PIN 码",
"policyAuthSetEmailWhitelist": "设置电子邮件白名单", "policyAuthSetEmailWhitelist": "设置电子邮件白名单",
@@ -1915,6 +1915,9 @@
"billingDomains": "域", "billingDomains": "域",
"billingOrganizations": "球队", "billingOrganizations": "球队",
"billingRemoteExitNodes": "远程节点", "billingRemoteExitNodes": "远程节点",
"billingPublicResources": "Public Resources",
"billingPrivateResources": "Private Resources",
"billingMachineClients": "Machine Clients",
"billingNoLimitConfigured": "未配置限制", "billingNoLimitConfigured": "未配置限制",
"billingEstimatedPeriod": "估计结算周期", "billingEstimatedPeriod": "估计结算周期",
"billingIncludedUsage": "包含的使用量", "billingIncludedUsage": "包含的使用量",
@@ -1943,6 +1946,9 @@
"billingUsersInfo": "您可以使用多少用户", "billingUsersInfo": "您可以使用多少用户",
"billingDomainInfo": "您可以使用多少域", "billingDomainInfo": "您可以使用多少域",
"billingRemoteExitNodesInfo": "您可以使用多少远程节点", "billingRemoteExitNodesInfo": "您可以使用多少远程节点",
"billingPublicResourcesInfo": "How many public resources you can use",
"billingPrivateResourcesInfo": "How many private resources you can use",
"billingMachineClientsInfo": "How many machine clients you can use",
"billingLicenseKeys": "许可证密钥", "billingLicenseKeys": "许可证密钥",
"billingLicenseKeysDescription": "管理您的许可证密钥订阅", "billingLicenseKeysDescription": "管理您的许可证密钥订阅",
"billingLicenseSubscription": "许可订阅", "billingLicenseSubscription": "许可订阅",
@@ -3571,18 +3577,23 @@
"memberPortalResourceDisabled": "资源已禁用", "memberPortalResourceDisabled": "资源已禁用",
"memberPortalShowingResources": "显示 {start}-{end} 共 {total} 个资源", "memberPortalShowingResources": "显示 {start}-{end} 共 {total} 个资源",
"resourceLauncherTitle": "资源启动器", "resourceLauncherTitle": "资源启动器",
"resourceLauncherDescription": "查看资源详情并从一个地方启动它们", "resourceLauncherDescription": "View all available resources and launch them from one central hub",
"resourceLauncherSearchPlaceholder": "搜索所有站点……", "resourceLauncherSearchPlaceholder": "Search your resources...",
"resourceLauncherDefaultView": "默认", "resourceLauncherDefaultView": "默认",
"resourceLauncherSaveView": "保存视图", "resourceLauncherSaveView": "保存视图",
"resourceLauncherSaveToCurrentView": "保存至当前视图", "resourceLauncherSaveToCurrentView": "保存至当前视图",
"resourceLauncherSaveDefaultPersonal": "Save for Me",
"resourceLauncherResetView": "重置视图", "resourceLauncherResetView": "重置视图",
"resourceLauncherResetSystemDefault": "Reset to System Default",
"resourceLauncherSystemDefaultRestored": "System default restored",
"resourceLauncherSystemDefaultRestoredDescription": "The default view has been reset to the original settings.",
"resourceLauncherSaveAsNewView": "另存为新视图", "resourceLauncherSaveAsNewView": "另存为新视图",
"resourceLauncherSaveAsNewViewDescription": "为此视图命名,以便保存您当前的过滤器和布局。", "resourceLauncherSaveAsNewViewDescription": "为此视图命名,以便保存您当前的过滤器和布局。",
"resourceLauncherSaveForEveryone": "为所有人保存", "resourceLauncherSaveForEveryone": "为所有人保存",
"resourceLauncherSaveForEveryoneDescription": "与所有组织成员共享此视图。如果未选中,此视图仅对您可见。", "resourceLauncherSaveForEveryoneDescription": "与所有组织成员共享此视图。如果未选中,此视图仅对您可见。",
"resourceLauncherMakePersonal": "创建个人", "resourceLauncherMakePersonal": "创建个人",
"resourceLauncherFilter": "筛选", "resourceLauncherFilter": "筛选",
"resourceLauncherFilterWithCount": "Filter, {count} applied",
"resourceLauncherSort": "排序", "resourceLauncherSort": "排序",
"resourceLauncherSortAscending": "按升序排序", "resourceLauncherSortAscending": "按升序排序",
"resourceLauncherSortDescending": "按降序排序", "resourceLauncherSortDescending": "按降序排序",
@@ -3590,6 +3601,7 @@
"resourceLauncherGroupBy": "按组", "resourceLauncherGroupBy": "按组",
"resourceLauncherGroupBySite": "站点", "resourceLauncherGroupBySite": "站点",
"resourceLauncherGroupByLabel": "标签", "resourceLauncherGroupByLabel": "标签",
"resourceLauncherGroupByNone": "None",
"resourceLauncherLayout": "布局", "resourceLauncherLayout": "布局",
"resourceLauncherLayoutGrid": "网格", "resourceLauncherLayoutGrid": "网格",
"resourceLauncherLayoutList": "列表", "resourceLauncherLayoutList": "列表",
@@ -3597,8 +3609,20 @@
"resourceLauncherShowSiteTags": "显示站点标签", "resourceLauncherShowSiteTags": "显示站点标签",
"resourceLauncherShowRecents": "显示最近使用", "resourceLauncherShowRecents": "显示最近使用",
"resourceLauncherDeleteView": "删除视图", "resourceLauncherDeleteView": "删除视图",
"resourceLauncherDeleteViewTitle": "Delete View",
"resourceLauncherDeleteViewQuestion": "Are you sure you want to delete this launcher view?",
"resourceLauncherDeleteViewConfirm": "Delete View",
"resourceLauncherViewAsAdmin": "以管理员身份查看", "resourceLauncherViewAsAdmin": "以管理员身份查看",
"resourceLauncherResourceDetailsDescription": "查看此资源的详细信息。", "resourceLauncherResourceDetailsDescription": "Connection information and status for this resource.",
"resourceLauncherResourceDetails": "Resource Details",
"resourceLauncherAuthMethodsDescription": "Authentication methods enabled for this resource.",
"resourceLauncherPrivateClientRequired": "Connect with a client on your device to access this resource privately.",
"resourceLauncherPrivateClientRequiredTitle": "Client Connection Required",
"resourceLauncherDownloadClient": "Download client",
"resourceLauncherFailedToLoadDetails": "Could not load resource details. You may no longer have access to this resource.",
"resourceLauncherNoPortRestrictions": "No port restrictions",
"resourceLauncherTcp": "TCP",
"resourceLauncherUdp": "UDP",
"resourceLauncherUnlabeled": "未标记", "resourceLauncherUnlabeled": "未标记",
"resourceLauncherNoSite": "无站点", "resourceLauncherNoSite": "无站点",
"resourceLauncherNoResourcesInGroup": "此组中没有资源", "resourceLauncherNoResourcesInGroup": "此组中没有资源",
@@ -3607,6 +3631,12 @@
"resourceLauncherEmptyStateNoResultsTitle": "未找到资源", "resourceLauncherEmptyStateNoResultsTitle": "未找到资源",
"resourceLauncherEmptyStateNoResultsDescription": "没有资源与您当前的搜索或过滤器匹配。尝试调整它们以找到您想要的内容。", "resourceLauncherEmptyStateNoResultsDescription": "没有资源与您当前的搜索或过滤器匹配。尝试调整它们以找到您想要的内容。",
"resourceLauncherEmptyStateNoResultsWithQuery": "没有资源匹配\"{query}\"。尝试调整您的搜索或清除过滤器以查看所有资源。", "resourceLauncherEmptyStateNoResultsWithQuery": "没有资源匹配\"{query}\"。尝试调整您的搜索或清除过滤器以查看所有资源。",
"resourceLauncherSearchFirstTitle": "Search or Filter to Browse",
"resourceLauncherSearchFirstDescription": "You have access to many resources. Use search or filter by site or label to find what you need.",
"resourceLauncherSiteGroupingDisabled": "Site grouping is unavailable at this scale. Filter by site to group a smaller set.",
"resourceLauncherLabelGroupingDisabled": "Label grouping is unavailable at this scale.",
"resourceLauncherCompactModeHint": "Showing a simplified list for faster browsing. Use search or filters to narrow results.",
"resourceLauncherCompactGroupingHint": "Apply site or label filters to enable grouping.",
"resourceLauncherCopiedToClipboard": "已复制到剪贴板", "resourceLauncherCopiedToClipboard": "已复制到剪贴板",
"resourceLauncherCopiedAccessDescription": "资源访问权限已复制到剪贴板。", "resourceLauncherCopiedAccessDescription": "资源访问权限已复制到剪贴板。",
"resourceLauncherViewNamePlaceholder": "查看名称", "resourceLauncherViewNamePlaceholder": "查看名称",
-6
View File
@@ -27,12 +27,6 @@ export async function getFeatureDisplayName(
return "Remote Exit Nodes"; return "Remote Exit Nodes";
case LimitId.ORGANIZATIONS: case LimitId.ORGANIZATIONS:
return "Organizations"; return "Organizations";
case LimitId.PUBLIC_RESOURCES:
return "Public Resources";
case LimitId.PRIVATE_RESOURCES:
return "Private Resources";
case LimitId.MACHINE_CLIENTS:
return "Machine Clients";
case LimitId.TIER1: case LimitId.TIER1:
return "Home Lab"; return "Home Lab";
default: default:
@@ -104,18 +104,6 @@ export async function getOrgUsage(
orgId, orgId,
LimitId.ORGANIZATIONS LimitId.ORGANIZATIONS
); );
const publicResources = await usageService.getUsage(
orgId,
LimitId.PUBLIC_RESOURCES
);
const privateResources = await usageService.getUsage(
orgId,
LimitId.PRIVATE_RESOURCES
);
const machineClients = await usageService.getUsage(
orgId,
LimitId.MACHINE_CLIENTS
);
// const egressData = await usageService.getUsage( // const egressData = await usageService.getUsage(
// orgId, // orgId,
// FeatureId.EGRESS_DATA_MB // FeatureId.EGRESS_DATA_MB
@@ -139,15 +127,6 @@ export async function getOrgUsage(
if (organizations) { if (organizations) {
usageData.push(organizations); usageData.push(organizations);
} }
if (publicResources) {
usageData.push(publicResources);
}
if (privateResources) {
usageData.push(privateResources);
}
if (machineClients) {
usageData.push(machineClients);
}
const orgLimits = await db const orgLimits = await db
.select() .select()
+10 -22
View File
@@ -5,21 +5,8 @@ import { Newt } from "@server/db";
import { eq } from "drizzle-orm"; import { eq } from "drizzle-orm";
import logger from "@server/logger"; import logger from "@server/logger";
import { sendNewtSyncMessage } from "./sync"; import { sendNewtSyncMessage } from "./sync";
import semver from "semver";
import { recordSitePing } from "./pingAccumulator"; import { recordSitePing } from "./pingAccumulator";
const NEWT_SUPPORTS_SYNC_VERSION = ">=1.14.0";
const PONG = {
message: {
type: "pong",
data: {
timestamp: new Date().toISOString()
}
},
broadcast: false,
excludeSender: false
};
/** /**
* Handles ping messages from newt clients. * Handles ping messages from newt clients.
* *
@@ -50,14 +37,6 @@ export const handleNewtPingMessage: MessageHandler = async (context) => {
// cross-region latency to the database. // cross-region latency to the database.
recordSitePing(newt.siteId); recordSitePing(newt.siteId);
if (
newt.version &&
!semver.satisfies(newt.version, NEWT_SUPPORTS_SYNC_VERSION)
) {
// Newt does not support the sync message so not checking - stop here -
return PONG;
}
// Check config version and sync if stale. // Check config version and sync if stale.
const configVersion = await getClientConfigVersion(newt.newtId); const configVersion = await getClientConfigVersion(newt.newtId);
@@ -86,5 +65,14 @@ export const handleNewtPingMessage: MessageHandler = async (context) => {
await sendNewtSyncMessage(newt, site); await sendNewtSyncMessage(newt, site);
} }
return PONG; return {
message: {
type: "pong",
data: {
timestamp: new Date().toISOString()
}
},
broadcast: false,
excludeSender: false
};
}; };
+41 -41
View File
@@ -9,45 +9,45 @@ import {
import { canCompress } from "@server/lib/clientVersionChecks"; import { canCompress } from "@server/lib/clientVersionChecks";
export async function sendNewtSyncMessage(newt: Newt, site: Site) { export async function sendNewtSyncMessage(newt: Newt, site: Site) {
const { // const {
tcpTargets, // tcpTargets,
udpTargets, // udpTargets,
validHealthCheckTargets, // validHealthCheckTargets,
browserGatewayTargets, // browserGatewayTargets,
remoteExitNodeSubnets // remoteExitNodeSubnets
} = await buildTargetConfigurationForNewtClient(site.siteId); // } = await buildTargetConfigurationForNewtClient(site.siteId);
let exitNode: ExitNode | undefined; // let exitNode: ExitNode | undefined;
if (site.exitNodeId) { // if (site.exitNodeId) {
[exitNode] = await db // [exitNode] = await db
.select() // .select()
.from(exitNodes) // .from(exitNodes)
.where(eq(exitNodes.exitNodeId, site.exitNodeId)) // .where(eq(exitNodes.exitNodeId, site.exitNodeId))
.limit(1); // .limit(1);
} // }
const { peers, targets } = await buildClientConfigurationForNewtClient( // const { peers, targets } = await buildClientConfigurationForNewtClient(
site, // site,
exitNode // exitNode
); // );
await sendToClient( // await sendToClient(
newt.newtId, // newt.newtId,
{ // {
type: "newt/sync", // type: "newt/sync",
data: { // data: {
proxyTargets: { // proxyTargets: {
udp: udpTargets, // udp: udpTargets,
tcp: tcpTargets // tcp: tcpTargets
}, // },
healthCheckTargets: validHealthCheckTargets, // healthCheckTargets: validHealthCheckTargets,
peers: peers, // peers: peers,
clientTargets: targets, // clientTargets: targets,
browserGatewayTargets: browserGatewayTargets, // browserGatewayTargets: browserGatewayTargets,
remoteExitNodeSubnets: remoteExitNodeSubnets // remoteExitNodeSubnets: remoteExitNodeSubnets
} // }
}, // },
{ // {
compress: canCompress(newt.version, "newt") // compress: canCompress(newt.version, "newt")
} // }
).catch((error) => { // ).catch((error) => {
logger.warn(`Error sending newt sync message:`, error); // logger.warn(`Error sending newt sync message:`, error);
}); // });
} }
-4
View File
@@ -3,12 +3,8 @@ import { db, orgs } from "@server/db";
import { actions, roles, roleActions } from "@server/db"; import { actions, roles, roleActions } from "@server/db";
import { eq, inArray } from "drizzle-orm"; import { eq, inArray } from "drizzle-orm";
import logger from "@server/logger"; import logger from "@server/logger";
import { build } from "@server/build";
export async function ensureActions() { export async function ensureActions() {
if (build == "saas") {
return;
}
await db.transaction(async (trx) => { await db.transaction(async (trx) => {
const actionIds = Object.values(ActionsEnum); const actionIds = Object.values(ActionsEnum);
const existingActions = await trx.select().from(actions).execute(); const existingActions = await trx.select().from(actions).execute();
@@ -158,9 +158,6 @@ const tierLimits: Record<
domains: number; domains: number;
remoteNodes: number; remoteNodes: number;
organizations: number; organizations: number;
publicResources: number;
privateResources: number;
machineClients: number;
} }
> = { > = {
basic: { basic: {
@@ -168,50 +165,35 @@ const tierLimits: Record<
sites: freeLimitSet[LimitId.SITES]?.value ?? 0, sites: freeLimitSet[LimitId.SITES]?.value ?? 0,
domains: freeLimitSet[LimitId.DOMAINS]?.value ?? 0, domains: freeLimitSet[LimitId.DOMAINS]?.value ?? 0,
remoteNodes: freeLimitSet[LimitId.REMOTE_EXIT_NODES]?.value ?? 0, remoteNodes: freeLimitSet[LimitId.REMOTE_EXIT_NODES]?.value ?? 0,
organizations: freeLimitSet[LimitId.ORGANIZATIONS]?.value ?? 0, organizations: freeLimitSet[LimitId.ORGANIZATIONS]?.value ?? 0
publicResources: freeLimitSet[LimitId.PUBLIC_RESOURCES]?.value ?? 0,
privateResources: freeLimitSet[LimitId.PRIVATE_RESOURCES]?.value ?? 0,
machineClients: freeLimitSet[LimitId.MACHINE_CLIENTS]?.value ?? 0
}, },
tier1: { tier1: {
users: tier1LimitSet[LimitId.USERS]?.value ?? 0, users: tier1LimitSet[LimitId.USERS]?.value ?? 0,
sites: tier1LimitSet[LimitId.SITES]?.value ?? 0, sites: tier1LimitSet[LimitId.SITES]?.value ?? 0,
domains: tier1LimitSet[LimitId.DOMAINS]?.value ?? 0, domains: tier1LimitSet[LimitId.DOMAINS]?.value ?? 0,
remoteNodes: tier1LimitSet[LimitId.REMOTE_EXIT_NODES]?.value ?? 0, remoteNodes: tier1LimitSet[LimitId.REMOTE_EXIT_NODES]?.value ?? 0,
organizations: tier1LimitSet[LimitId.ORGANIZATIONS]?.value ?? 0, organizations: tier1LimitSet[LimitId.ORGANIZATIONS]?.value ?? 0
publicResources: tier1LimitSet[LimitId.PUBLIC_RESOURCES]?.value ?? 0,
privateResources: tier1LimitSet[LimitId.PRIVATE_RESOURCES]?.value ?? 0,
machineClients: tier1LimitSet[LimitId.MACHINE_CLIENTS]?.value ?? 0
}, },
tier2: { tier2: {
users: tier2LimitSet[LimitId.USERS]?.value ?? 0, users: tier2LimitSet[LimitId.USERS]?.value ?? 0,
sites: tier2LimitSet[LimitId.SITES]?.value ?? 0, sites: tier2LimitSet[LimitId.SITES]?.value ?? 0,
domains: tier2LimitSet[LimitId.DOMAINS]?.value ?? 0, domains: tier2LimitSet[LimitId.DOMAINS]?.value ?? 0,
remoteNodes: tier2LimitSet[LimitId.REMOTE_EXIT_NODES]?.value ?? 0, remoteNodes: tier2LimitSet[LimitId.REMOTE_EXIT_NODES]?.value ?? 0,
organizations: tier2LimitSet[LimitId.ORGANIZATIONS]?.value ?? 0, organizations: tier2LimitSet[LimitId.ORGANIZATIONS]?.value ?? 0
publicResources: tier2LimitSet[LimitId.PUBLIC_RESOURCES]?.value ?? 0,
privateResources: tier2LimitSet[LimitId.PRIVATE_RESOURCES]?.value ?? 0,
machineClients: tier2LimitSet[LimitId.MACHINE_CLIENTS]?.value ?? 0
}, },
tier3: { tier3: {
users: tier3LimitSet[LimitId.USERS]?.value ?? 0, users: tier3LimitSet[LimitId.USERS]?.value ?? 0,
sites: tier3LimitSet[LimitId.SITES]?.value ?? 0, sites: tier3LimitSet[LimitId.SITES]?.value ?? 0,
domains: tier3LimitSet[LimitId.DOMAINS]?.value ?? 0, domains: tier3LimitSet[LimitId.DOMAINS]?.value ?? 0,
remoteNodes: tier3LimitSet[LimitId.REMOTE_EXIT_NODES]?.value ?? 0, remoteNodes: tier3LimitSet[LimitId.REMOTE_EXIT_NODES]?.value ?? 0,
organizations: tier3LimitSet[LimitId.ORGANIZATIONS]?.value ?? 0, organizations: tier3LimitSet[LimitId.ORGANIZATIONS]?.value ?? 0
publicResources: tier3LimitSet[LimitId.PUBLIC_RESOURCES]?.value ?? 0,
privateResources: tier3LimitSet[LimitId.PRIVATE_RESOURCES]?.value ?? 0,
machineClients: tier3LimitSet[LimitId.MACHINE_CLIENTS]?.value ?? 0
}, },
enterprise: { enterprise: {
users: 0, // Custom for enterprise users: 0, // Custom for enterprise
sites: 0, // Custom for enterprise sites: 0, // Custom for enterprise
domains: 0, // Custom for enterprise domains: 0, // Custom for enterprise
remoteNodes: 0, // Custom for enterprise remoteNodes: 0, // Custom for enterprise
organizations: 0, // Custom for enterprise organizations: 0 // Custom for enterprise
publicResources: 0, // Custom for enterprise
privateResources: 0, // Custom for enterprise
machineClients: 0 // Custom for enterprise
} }
}; };
@@ -252,9 +234,6 @@ export default function BillingPage() {
const DOMAINS = "domains"; const DOMAINS = "domains";
const REMOTE_EXIT_NODES = "remoteExitNodes"; const REMOTE_EXIT_NODES = "remoteExitNodes";
const ORGINIZATIONS = "organizations"; const ORGINIZATIONS = "organizations";
const PUBLIC_RESOURCES = "publicResources";
const PRIVATE_RESOURCES = "privateResources";
const MACHINE_CLIENTS = "machineClients";
// Confirmation dialog state // Confirmation dialog state
const [showConfirmDialog, setShowConfirmDialog] = useState(false); const [showConfirmDialog, setShowConfirmDialog] = useState(false);
@@ -818,45 +797,6 @@ export default function BillingPage() {
}); });
} }
// Check public resources
const publicResourcesUsage = getUsageValue(PUBLIC_RESOURCES);
if (
limits.publicResources > 0 &&
publicResourcesUsage > limits.publicResources
) {
violations.push({
feature: "Public Resources",
currentUsage: publicResourcesUsage,
newLimit: limits.publicResources
});
}
// Check private resources
const privateResourcesUsage = getUsageValue(PRIVATE_RESOURCES);
if (
limits.privateResources > 0 &&
privateResourcesUsage > limits.privateResources
) {
violations.push({
feature: "Private Resources",
currentUsage: privateResourcesUsage,
newLimit: limits.privateResources
});
}
// Check machine clients
const machineClientsUsage = getUsageValue(MACHINE_CLIENTS);
if (
limits.machineClients > 0 &&
machineClientsUsage > limits.machineClients
) {
violations.push({
feature: "Machine Clients",
currentUsage: machineClientsUsage,
newLimit: limits.machineClients
});
}
return violations; return violations;
}; };
@@ -1057,23 +997,21 @@ export default function BillingPage() {
</SettingsSectionDescription> </SettingsSectionDescription>
</SettingsSectionHeader> </SettingsSectionHeader>
<SettingsSectionBody> <SettingsSectionBody>
<div className="grid grid-cols-1 md:grid-cols-4 gap-6"> <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{/* Current Usage */} {/* Current Usage */}
<div className="border rounded-lg p-4 md:col-span-1"> <div className="border rounded-lg p-4">
<div className="text-sm text-muted-foreground mb-2"> <div className="text-sm text-muted-foreground mb-2">
{t("billingCurrentUsage") || "Current Usage"} {t("billingCurrentUsage") || "Current Usage"}
</div> </div>
<div className="flex flex-col items-start gap-1"> <div className="flex items-baseline gap-2">
<div className="flex items-baseline gap-2"> <span className="text-3xl font-semibold">
<span className="text-3xl font-semibold"> {getUserCount()}
{getUserCount()} </span>
</span> <span className="text-lg">
<span className="text-lg"> {t("billingUsers") || "Users"}
{t("billingUsers") || "Users"} </span>
</span>
</div>
{hasSubscription && getPricePerUser() > 0 && ( {hasSubscription && getPricePerUser() > 0 && (
<div className="text-sm text-muted-foreground"> <div className="text-sm text-muted-foreground mt-1">
x ${getPricePerUser()} / month = $ x ${getPricePerUser()} / month = $
{getUserCount() * getPricePerUser()} / {getUserCount() * getPricePerUser()} /
month month
@@ -1083,11 +1021,11 @@ export default function BillingPage() {
</div> </div>
{/* Maximum Limits */} {/* Maximum Limits */}
<div className="border rounded-lg p-4 md:col-span-3"> <div className="border rounded-lg p-4">
<div className="text-sm text-muted-foreground mb-3"> <div className="text-sm text-muted-foreground mb-3">
{t("billingMaximumLimits") || "Maximum Limits"} {t("billingMaximumLimits") || "Maximum Limits"}
</div> </div>
<InfoSections cols={8}> <InfoSections cols={5}>
<InfoSection> <InfoSection>
<InfoSectionTitle className="flex items-center gap-1 text-xs"> <InfoSectionTitle className="flex items-center gap-1 text-xs">
{t("billingUsers") || "Users"} {t("billingUsers") || "Users"}
@@ -1370,168 +1308,6 @@ export default function BillingPage() {
)} )}
</InfoSectionContent> </InfoSectionContent>
</InfoSection> </InfoSection>
<InfoSection>
<InfoSectionTitle className="flex items-center gap-1 text-xs">
{t("billingPublicResources") ||
"Public Resources"}
</InfoSectionTitle>
<InfoSectionContent className="text-sm">
{isOverLimit(PUBLIC_RESOURCES) ? (
<Tooltip>
<TooltipTrigger className="flex items-center gap-1">
<AlertTriangle className="h-3 w-3 text-orange-400" />
<span
className={cn(
"text-orange-600 dark:text-orange-400 font-medium"
)}
>
{getLimitValue(
PUBLIC_RESOURCES
) ??
t(
"billingUnlimited"
) ??
"∞"}
</span>
</TooltipTrigger>
<TooltipContent>
<p>
{t(
"billingUsageExceedsLimit",
{
current:
getUsageValue(
PUBLIC_RESOURCES
),
limit:
getLimitValue(
PUBLIC_RESOURCES
) ?? 0
}
) ||
`Current usage (${getUsageValue(PUBLIC_RESOURCES)}) exceeds limit (${getLimitValue(PUBLIC_RESOURCES)})`}
</p>
</TooltipContent>
</Tooltip>
) : (
<>
{getLimitValue(
PUBLIC_RESOURCES
) ??
t("billingUnlimited") ??
"∞"}
</>
)}
</InfoSectionContent>
</InfoSection>
<InfoSection>
<InfoSectionTitle className="flex items-center gap-1 text-xs">
{t("billingPrivateResources") ||
"Private Resources"}
</InfoSectionTitle>
<InfoSectionContent className="text-sm">
{isOverLimit(PRIVATE_RESOURCES) ? (
<Tooltip>
<TooltipTrigger className="flex items-center gap-1">
<AlertTriangle className="h-3 w-3 text-orange-400" />
<span
className={cn(
"text-orange-600 dark:text-orange-400 font-medium"
)}
>
{getLimitValue(
PRIVATE_RESOURCES
) ??
t(
"billingUnlimited"
) ??
"∞"}
</span>
</TooltipTrigger>
<TooltipContent>
<p>
{t(
"billingUsageExceedsLimit",
{
current:
getUsageValue(
PRIVATE_RESOURCES
),
limit:
getLimitValue(
PRIVATE_RESOURCES
) ?? 0
}
) ||
`Current usage (${getUsageValue(PRIVATE_RESOURCES)}) exceeds limit (${getLimitValue(PRIVATE_RESOURCES)})`}
</p>
</TooltipContent>
</Tooltip>
) : (
<>
{getLimitValue(
PRIVATE_RESOURCES
) ??
t("billingUnlimited") ??
"∞"}
</>
)}
</InfoSectionContent>
</InfoSection>
<InfoSection>
<InfoSectionTitle className="flex items-center gap-1 text-xs">
{t("billingMachineClients") ||
"Machine Clients"}
</InfoSectionTitle>
<InfoSectionContent className="text-sm">
{isOverLimit(MACHINE_CLIENTS) ? (
<Tooltip>
<TooltipTrigger className="flex items-center gap-1">
<AlertTriangle className="h-3 w-3 text-orange-400" />
<span
className={cn(
"text-orange-600 dark:text-orange-400 font-medium"
)}
>
{getLimitValue(
MACHINE_CLIENTS
) ??
t(
"billingUnlimited"
) ??
"∞"}
</span>
</TooltipTrigger>
<TooltipContent>
<p>
{t(
"billingUsageExceedsLimit",
{
current:
getUsageValue(
MACHINE_CLIENTS
),
limit:
getLimitValue(
MACHINE_CLIENTS
) ?? 0
}
) ||
`Current usage (${getUsageValue(MACHINE_CLIENTS)}) exceeds limit (${getLimitValue(MACHINE_CLIENTS)})`}
</p>
</TooltipContent>
</Tooltip>
) : (
<>
{getLimitValue(
MACHINE_CLIENTS
) ??
t("billingUnlimited") ??
"∞"}
</>
)}
</InfoSectionContent>
</InfoSection>
</InfoSections> </InfoSections>
</div> </div>
</div> </div>
@@ -1731,45 +1507,6 @@ export default function BillingPage() {
"Remote Nodes"} "Remote Nodes"}
</span> </span>
</div> </div>
<div className="flex items-center gap-2">
<span className="w-1.5 h-1.5 rounded-full bg-muted-foreground/50 shrink-0" />
<span>
{
tierLimits[
pendingTier.tier
].publicResources
}{" "}
{t(
"billingPublicResources"
) || "Public Resources"}
</span>
</div>
<div className="flex items-center gap-2">
<span className="w-1.5 h-1.5 rounded-full bg-muted-foreground/50 shrink-0" />
<span>
{
tierLimits[
pendingTier.tier
].privateResources
}{" "}
{t(
"billingPrivateResources"
) || "Private Resources"}
</span>
</div>
<div className="flex items-center gap-2">
<span className="w-1.5 h-1.5 rounded-full bg-muted-foreground/50 shrink-0" />
<span>
{
tierLimits[
pendingTier.tier
].machineClients
}{" "}
{t(
"billingMachineClients"
) || "Machine Clients"}
</span>
</div>
</div> </div>
</div> </div>
)} )}
+7 -40
View File
@@ -16,11 +16,8 @@ import LoginCardHeader from "@app/components/LoginCardHeader";
import { priv } from "@app/lib/api"; import { priv } from "@app/lib/api";
import { AxiosResponse } from "axios"; import { AxiosResponse } from "axios";
import { LoginFormIDP } from "@app/components/LoginForm"; import { LoginFormIDP } from "@app/components/LoginForm";
import { ListIdpsResponse, type GetIdpResponse } from "@server/routers/idp"; import { ListIdpsResponse } from "@server/routers/idp";
import type { Metadata } from "next"; import type { Metadata } from "next";
import { cookies } from "next/headers";
import { LAST_USED_IDP_COOKIE_NAME } from "@app/lib/consts";
import z from "zod";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Log In" title: "Log In"
@@ -32,9 +29,8 @@ export default async function Page(props: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>; searchParams: Promise<{ [key: string]: string | string[] | undefined }>;
}) { }) {
const searchParams = await props.searchParams; const searchParams = await props.searchParams;
const user = await verifySession({ skipCheckVerifyEmail: true }); const getUser = cache(verifySession);
const user = await getUser({ skipCheckVerifyEmail: true });
const lastUsedIdpCookie = (await cookies()).get(LAST_USED_IDP_COOKIE_NAME);
const isInvite = searchParams?.redirect?.includes("/invite"); const isInvite = searchParams?.redirect?.includes("/invite");
const forceLoginParam = searchParams?.forceLogin; const forceLoginParam = searchParams?.forceLogin;
@@ -89,47 +85,19 @@ export default async function Page(props: {
(build === "enterprise" && env.app.identityProviderMode === "org"); (build === "enterprise" && env.app.identityProviderMode === "org");
let loginIdps: LoginFormIDP[] = []; let loginIdps: LoginFormIDP[] = [];
let lastUsedIdpForSmartLogin: (LoginFormIDP & { orgId?: string }) | null =
null;
if (!useSmartLogin) { if (!useSmartLogin) {
// Load IdPs for DashboardLoginForm (OSS or org-only IdP mode) // Load IdPs for DashboardLoginForm (OSS or org-only IdP mode)
if (build === "oss" || env.app.identityProviderMode !== "org") { if (build === "oss" || env.app.identityProviderMode !== "org") {
const idpsRes = const idpsRes = await cache(
await priv.get<AxiosResponse<ListIdpsResponse>>("/idp"); async () =>
await priv.get<AxiosResponse<ListIdpsResponse>>("/idp")
)();
loginIdps = idpsRes.data.data.idps.map((idp) => ({ loginIdps = idpsRes.data.data.idps.map((idp) => ({
idpId: idp.idpId, idpId: idp.idpId,
name: idp.name, name: idp.name,
variant: idp.type variant: idp.type
})) as LoginFormIDP[]; })) as LoginFormIDP[];
} }
} else {
if (lastUsedIdpCookie) {
const lastUsedIdpSchema = z.object({
orgId: z.string().optional(),
idpId: z.number()
});
try {
const persistedData = lastUsedIdpSchema.parse(
JSON.parse(lastUsedIdpCookie.value)
);
const idpRes = await priv.get<AxiosResponse<GetIdpResponse>>(
`/idp/${persistedData.idpId}`
);
const idp = idpRes.data.data.idp;
lastUsedIdpForSmartLogin = {
idpId: idp.idpId,
name: idp.name,
variant: idp.type,
orgId: persistedData.orgId,
lastUsed: true
};
} catch (error) {
// the idp might not exist or the data is malformatted, skip this
}
}
} }
const t = await getTranslations(); const t = await getTranslations();
@@ -192,7 +160,6 @@ export default async function Page(props: {
redirect={redirectUrl} redirect={redirectUrl}
forceLogin={forceLogin} forceLogin={forceLogin}
defaultUser={defaultUser} defaultUser={defaultUser}
lastUsedIdp={lastUsedIdpForSmartLogin}
orgSignIn={ orgSignIn={
!isInvite && !isInvite &&
(build === "saas" || (build === "saas" ||
+4 -1
View File
@@ -5,6 +5,7 @@ import UserProvider from "@app/providers/UserProvider";
import { ListUserOrgsResponse } from "@server/routers/org"; import { ListUserOrgsResponse } from "@server/routers/org";
import { AxiosResponse } from "axios"; import { AxiosResponse } from "axios";
import { redirect } from "next/navigation"; import { redirect } from "next/navigation";
import { cache } from "react";
import OrganizationLanding from "@app/components/OrganizationLanding"; import OrganizationLanding from "@app/components/OrganizationLanding";
import { pullEnv } from "@app/lib/pullEnv"; import { pullEnv } from "@app/lib/pullEnv";
import { cleanRedirect } from "@app/lib/cleanRedirect"; import { cleanRedirect } from "@app/lib/cleanRedirect";
@@ -12,6 +13,7 @@ import { Layout } from "@app/components/Layout";
import RedirectToOrg from "@app/components/RedirectToOrg"; import RedirectToOrg from "@app/components/RedirectToOrg";
import { InitialSetupCompleteResponse } from "@server/routers/auth"; import { InitialSetupCompleteResponse } from "@server/routers/auth";
import { cookies } from "next/headers"; import { cookies } from "next/headers";
import { build } from "@server/build";
export const dynamic = "force-dynamic"; export const dynamic = "force-dynamic";
@@ -25,7 +27,8 @@ export default async function Page(props: {
const env = pullEnv(); const env = pullEnv();
const user = await verifySession({ skipCheckVerifyEmail: true }); const getUser = cache(verifySession);
const user = await getUser({ skipCheckVerifyEmail: true });
let complete = false; let complete = false;
try { try {
+26 -52
View File
@@ -1,25 +1,26 @@
"use client"; "use client";
import { generateOidcUrlProxy } from "@app/actions/server"; import { useEffect, useState } from "react";
import IdpTypeIcon from "@app/components/IdpTypeIcon";
import { Alert, AlertDescription } from "@app/components/ui/alert";
import { Button } from "@app/components/ui/button"; import { Button } from "@app/components/ui/button";
import { cleanRedirect } from "@app/lib/cleanRedirect"; import { Alert, AlertDescription } from "@app/components/ui/alert";
import { LAST_USED_IDP_COOKIE_NAME } from "@app/lib/consts";
import { setClientCookie } from "@app/lib/setClientCookie";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import IdpTypeIcon from "@app/components/IdpTypeIcon";
import {
generateOidcUrlProxy,
type GenerateOidcUrlResponse
} from "@app/actions/server";
import { import {
redirect as redirectTo, redirect as redirectTo,
useRouter, useParams,
useSearchParams useSearchParams
} from "next/navigation"; } from "next/navigation";
import { useEffect, useState, useTransition } from "react"; import { useRouter } from "next/navigation";
import { cleanRedirect } from "@app/lib/cleanRedirect";
export type LoginFormIDP = { export type LoginFormIDP = {
idpId: number; idpId: number;
name: string; name: string;
variant?: string; variant?: string;
lastUsed?: boolean;
}; };
type IdpLoginButtonsProps = { type IdpLoginButtonsProps = {
@@ -34,6 +35,7 @@ export default function IdpLoginButtons({
orgId orgId
}: IdpLoginButtonsProps) { }: IdpLoginButtonsProps) {
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [loading, setLoading] = useState(false);
const t = useTranslations(); const t = useTranslations();
const params = useSearchParams(); const params = useSearchParams();
@@ -50,22 +52,10 @@ export default function IdpLoginButtons({
} }
}, []); }, []);
const [loading, startTransition] = useTransition();
async function loginWithIdp(idpId: number) { async function loginWithIdp(idpId: number) {
setLoading(true);
setError(null); setError(null);
setClientCookie(
LAST_USED_IDP_COOKIE_NAME,
JSON.stringify({
orgId,
idpId
}),
{
sameSite: "Lax"
}
);
let redirectToUrl: string | undefined; let redirectToUrl: string | undefined;
try { try {
console.log("generating", idpId, redirect || "/", orgId); console.log("generating", idpId, redirect || "/", orgId);
@@ -78,6 +68,7 @@ export default function IdpLoginButtons({
if (response.error) { if (response.error) {
setError(response.message); setError(response.message);
setLoading(false);
return; return;
} }
@@ -93,6 +84,7 @@ export default function IdpLoginButtons({
"An unexpected error occurred. Please try again." "An unexpected error occurred. Please try again."
}) })
); );
setLoading(false);
} }
if (redirectToUrl) { if (redirectToUrl) {
@@ -132,38 +124,20 @@ export default function IdpLoginButtons({
idp.variant || idp.name.toLowerCase(); idp.variant || idp.name.toLowerCase();
return ( return (
<div <Button
className="w-full relative"
key={idp.idpId} key={idp.idpId}
type="button"
variant="outline"
className="w-full inline-flex items-center space-x-2"
onClick={() => {
loginWithIdp(idp.idpId);
}}
disabled={loading}
loading={loading}
> >
<Button <IdpTypeIcon type={effectiveType} size={16} />
key={idp.idpId} <span>{idp.name}</span>
type="button" </Button>
variant="outline"
className="w-full inline-flex items-center space-x-2 after:absolute after:inset-0 after:z-10"
onClick={() => {
startTransition(() =>
loginWithIdp(idp.idpId)
);
}}
disabled={loading}
loading={loading}
>
<IdpTypeIcon
type={effectiveType}
size={16}
/>
<span>{idp.name}</span>
</Button>
{idp.lastUsed && (
<div className="absolute inset-0">
<span className="absolute top-0 right-0 text-xs bg-primary text-primary-foreground rounded-bl-sm rounded-tr-sm px-2 py-0.5">
{t("idpLastUsed")}
</span>
</div>
)}
</div>
); );
})} })}
</> </>
+19 -37
View File
@@ -30,7 +30,10 @@ import Link from "next/link";
import { GenerateOidcUrlResponse } from "@server/routers/idp"; import { GenerateOidcUrlResponse } from "@server/routers/idp";
import { Separator } from "./ui/separator"; import { Separator } from "./ui/separator";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import { generateOidcUrlProxy, loginProxy } from "@app/actions/server"; import {
generateOidcUrlProxy,
loginProxy
} from "@app/actions/server";
import { redirect as redirectTo } from "next/navigation"; import { redirect as redirectTo } from "next/navigation";
import { useEnvContext } from "@app/hooks/useEnvContext"; import { useEnvContext } from "@app/hooks/useEnvContext";
import IdpTypeIcon from "@app/components/IdpTypeIcon"; import IdpTypeIcon from "@app/components/IdpTypeIcon";
@@ -38,13 +41,11 @@ import IdpTypeIcon from "@app/components/IdpTypeIcon";
import { loadReoScript } from "reodotdev"; import { loadReoScript } from "reodotdev";
import { build } from "@server/build"; import { build } from "@server/build";
import MfaInputForm from "@app/components/MfaInputForm"; import MfaInputForm from "@app/components/MfaInputForm";
import { useLocalStorage } from "@app/hooks/useLocalStorage";
export type LoginFormIDP = { export type LoginFormIDP = {
idpId: number; idpId: number;
name: string; name: string;
variant?: string; variant?: string;
lastUsed?: boolean;
}; };
type LoginFormProps = { type LoginFormProps = {
@@ -104,6 +105,7 @@ export default function LoginForm({
} }
}, []); }, []);
const formSchema = z.object({ const formSchema = z.object({
email: z.string().email({ message: t("emailInvalid") }), email: z.string().email({ message: t("emailInvalid") }),
password: z.string().min(8, { message: t("passwordRequirementsChars") }) password: z.string().min(8, { message: t("passwordRequirementsChars") })
@@ -128,10 +130,6 @@ export default function LoginForm({
} }
}); });
const [lastUsedIdpId, setLastUsedIdpId] = useLocalStorage<string | null>(
"login:last-used-idp",
null
);
async function onSubmit(values: any) { async function onSubmit(values: any) {
const { email, password } = form.getValues(); const { email, password } = form.getValues();
@@ -181,7 +179,8 @@ export default function LoginForm({
if (data.useSecurityKey) { if (data.useSecurityKey) {
setError( setError(
t("securityKeyRequired", { t("securityKeyRequired", {
defaultValue: "Please use your security key to sign in." defaultValue:
"Please use your security key to sign in."
}) })
); );
return; return;
@@ -243,8 +242,6 @@ export default function LoginForm({
async function loginWithIdp(idpId: number) { async function loginWithIdp(idpId: number) {
let redirectUrl: string | undefined; let redirectUrl: string | undefined;
setLastUsedIdpId(idpId.toString());
try { try {
const data = await generateOidcUrlProxy( const data = await generateOidcUrlProxy(
idpId, idpId,
@@ -359,6 +356,7 @@ export default function LoginForm({
)} )}
<div className="space-y-4"> <div className="space-y-4">
{!mfaRequested && ( {!mfaRequested && (
<> <>
<SecurityKeyAuthButton <SecurityKeyAuthButton
@@ -387,41 +385,25 @@ export default function LoginForm({
idp.variant || idp.name.toLowerCase(); idp.variant || idp.name.toLowerCase();
return ( return (
<div <Button
className="w-full relative"
key={idp.idpId} key={idp.idpId}
type="button"
variant="outline"
className="w-full inline-flex items-center space-x-2"
onClick={() => {
loginWithIdp(idp.idpId);
}}
> >
<Button <IdpTypeIcon type={effectiveType} size={16} />
key={idp.idpId} <span>{idp.name}</span>
type="button" </Button>
variant="outline"
className="w-full inline-flex items-center space-x-2 after:absolute after:inset-0 after:z-10"
onClick={() => {
loginWithIdp(idp.idpId);
}}
>
<IdpTypeIcon
type={effectiveType}
size={16}
/>
<span>{idp.name}</span>
</Button>
{lastUsedIdpId ===
idp.idpId.toString() && (
<div className="absolute inset-0">
<span className="absolute top-0 right-0 text-xs bg-primary text-primary-foreground rounded-bl-sm rounded-tr-sm px-2 py-0.5">
{t("idpLastUsed")}
</span>
</div>
)}
</div>
); );
})} })}
</> </>
)} )}
</> </>
)} )}
</div> </div>
</div> </div>
); );
+1 -14
View File
@@ -27,8 +27,6 @@ import UserProfileCard from "@app/components/UserProfileCard";
import SecurityKeyAuthButton from "@app/components/SecurityKeyAuthButton"; import SecurityKeyAuthButton from "@app/components/SecurityKeyAuthButton";
import { Separator } from "@app/components/ui/separator"; import { Separator } from "@app/components/ui/separator";
import OrgSignInLink from "@app/components/OrgSignInLink"; import OrgSignInLink from "@app/components/OrgSignInLink";
import type { LoginFormIDP } from "./LoginForm";
import IdpLoginButtons from "./IdpLoginButtons";
const identifierSchema = z.object({ const identifierSchema = z.object({
identifier: z.string().min(1, "Username or email is required") identifier: z.string().min(1, "Username or email is required")
@@ -55,7 +53,6 @@ type SmartLoginFormProps = {
forceLogin?: boolean; forceLogin?: boolean;
defaultUser?: string; defaultUser?: string;
orgSignIn?: OrgSignInConfig; orgSignIn?: OrgSignInConfig;
lastUsedIdp?: (LoginFormIDP & { orgId?: string }) | null;
}; };
type ViewState = type ViewState =
@@ -92,8 +89,7 @@ export default function SmartLoginForm({
redirect, redirect,
forceLogin, forceLogin,
defaultUser, defaultUser,
orgSignIn, orgSignIn
lastUsedIdp
}: SmartLoginFormProps) { }: SmartLoginFormProps) {
const router = useRouter(); const router = useRouter();
const { env } = useEnvContext(); const { env } = useEnvContext();
@@ -298,15 +294,6 @@ export default function SmartLoginForm({
</span> </span>
</div> </div>
</div> </div>
{lastUsedIdp && (
<IdpLoginButtons
idps={[lastUsedIdp]}
orgId={lastUsedIdp.orgId}
redirect={redirect}
/>
)}
<OrgSignInLink <OrgSignInLink
href={orgSignIn.href} href={orgSignIn.href}
linkText={orgSignIn.linkText} linkText={orgSignIn.linkText}
-1
View File
@@ -1 +0,0 @@
export const LAST_USED_IDP_COOKIE_NAME = "p__last_used_idp";
-32
View File
@@ -1,32 +0,0 @@
/**
* Set a cookie on the client side in javascript code, not on the server
* @param name
* @param value
* @param days
* @param options
*/
export function setClientCookie(
name: string,
value: string,
options: {
days?: number;
path?: string;
secure?: boolean;
sameSite?: "Strict" | "Lax" | "None";
} = {}
): void {
let cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
if (options.days) {
const date = new Date();
date.setTime(date.getTime() + options.days * 864e5);
cookie += `; expires=${date.toUTCString()}`;
}
cookie += `; path=${options.path ?? "/"}`;
if (options.secure) cookie += "; Secure";
if (options.sameSite) cookie += `; SameSite=${options.sameSite}`;
document.cookie = cookie;
}