Compare commits

..

25 Commits

Author SHA1 Message Date
Owen
cf97b6df9c Handle billing bad subs, remove exit node name from lock, prevent some
stuff on saas
2026-02-22 20:45:53 -08:00
Owen
6d9b129ac9 Merge branch 'main' into k8s 2026-02-22 17:28:09 -08:00
Owen Schwartz
63694032e8 Merge pull request #2511 from fosrl/dev
1.15.4-s.4
2026-02-20 20:45:23 -08:00
Owen Schwartz
b77aaedb58 Merge pull request #2510 from fosrl/crowdin_dev
New Crowdin updates
2026-02-20 20:44:45 -08:00
Owen Schwartz
a316d0301f New translations en-us.json (Norwegian Bokmal) 2026-02-20 20:43:45 -08:00
Owen Schwartz
dcd499720e New translations en-us.json (Chinese Simplified) 2026-02-20 20:43:44 -08:00
Owen Schwartz
e18fe21eca New translations en-us.json (Turkish) 2026-02-20 20:43:43 -08:00
Owen Schwartz
2970b51fb8 New translations en-us.json (Russian) 2026-02-20 20:43:42 -08:00
Owen Schwartz
b9236ff52e New translations en-us.json (Portuguese) 2026-02-20 20:43:41 -08:00
Owen Schwartz
38eb0ec7ed New translations en-us.json (Polish) 2026-02-20 20:43:39 -08:00
Owen Schwartz
ecba4a0b80 New translations en-us.json (Dutch) 2026-02-20 20:43:38 -08:00
Owen Schwartz
e6da18c952 New translations en-us.json (Korean) 2026-02-20 20:43:37 -08:00
Owen Schwartz
12941ac5ae New translations en-us.json (Italian) 2026-02-20 20:43:36 -08:00
Owen Schwartz
11085bda63 New translations en-us.json (German) 2026-02-20 20:43:35 -08:00
Owen Schwartz
c03211cc53 New translations en-us.json (Czech) 2026-02-20 20:43:33 -08:00
Owen Schwartz
2867459600 New translations en-us.json (Bulgarian) 2026-02-20 20:43:32 -08:00
Owen Schwartz
32b24db9bf New translations en-us.json (Spanish) 2026-02-20 20:43:31 -08:00
Owen Schwartz
660bf9ff87 New translations en-us.json (French) 2026-02-20 20:43:30 -08:00
miloschwartz
78c4ddebba set defaults 2026-02-20 20:35:57 -08:00
Owen
b786497299 Working on k8s 2026-02-19 17:55:49 -08:00
miloschwartz
eedf57af89 disable rybbit in saas 2026-02-19 17:54:40 -08:00
Owen
756f3f32ca Merge branch 'dev' 2026-02-17 21:57:49 -08:00
Owen
5987f6b2cd Allow enterprise 2026-02-17 21:55:57 -08:00
Owen
09a9457021 Fix transaction issue 2026-02-17 21:27:23 -08:00
Owen Schwartz
ca4643ec36 Merge pull request #2494 from fosrl/dev
1.15.4-s.3
2026-02-17 21:07:04 -08:00
31 changed files with 699 additions and 87 deletions

View File

@@ -56,6 +56,41 @@ jobs:
- name: Checkout code - name: Checkout code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Download MaxMind GeoLite2 databases
env:
MAXMIND_LICENSE_KEY: ${{ secrets.MAXMIND_LICENSE_KEY }}
run: |
echo "Downloading MaxMind GeoLite2 databases..."
# Download GeoLite2-Country
curl -L "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=${MAXMIND_LICENSE_KEY}&suffix=tar.gz" \
-o GeoLite2-Country.tar.gz
# Download GeoLite2-ASN
curl -L "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-ASN&license_key=${MAXMIND_LICENSE_KEY}&suffix=tar.gz" \
-o GeoLite2-ASN.tar.gz
# Extract the .mmdb files
tar -xzf GeoLite2-Country.tar.gz --strip-components=1 --wildcards '*.mmdb'
tar -xzf GeoLite2-ASN.tar.gz --strip-components=1 --wildcards '*.mmdb'
# Verify files exist
if [ ! -f "GeoLite2-Country.mmdb" ]; then
echo "ERROR: Failed to download GeoLite2-Country.mmdb"
exit 1
fi
if [ ! -f "GeoLite2-ASN.mmdb" ]; then
echo "ERROR: Failed to download GeoLite2-ASN.mmdb"
exit 1
fi
# Clean up tar files
rm -f GeoLite2-Country.tar.gz GeoLite2-ASN.tar.gz
echo "MaxMind databases downloaded successfully"
ls -lh GeoLite2-*.mmdb
- name: Monitor storage space - name: Monitor storage space
run: | run: |
THRESHOLD=75 THRESHOLD=75

View File

@@ -49,6 +49,14 @@ COPY server/db/ios_models.json ./dist/ios_models.json
COPY server/db/mac_models.json ./dist/mac_models.json COPY server/db/mac_models.json ./dist/mac_models.json
COPY public ./public COPY public ./public
# Copy MaxMind databases for SaaS builds
ARG BUILD=oss
RUN mkdir -p ./maxmind
# This is only for saas
COPY --from=builder-dev /app/GeoLite2-Country.mmdb ./maxmind/GeoLite2-Country.mmdb
COPY --from=builder-dev /app/GeoLite2-ASN.mmdb ./maxmind/GeoLite2-ASN.mmdb
# OCI Image Labels - Build Args for dynamic values # OCI Image Labels - Build Args for dynamic values
ARG VERSION="dev" ARG VERSION="dev"
ARG REVISION="" ARG REVISION=""

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Ролята е премахната", "accessRoleRemoved": "Ролята е премахната",
"accessRoleRemovedDescription": "Ролята беше успешно премахната.", "accessRoleRemovedDescription": "Ролята беше успешно премахната.",
"accessRoleRequiredRemove": "Преди да изтриете тази роля, моля изберете нова роля, към която да прехвърлите настоящите членове.", "accessRoleRequiredRemove": "Преди да изтриете тази роля, моля изберете нова роля, към която да прехвърлите настоящите членове.",
"network": "Мрежа",
"manage": "Управление", "manage": "Управление",
"sitesNotFound": "Няма намерени сайтове.", "sitesNotFound": "Няма намерени сайтове.",
"pangolinServerAdmin": "Администратор на сървър - Панголин", "pangolinServerAdmin": "Администратор на сървър - Панголин",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Частно", "sidebarClientResources": "Частно",
"sidebarAccessControl": "Контрол на достъпа", "sidebarAccessControl": "Контрол на достъпа",
"sidebarLogsAndAnalytics": "Дневници и анализи", "sidebarLogsAndAnalytics": "Дневници и анализи",
"sidebarTeam": "Екип",
"sidebarUsers": "Потребители", "sidebarUsers": "Потребители",
"sidebarAdmin": "Администратор", "sidebarAdmin": "Администратор",
"sidebarInvitations": "Покани", "sidebarInvitations": "Покани",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Лог & Анализи", "sidebarLogAndAnalytics": "Лог & Анализи",
"sidebarBluePrints": "Чертежи", "sidebarBluePrints": "Чертежи",
"sidebarOrganization": "Организация", "sidebarOrganization": "Организация",
"sidebarManagement": "Управление",
"sidebarBillingAndLicenses": "Фактуриране & Лицензи", "sidebarBillingAndLicenses": "Фактуриране & Лицензи",
"sidebarLogsAnalytics": "Анализи", "sidebarLogsAnalytics": "Анализи",
"blueprints": "Чертежи", "blueprints": "Чертежи",
@@ -1289,7 +1292,6 @@
"parsedContents": "Парсирано съдържание (само за четене)", "parsedContents": "Парсирано съдържание (само за четене)",
"enableDockerSocket": "Активиране на Docker Чернова", "enableDockerSocket": "Активиране на Docker Чернова",
"enableDockerSocketDescription": "Активиране на Docker Socket маркировка за изтегляне на етикети на чернова. Пътят на гнездото трябва да бъде предоставен на Newt.", "enableDockerSocketDescription": "Активиране на Docker Socket маркировка за изтегляне на етикети на чернова. Пътят на гнездото трябва да бъде предоставен на Newt.",
"enableDockerSocketLink": "Научете повече",
"viewDockerContainers": "Преглед на Docker контейнери", "viewDockerContainers": "Преглед на Docker контейнери",
"containersIn": "Контейнери в {siteName}", "containersIn": "Контейнери в {siteName}",
"selectContainerDescription": "Изберете контейнер, който да ползвате като име на хост за целта. Натиснете порт, за да ползвате порт", "selectContainerDescription": "Изберете контейнер, който да ползвате като име на хост за целта. Натиснете порт, за да ползвате порт",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Времето е в секунди", "timeIsInSeconds": "Времето е в секунди",
"requireDeviceApproval": "Изискват одобрение на устройства", "requireDeviceApproval": "Изискват одобрение на устройства",
"requireDeviceApprovalDescription": "Потребители с тази роля трябва да имат нови устройства одобрени от администратор преди да могат да се свържат и да имат достъп до ресурси.", "requireDeviceApprovalDescription": "Потребители с тази роля трябва да имат нови устройства одобрени от администратор преди да могат да се свържат и да имат достъп до ресурси.",
"sshAccess": "SSH достъп",
"roleAllowSsh": "Разреши SSH",
"roleAllowSshAllow": "Разреши",
"roleAllowSshDisallow": "Забрани",
"roleAllowSshDescription": "Разреши на потребителите с тази роля да се свързват с ресурси чрез SSH. Когато е деактивирано, ролята не може да използва SSH достъп.",
"sshSudoMode": "Sudo достъп",
"sshSudoModeNone": "Няма",
"sshSudoModeNoneDescription": "Потребителят не може да изпълнява команди с sudo.",
"sshSudoModeFull": "Пълен Sudo",
"sshSudoModeFullDescription": "Потребителят може да изпълнява всяка команда с sudo.",
"sshSudoModeCommands": "Команди",
"sshSudoModeCommandsDescription": "Потребителят може да изпълнява само определени команди с sudo.",
"sshSudo": "Разреши sudo",
"sshSudoCommands": "Sudo команди",
"sshSudoCommandsDescription": "Списък с команди, които потребителят е разрешено да изпълнява с sudo.",
"sshCreateHomeDir": "Създай начална директория",
"sshUnixGroups": "Unix групи",
"sshUnixGroupsDescription": "Unix групи, в които да добавите потребителя на целевия хост.",
"retryAttempts": "Опити за повторно", "retryAttempts": "Опити за повторно",
"expectedResponseCodes": "Очаквани кодове за отговор", "expectedResponseCodes": "Очаквани кодове за отговор",
"expectedResponseCodesDescription": "HTTP статус код, указващ здравословно състояние. Ако бъде оставено празно, между 200-300 се счита за здравословно.", "expectedResponseCodesDescription": "HTTP статус код, указващ здравословно състояние. Ако бъде оставено празно, между 200-300 се счита за здравословно.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Контрол на достъпа.", "editInternalResourceDialogAccessControl": "Контрол на достъпа.",
"editInternalResourceDialogAccessControlDescription": "Контролирайте кои роли, потребители и клиентски машини имат достъп до този ресурс, когато са свързани. Администраторите винаги имат достъп.", "editInternalResourceDialogAccessControlDescription": "Контролирайте кои роли, потребители и клиентски машини имат достъп до този ресурс, когато са свързани. Администраторите винаги имат достъп.",
"editInternalResourceDialogPortRangeValidationError": "Обхватът на портовете трябва да е \"*\" за всички портове или списък от разделени със запетая портове и диапазони (например: \"80,443,8000-9000\"). Портовете трябва да са между 1 и 65535.", "editInternalResourceDialogPortRangeValidationError": "Обхватът на портовете трябва да е \"*\" за всички портове или списък от разделени със запетая портове и диапазони (например: \"80,443,8000-9000\"). Портовете трябва да са между 1 и 65535.",
"internalResourceAuthDaemonStrategy": "Локация на SSH Auth Daemon",
"internalResourceAuthDaemonStrategyDescription": "Изберете къде ще работи демонът за SSH удостоверение: на сайта (Newt) или на отдалечен хост.",
"internalResourceAuthDaemonDescription": "Демонът за SSH удостоверение управлява подписването на SSH ключове и PAM удостоверение за този ресурс. Изберете дали да работи на сайта (Newt) или на отделен отдалечен хост. Вижте <docsLink>документацията</docsLink> за повече информация.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Изберете стратегия",
"internalResourceAuthDaemonStrategyLabel": "Местоположение",
"internalResourceAuthDaemonSite": "На сайта",
"internalResourceAuthDaemonSiteDescription": "Демонът за удостоверение работи на сайта (Newt).",
"internalResourceAuthDaemonRemote": "Отдалечен хост",
"internalResourceAuthDaemonRemoteDescription": "Демонът за удостоверение работи на хост, който не е сайтът.",
"internalResourceAuthDaemonPort": "Порт на демона (незадължителен)",
"orgAuthWhatsThis": "Къде мога да намеря идентификатора на организацията си?", "orgAuthWhatsThis": "Къде мога да намеря идентификатора на организацията си?",
"learnMore": "Научете повече.", "learnMore": "Научете повече.",
"backToHome": "Връщане към началната страница.", "backToHome": "Връщане към началната страница.",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Role odstraněna", "accessRoleRemoved": "Role odstraněna",
"accessRoleRemovedDescription": "Role byla úspěšně odstraněna.", "accessRoleRemovedDescription": "Role byla úspěšně odstraněna.",
"accessRoleRequiredRemove": "Před odstraněním této role vyberte novou roli, do které chcete převést existující členy.", "accessRoleRequiredRemove": "Před odstraněním této role vyberte novou roli, do které chcete převést existující členy.",
"network": "Síť",
"manage": "Spravovat", "manage": "Spravovat",
"sitesNotFound": "Nebyly nalezeny žádné stránky.", "sitesNotFound": "Nebyly nalezeny žádné stránky.",
"pangolinServerAdmin": "Správce serveru - Pangolin", "pangolinServerAdmin": "Správce serveru - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Soukromé", "sidebarClientResources": "Soukromé",
"sidebarAccessControl": "Kontrola přístupu", "sidebarAccessControl": "Kontrola přístupu",
"sidebarLogsAndAnalytics": "Logy & Analytika", "sidebarLogsAndAnalytics": "Logy & Analytika",
"sidebarTeam": "Tým",
"sidebarUsers": "Uživatelé", "sidebarUsers": "Uživatelé",
"sidebarAdmin": "Admin", "sidebarAdmin": "Admin",
"sidebarInvitations": "Pozvánky", "sidebarInvitations": "Pozvánky",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Log & Analytics", "sidebarLogAndAnalytics": "Log & Analytics",
"sidebarBluePrints": "Plány", "sidebarBluePrints": "Plány",
"sidebarOrganization": "Organizace", "sidebarOrganization": "Organizace",
"sidebarManagement": "Správa",
"sidebarBillingAndLicenses": "Fakturace a licence", "sidebarBillingAndLicenses": "Fakturace a licence",
"sidebarLogsAnalytics": "Analytici", "sidebarLogsAnalytics": "Analytici",
"blueprints": "Plány", "blueprints": "Plány",
@@ -1289,7 +1292,6 @@
"parsedContents": "Parsed content (Pouze pro čtení)", "parsedContents": "Parsed content (Pouze pro čtení)",
"enableDockerSocket": "Povolit Docker plán", "enableDockerSocket": "Povolit Docker plán",
"enableDockerSocketDescription": "Povolte seškrábání štítků na Docker Socket pro popisky plánů. Nová cesta musí být k dispozici.", "enableDockerSocketDescription": "Povolte seškrábání štítků na Docker Socket pro popisky plánů. Nová cesta musí být k dispozici.",
"enableDockerSocketLink": "Zjistit více",
"viewDockerContainers": "Zobrazit kontejnery Dockeru", "viewDockerContainers": "Zobrazit kontejnery Dockeru",
"containersIn": "Kontejnery v {siteName}", "containersIn": "Kontejnery v {siteName}",
"selectContainerDescription": "Vyberte jakýkoli kontejner pro použití jako název hostitele pro tento cíl. Klikněte na port pro použití portu.", "selectContainerDescription": "Vyberte jakýkoli kontejner pro použití jako název hostitele pro tento cíl. Klikněte na port pro použití portu.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Čas je v sekundách", "timeIsInSeconds": "Čas je v sekundách",
"requireDeviceApproval": "Vyžadovat schválení zařízení", "requireDeviceApproval": "Vyžadovat schválení zařízení",
"requireDeviceApprovalDescription": "Uživatelé s touto rolí potřebují nová zařízení schválená správcem, než se mohou připojit a přistupovat ke zdrojům.", "requireDeviceApprovalDescription": "Uživatelé s touto rolí potřebují nová zařízení schválená správcem, než se mohou připojit a přistupovat ke zdrojům.",
"sshAccess": "SSH přístup",
"roleAllowSsh": "Povolit SSH",
"roleAllowSshAllow": "Povolit",
"roleAllowSshDisallow": "Zakázat",
"roleAllowSshDescription": "Povolit uživatelům s touto rolí připojení k zdrojům přes SSH. Je-li zakázáno, role nemůže používat přístup SSH.",
"sshSudoMode": "Súdánský přístup",
"sshSudoModeNone": "Nic",
"sshSudoModeNoneDescription": "Uživatel nemůže spouštět příkazy se sudo.",
"sshSudoModeFull": "Úplný Súdán",
"sshSudoModeFullDescription": "Uživatel může spustit libovolný příkaz se sudo.",
"sshSudoModeCommands": "Příkazy",
"sshSudoModeCommandsDescription": "Uživatel může spustit pouze zadané příkazy s sudo.",
"sshSudo": "Povolit sudo",
"sshSudoCommands": "Sudo příkazy",
"sshSudoCommandsDescription": "Seznam příkazů, které může uživatel spouštět s sudo.",
"sshCreateHomeDir": "Vytvořit domovský adresář",
"sshUnixGroups": "Unixové skupiny",
"sshUnixGroupsDescription": "Unix skupiny přidají uživatele do cílového hostitele.",
"retryAttempts": "Opakovat pokusy", "retryAttempts": "Opakovat pokusy",
"expectedResponseCodes": "Očekávané kódy odezvy", "expectedResponseCodes": "Očekávané kódy odezvy",
"expectedResponseCodesDescription": "HTTP kód stavu, který označuje zdravý stav. Ponecháte-li prázdné, 200-300 je považováno za zdravé.", "expectedResponseCodesDescription": "HTTP kód stavu, který označuje zdravý stav. Ponecháte-li prázdné, 200-300 je považováno za zdravé.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Řízení přístupu", "editInternalResourceDialogAccessControl": "Řízení přístupu",
"editInternalResourceDialogAccessControlDescription": "Kontrolujte, které role, uživatelé a klienti mohou přistupovat k tomuto prostředku, když jsou připojeni. Admini mají vždy přístup.", "editInternalResourceDialogAccessControlDescription": "Kontrolujte, které role, uživatelé a klienti mohou přistupovat k tomuto prostředku, když jsou připojeni. Admini mají vždy přístup.",
"editInternalResourceDialogPortRangeValidationError": "Rozsah portů musí být \"*\" pro všechny porty, nebo seznam portů a rozsahů oddělených čárkou (např. \"80,443,8000-9000\"). Porty musí být mezi 1 a 65535.", "editInternalResourceDialogPortRangeValidationError": "Rozsah portů musí být \"*\" pro všechny porty, nebo seznam portů a rozsahů oddělených čárkou (např. \"80,443,8000-9000\"). Porty musí být mezi 1 a 65535.",
"internalResourceAuthDaemonStrategy": "SSH Auth Démon umístění",
"internalResourceAuthDaemonStrategyDescription": "Zvolte, kde běží SSH autentizační démon: na stránce (Newt) nebo na vzdáleném serveru.",
"internalResourceAuthDaemonDescription": "SSH autentizační daemon zpracovává podpis SSH klíče a PAM autentizaci tohoto zdroje. Vyberte si, zda běží na webu (Newt) nebo na samostatném vzdáleném serveru. Více informací najdete v <docsLink>dokumentaci</docsLink>.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Vybrat strategii",
"internalResourceAuthDaemonStrategyLabel": "Poloha",
"internalResourceAuthDaemonSite": "Na stránce",
"internalResourceAuthDaemonSiteDescription": "Auth daemon běží na webu (Newt).",
"internalResourceAuthDaemonRemote": "Vzdálený server",
"internalResourceAuthDaemonRemoteDescription": "Auth daemon běží na hostitele, který není web.",
"internalResourceAuthDaemonPort": "Daemon port (volitelné)",
"orgAuthWhatsThis": "Kde najdu ID mé organizace?", "orgAuthWhatsThis": "Kde najdu ID mé organizace?",
"learnMore": "Zjistit více", "learnMore": "Zjistit více",
"backToHome": "Zpět na domovskou stránku", "backToHome": "Zpět na domovskou stránku",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Rolle entfernt", "accessRoleRemoved": "Rolle entfernt",
"accessRoleRemovedDescription": "Die Rolle wurde erfolgreich entfernt.", "accessRoleRemovedDescription": "Die Rolle wurde erfolgreich entfernt.",
"accessRoleRequiredRemove": "Bevor Sie diese Rolle löschen, wählen Sie bitte eine neue Rolle aus, zu der die bestehenden Mitglieder übertragen werden sollen.", "accessRoleRequiredRemove": "Bevor Sie diese Rolle löschen, wählen Sie bitte eine neue Rolle aus, zu der die bestehenden Mitglieder übertragen werden sollen.",
"network": "Netzwerk",
"manage": "Verwalten", "manage": "Verwalten",
"sitesNotFound": "Keine Standorte gefunden.", "sitesNotFound": "Keine Standorte gefunden.",
"pangolinServerAdmin": "Server-Admin - Pangolin", "pangolinServerAdmin": "Server-Admin - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Privat", "sidebarClientResources": "Privat",
"sidebarAccessControl": "Zugriffskontrolle", "sidebarAccessControl": "Zugriffskontrolle",
"sidebarLogsAndAnalytics": "Protokolle & Analysen", "sidebarLogsAndAnalytics": "Protokolle & Analysen",
"sidebarTeam": "Team",
"sidebarUsers": "Benutzer", "sidebarUsers": "Benutzer",
"sidebarAdmin": "Admin", "sidebarAdmin": "Admin",
"sidebarInvitations": "Einladungen", "sidebarInvitations": "Einladungen",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Log & Analytik", "sidebarLogAndAnalytics": "Log & Analytik",
"sidebarBluePrints": "Blaupausen", "sidebarBluePrints": "Blaupausen",
"sidebarOrganization": "Organisation", "sidebarOrganization": "Organisation",
"sidebarManagement": "Management",
"sidebarBillingAndLicenses": "Abrechnung & Lizenzen", "sidebarBillingAndLicenses": "Abrechnung & Lizenzen",
"sidebarLogsAnalytics": "Analytik", "sidebarLogsAnalytics": "Analytik",
"blueprints": "Blaupausen", "blueprints": "Blaupausen",
@@ -1289,7 +1292,6 @@
"parsedContents": "Analysierte Inhalte (Nur lesen)", "parsedContents": "Analysierte Inhalte (Nur lesen)",
"enableDockerSocket": "Docker Blueprint aktivieren", "enableDockerSocket": "Docker Blueprint aktivieren",
"enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blueprintbeschriftungen. Der Socket-Pfad muss neu angegeben werden.", "enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blueprintbeschriftungen. Der Socket-Pfad muss neu angegeben werden.",
"enableDockerSocketLink": "Mehr erfahren",
"viewDockerContainers": "Docker Container anzeigen", "viewDockerContainers": "Docker Container anzeigen",
"containersIn": "Container in {siteName}", "containersIn": "Container in {siteName}",
"selectContainerDescription": "Wählen Sie einen Container, der als Hostname für dieses Ziel verwendet werden soll. Klicken Sie auf einen Port, um einen Port zu verwenden.", "selectContainerDescription": "Wählen Sie einen Container, der als Hostname für dieses Ziel verwendet werden soll. Klicken Sie auf einen Port, um einen Port zu verwenden.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Zeit ist in Sekunden", "timeIsInSeconds": "Zeit ist in Sekunden",
"requireDeviceApproval": "Gerätegenehmigungen erforderlich", "requireDeviceApproval": "Gerätegenehmigungen erforderlich",
"requireDeviceApprovalDescription": "Benutzer mit dieser Rolle benötigen neue Geräte, die von einem Administrator genehmigt wurden, bevor sie sich verbinden und auf Ressourcen zugreifen können.", "requireDeviceApprovalDescription": "Benutzer mit dieser Rolle benötigen neue Geräte, die von einem Administrator genehmigt wurden, bevor sie sich verbinden und auf Ressourcen zugreifen können.",
"sshAccess": "SSH-Zugriff",
"roleAllowSsh": "SSH erlauben",
"roleAllowSshAllow": "Erlauben",
"roleAllowSshDisallow": "Nicht zulassen",
"roleAllowSshDescription": "Benutzern mit dieser Rolle erlauben, sich über SSH mit Ressourcen zu verbinden. Wenn deaktiviert, kann die Rolle keinen SSH-Zugriff verwenden.",
"sshSudoMode": "Sudo-Zugriff",
"sshSudoModeNone": "Keine",
"sshSudoModeNoneDescription": "Benutzer kann keine Befehle mit sudo ausführen.",
"sshSudoModeFull": "Volles Sudo",
"sshSudoModeFullDescription": "Benutzer kann jeden Befehl mit sudo ausführen.",
"sshSudoModeCommands": "Befehle",
"sshSudoModeCommandsDescription": "Benutzer kann nur die angegebenen Befehle mit sudo ausführen.",
"sshSudo": "sudo erlauben",
"sshSudoCommands": "Sudo-Befehle",
"sshSudoCommandsDescription": "Liste der Befehle, die der Benutzer mit sudo ausführen darf.",
"sshCreateHomeDir": "Home-Verzeichnis erstellen",
"sshUnixGroups": "Unix-Gruppen",
"sshUnixGroupsDescription": "Unix-Gruppen, zu denen der Benutzer auf dem Ziel-Host hinzugefügt wird.",
"retryAttempts": "Wiederholungsversuche", "retryAttempts": "Wiederholungsversuche",
"expectedResponseCodes": "Erwartete Antwortcodes", "expectedResponseCodes": "Erwartete Antwortcodes",
"expectedResponseCodesDescription": "HTTP-Statuscode, der einen gesunden Zustand anzeigt. Wenn leer gelassen, wird 200-300 als gesund angesehen.", "expectedResponseCodesDescription": "HTTP-Statuscode, der einen gesunden Zustand anzeigt. Wenn leer gelassen, wird 200-300 als gesund angesehen.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Zugriffskontrolle", "editInternalResourceDialogAccessControl": "Zugriffskontrolle",
"editInternalResourceDialogAccessControlDescription": "Kontrollieren Sie, welche Rollen, Benutzer und Maschinen-Clients Zugriff auf diese Ressource haben, wenn sie verbunden sind. Admins haben immer Zugriff.", "editInternalResourceDialogAccessControlDescription": "Kontrollieren Sie, welche Rollen, Benutzer und Maschinen-Clients Zugriff auf diese Ressource haben, wenn sie verbunden sind. Admins haben immer Zugriff.",
"editInternalResourceDialogPortRangeValidationError": "Der Port-Bereich muss \"*\" für alle Ports sein, oder eine kommaseparierte Liste von Ports und Bereichen (z.B. \"80,443.8000-9000\"). Ports müssen zwischen 1 und 65535 liegen.", "editInternalResourceDialogPortRangeValidationError": "Der Port-Bereich muss \"*\" für alle Ports sein, oder eine kommaseparierte Liste von Ports und Bereichen (z.B. \"80,443.8000-9000\"). Ports müssen zwischen 1 und 65535 liegen.",
"internalResourceAuthDaemonStrategy": "SSH Auth-Daemon Standort",
"internalResourceAuthDaemonStrategyDescription": "Wählen Sie aus, wo der SSH-Authentifizierungs-Daemon läuft: auf der Site (Newt) oder auf einem entfernten Host.",
"internalResourceAuthDaemonDescription": "Der SSH-Authentifizierungs-Daemon verarbeitet SSH-Schlüsselsignaturen und PAM-Authentifizierung für diese Ressource. Wählen Sie, ob sie auf der Website (Newt) oder auf einem separaten entfernten Host ausgeführt wird. Siehe <docsLink>die Dokumentation</docsLink> für mehr.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Strategie auswählen",
"internalResourceAuthDaemonStrategyLabel": "Standort",
"internalResourceAuthDaemonSite": "Vor Ort",
"internalResourceAuthDaemonSiteDescription": "Der Auth Daemon läuft auf der Seite (Newt).",
"internalResourceAuthDaemonRemote": "Entfernter Host",
"internalResourceAuthDaemonRemoteDescription": "Der Auth Daemon läuft auf einem Host, der nicht die Site ist.",
"internalResourceAuthDaemonPort": "Daemon-Port (optional)",
"orgAuthWhatsThis": "Wo finde ich meine Organisations-ID?", "orgAuthWhatsThis": "Wo finde ich meine Organisations-ID?",
"learnMore": "Mehr erfahren", "learnMore": "Mehr erfahren",
"backToHome": "Zurück zur Startseite", "backToHome": "Zurück zur Startseite",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Rol eliminado", "accessRoleRemoved": "Rol eliminado",
"accessRoleRemovedDescription": "El rol se ha eliminado correctamente.", "accessRoleRemovedDescription": "El rol se ha eliminado correctamente.",
"accessRoleRequiredRemove": "Antes de eliminar este rol, seleccione un nuevo rol al que transferir miembros existentes.", "accessRoleRequiredRemove": "Antes de eliminar este rol, seleccione un nuevo rol al que transferir miembros existentes.",
"network": "Red",
"manage": "Gestionar", "manage": "Gestionar",
"sitesNotFound": "Sitios no encontrados.", "sitesNotFound": "Sitios no encontrados.",
"pangolinServerAdmin": "Admin Servidor - Pangolin", "pangolinServerAdmin": "Admin Servidor - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Privado", "sidebarClientResources": "Privado",
"sidebarAccessControl": "Control de acceso", "sidebarAccessControl": "Control de acceso",
"sidebarLogsAndAnalytics": "Registros y análisis", "sidebarLogsAndAnalytics": "Registros y análisis",
"sidebarTeam": "Equipo",
"sidebarUsers": "Usuarios", "sidebarUsers": "Usuarios",
"sidebarAdmin": "Admin", "sidebarAdmin": "Admin",
"sidebarInvitations": "Invitaciones", "sidebarInvitations": "Invitaciones",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Registro y análisis", "sidebarLogAndAnalytics": "Registro y análisis",
"sidebarBluePrints": "Planos", "sidebarBluePrints": "Planos",
"sidebarOrganization": "Organización", "sidebarOrganization": "Organización",
"sidebarManagement": "Gestión",
"sidebarBillingAndLicenses": "Facturación y licencias", "sidebarBillingAndLicenses": "Facturación y licencias",
"sidebarLogsAnalytics": "Analíticas", "sidebarLogsAnalytics": "Analíticas",
"blueprints": "Planos", "blueprints": "Planos",
@@ -1289,7 +1292,6 @@
"parsedContents": "Contenido analizado (Sólo lectura)", "parsedContents": "Contenido analizado (Sólo lectura)",
"enableDockerSocket": "Habilitar Plano Docker", "enableDockerSocket": "Habilitar Plano Docker",
"enableDockerSocketDescription": "Activar el raspado de etiquetas de Socket Docker para etiquetas de planos. La ruta del Socket debe proporcionarse a Newt.", "enableDockerSocketDescription": "Activar el raspado de etiquetas de Socket Docker para etiquetas de planos. La ruta del Socket debe proporcionarse a Newt.",
"enableDockerSocketLink": "Saber más",
"viewDockerContainers": "Ver contenedores Docker", "viewDockerContainers": "Ver contenedores Docker",
"containersIn": "Contenedores en {siteName}", "containersIn": "Contenedores en {siteName}",
"selectContainerDescription": "Seleccione cualquier contenedor para usar como nombre de host para este objetivo. Haga clic en un puerto para usar un puerto.", "selectContainerDescription": "Seleccione cualquier contenedor para usar como nombre de host para este objetivo. Haga clic en un puerto para usar un puerto.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "El tiempo está en segundos", "timeIsInSeconds": "El tiempo está en segundos",
"requireDeviceApproval": "Requiere aprobaciones del dispositivo", "requireDeviceApproval": "Requiere aprobaciones del dispositivo",
"requireDeviceApprovalDescription": "Los usuarios con este rol necesitan nuevos dispositivos aprobados por un administrador antes de poder conectarse y acceder a los recursos.", "requireDeviceApprovalDescription": "Los usuarios con este rol necesitan nuevos dispositivos aprobados por un administrador antes de poder conectarse y acceder a los recursos.",
"sshAccess": "Acceso a SSH",
"roleAllowSsh": "Permitir SSH",
"roleAllowSshAllow": "Permitir",
"roleAllowSshDisallow": "Rechazar",
"roleAllowSshDescription": "Permitir a los usuarios con este rol conectarse a recursos a través de SSH. Cuando está desactivado, el rol no puede usar acceso SSH.",
"sshSudoMode": "Acceso Sudo",
"sshSudoModeNone": "Ninguna",
"sshSudoModeNoneDescription": "El usuario no puede ejecutar comandos con sudo.",
"sshSudoModeFull": "Sudo completo",
"sshSudoModeFullDescription": "El usuario puede ejecutar cualquier comando con sudo.",
"sshSudoModeCommands": "Comandos",
"sshSudoModeCommandsDescription": "El usuario sólo puede ejecutar los comandos especificados con sudo.",
"sshSudo": "Permitir sudo",
"sshSudoCommands": "Comandos Sudo",
"sshSudoCommandsDescription": "Lista de comandos que el usuario puede ejecutar con sudo.",
"sshCreateHomeDir": "Crear directorio principal",
"sshUnixGroups": "Grupos Unix",
"sshUnixGroupsDescription": "Grupos Unix para agregar el usuario en el host de destino.",
"retryAttempts": "Intentos de Reintento", "retryAttempts": "Intentos de Reintento",
"expectedResponseCodes": "Códigos de respuesta esperados", "expectedResponseCodes": "Códigos de respuesta esperados",
"expectedResponseCodesDescription": "Código de estado HTTP que indica un estado saludable. Si se deja en blanco, se considera saludable de 200 a 300.", "expectedResponseCodesDescription": "Código de estado HTTP que indica un estado saludable. Si se deja en blanco, se considera saludable de 200 a 300.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Control de acceso", "editInternalResourceDialogAccessControl": "Control de acceso",
"editInternalResourceDialogAccessControlDescription": "Controla qué roles, usuarios y clientes de máquinas tienen acceso a este recurso cuando están conectados. Los administradores siempre tienen acceso.", "editInternalResourceDialogAccessControlDescription": "Controla qué roles, usuarios y clientes de máquinas tienen acceso a este recurso cuando están conectados. Los administradores siempre tienen acceso.",
"editInternalResourceDialogPortRangeValidationError": "El rango de puertos debe ser \"*\" para todos los puertos, o una lista separada por comas de puertos y rangos (por ejemplo, \"80,443,8000-9000\"). Los puertos deben estar entre 1 y 65535.", "editInternalResourceDialogPortRangeValidationError": "El rango de puertos debe ser \"*\" para todos los puertos, o una lista separada por comas de puertos y rangos (por ejemplo, \"80,443,8000-9000\"). Los puertos deben estar entre 1 y 65535.",
"internalResourceAuthDaemonStrategy": "Ubicación del demonio de autenticación SSSH",
"internalResourceAuthDaemonStrategyDescription": "Elija dónde se ejecuta el daemon de autenticación SSH: en el sitio (Newt) o en un host remoto.",
"internalResourceAuthDaemonDescription": "El daemon de autenticación SSSH maneja la firma de claves SSH y autenticación PAM para este recurso. Elija si se ejecuta en el sitio (Newt) o en un host remoto separado. Vea <docsLink>la documentación</docsLink> para más.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Seleccionar estrategia",
"internalResourceAuthDaemonStrategyLabel": "Ubicación",
"internalResourceAuthDaemonSite": "En el sitio",
"internalResourceAuthDaemonSiteDescription": "Auth daemon corre en el sitio (Newt).",
"internalResourceAuthDaemonRemote": "Host remoto",
"internalResourceAuthDaemonRemoteDescription": "El daemon Auth corre en un host que no es el sitio.",
"internalResourceAuthDaemonPort": "Puerto de demonio (opcional)",
"orgAuthWhatsThis": "¿Dónde puedo encontrar el ID de mi organización?", "orgAuthWhatsThis": "¿Dónde puedo encontrar el ID de mi organización?",
"learnMore": "Más información", "learnMore": "Más información",
"backToHome": "Volver a inicio", "backToHome": "Volver a inicio",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Rôle supprimé", "accessRoleRemoved": "Rôle supprimé",
"accessRoleRemovedDescription": "Le rôle a été supprimé avec succès.", "accessRoleRemovedDescription": "Le rôle a été supprimé avec succès.",
"accessRoleRequiredRemove": "Avant de supprimer ce rôle, veuillez sélectionner un nouveau rôle pour transférer les membres existants.", "accessRoleRequiredRemove": "Avant de supprimer ce rôle, veuillez sélectionner un nouveau rôle pour transférer les membres existants.",
"network": "Réseau",
"manage": "Gérer", "manage": "Gérer",
"sitesNotFound": "Aucun site trouvé.", "sitesNotFound": "Aucun site trouvé.",
"pangolinServerAdmin": "Admin Serveur - Pangolin", "pangolinServerAdmin": "Admin Serveur - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Privé", "sidebarClientResources": "Privé",
"sidebarAccessControl": "Contrôle d'accès", "sidebarAccessControl": "Contrôle d'accès",
"sidebarLogsAndAnalytics": "Journaux & Analytiques", "sidebarLogsAndAnalytics": "Journaux & Analytiques",
"sidebarTeam": "Equipe",
"sidebarUsers": "Utilisateurs", "sidebarUsers": "Utilisateurs",
"sidebarAdmin": "Administrateur", "sidebarAdmin": "Administrateur",
"sidebarInvitations": "Invitations", "sidebarInvitations": "Invitations",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Journaux & Analytiques", "sidebarLogAndAnalytics": "Journaux & Analytiques",
"sidebarBluePrints": "Configs", "sidebarBluePrints": "Configs",
"sidebarOrganization": "Organisation", "sidebarOrganization": "Organisation",
"sidebarManagement": "Gestion",
"sidebarBillingAndLicenses": "Facturation & Licences", "sidebarBillingAndLicenses": "Facturation & Licences",
"sidebarLogsAnalytics": "Analyses", "sidebarLogsAnalytics": "Analyses",
"blueprints": "Configs", "blueprints": "Configs",
@@ -1289,7 +1292,6 @@
"parsedContents": "Contenu analysé (lecture seule)", "parsedContents": "Contenu analysé (lecture seule)",
"enableDockerSocket": "Activer la Config Docker", "enableDockerSocket": "Activer la Config Docker",
"enableDockerSocketDescription": "Activer le ramassage d'étiquettes de socket Docker pour les étiquettes de plan. Le chemin de socket doit être fourni à Newt.", "enableDockerSocketDescription": "Activer le ramassage d'étiquettes de socket Docker pour les étiquettes de plan. Le chemin de socket doit être fourni à Newt.",
"enableDockerSocketLink": "En savoir plus",
"viewDockerContainers": "Voir les conteneurs Docker", "viewDockerContainers": "Voir les conteneurs Docker",
"containersIn": "Conteneurs en {siteName}", "containersIn": "Conteneurs en {siteName}",
"selectContainerDescription": "Sélectionnez n'importe quel conteneur à utiliser comme nom d'hôte pour cette cible. Cliquez sur un port pour utiliser un port.", "selectContainerDescription": "Sélectionnez n'importe quel conteneur à utiliser comme nom d'hôte pour cette cible. Cliquez sur un port pour utiliser un port.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Le temps est exprimé en secondes", "timeIsInSeconds": "Le temps est exprimé en secondes",
"requireDeviceApproval": "Exiger les autorisations de l'appareil", "requireDeviceApproval": "Exiger les autorisations de l'appareil",
"requireDeviceApprovalDescription": "Les utilisateurs ayant ce rôle ont besoin de nouveaux périphériques approuvés par un administrateur avant de pouvoir se connecter et accéder aux ressources.", "requireDeviceApprovalDescription": "Les utilisateurs ayant ce rôle ont besoin de nouveaux périphériques approuvés par un administrateur avant de pouvoir se connecter et accéder aux ressources.",
"sshAccess": "Accès SSH",
"roleAllowSsh": "Autoriser SSH",
"roleAllowSshAllow": "Autoriser",
"roleAllowSshDisallow": "Interdire",
"roleAllowSshDescription": "Autoriser les utilisateurs avec ce rôle à se connecter aux ressources via SSH. Lorsque désactivé, le rôle ne peut pas utiliser les accès SSH.",
"sshSudoMode": "Accès Sudo",
"sshSudoModeNone": "Aucun",
"sshSudoModeNoneDescription": "L'utilisateur ne peut pas exécuter de commandes avec sudo.",
"sshSudoModeFull": "Sudo complet",
"sshSudoModeFullDescription": "L'utilisateur peut exécuter n'importe quelle commande avec sudo.",
"sshSudoModeCommands": "Commandes",
"sshSudoModeCommandsDescription": "L'utilisateur ne peut exécuter que les commandes spécifiées avec sudo.",
"sshSudo": "Autoriser sudo",
"sshSudoCommands": "Commandes Sudo",
"sshSudoCommandsDescription": "Liste des commandes que l'utilisateur est autorisé à exécuter avec sudo.",
"sshCreateHomeDir": "Créer un répertoire personnel",
"sshUnixGroups": "Groupes Unix",
"sshUnixGroupsDescription": "Groupes Unix à ajouter à l'utilisateur sur l'hôte cible.",
"retryAttempts": "Tentatives de réessai", "retryAttempts": "Tentatives de réessai",
"expectedResponseCodes": "Codes de réponse attendus", "expectedResponseCodes": "Codes de réponse attendus",
"expectedResponseCodesDescription": "Code de statut HTTP indiquant un état de santé satisfaisant. Si non renseigné, 200-300 est considéré comme satisfaisant.", "expectedResponseCodesDescription": "Code de statut HTTP indiquant un état de santé satisfaisant. Si non renseigné, 200-300 est considéré comme satisfaisant.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Contrôle d'accès", "editInternalResourceDialogAccessControl": "Contrôle d'accès",
"editInternalResourceDialogAccessControlDescription": "Contrôlez quels rôles, utilisateurs et clients de machine ont accès à cette ressource lorsqu'ils sont connectés. Les administrateurs ont toujours accès.", "editInternalResourceDialogAccessControlDescription": "Contrôlez quels rôles, utilisateurs et clients de machine ont accès à cette ressource lorsqu'ils sont connectés. Les administrateurs ont toujours accès.",
"editInternalResourceDialogPortRangeValidationError": "La plage de ports doit être \"*\" pour tous les ports, ou une liste de ports et de plages séparés par des virgules (par exemple, \"80,443,8000-9000\"). Les ports doivent être compris entre 1 et 65535.", "editInternalResourceDialogPortRangeValidationError": "La plage de ports doit être \"*\" pour tous les ports, ou une liste de ports et de plages séparés par des virgules (par exemple, \"80,443,8000-9000\"). Les ports doivent être compris entre 1 et 65535.",
"internalResourceAuthDaemonStrategy": "Emplacement du démon d'authentification SSH",
"internalResourceAuthDaemonStrategyDescription": "Choisissez où le démon d'authentification SSH s'exécute : sur le site (Newt) ou sur un hôte distant.",
"internalResourceAuthDaemonDescription": "Le démon d'authentification SSH gère la signature des clés SSH et l'authentification PAM pour cette ressource. Choisissez s'il fonctionne sur le site (Newt) ou sur un hôte distant séparé. Voir <docsLink>la documentation</docsLink> pour plus d'informations.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Choisir une stratégie",
"internalResourceAuthDaemonStrategyLabel": "Localisation",
"internalResourceAuthDaemonSite": "Sur le site",
"internalResourceAuthDaemonSiteDescription": "Le démon Auth fonctionne sur le site (Newt).",
"internalResourceAuthDaemonRemote": "Hôte distant",
"internalResourceAuthDaemonRemoteDescription": "Le démon Auth fonctionne sur un hôte qui n'est pas le site.",
"internalResourceAuthDaemonPort": "Port du démon (optionnel)",
"orgAuthWhatsThis": "Où puis-je trouver mon identifiant d'organisation ?", "orgAuthWhatsThis": "Où puis-je trouver mon identifiant d'organisation ?",
"learnMore": "En savoir plus", "learnMore": "En savoir plus",
"backToHome": "Retour à l'accueil", "backToHome": "Retour à l'accueil",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Ruolo rimosso", "accessRoleRemoved": "Ruolo rimosso",
"accessRoleRemovedDescription": "Il ruolo è stato rimosso con successo.", "accessRoleRemovedDescription": "Il ruolo è stato rimosso con successo.",
"accessRoleRequiredRemove": "Prima di eliminare questo ruolo, seleziona un nuovo ruolo a cui trasferire i membri esistenti.", "accessRoleRequiredRemove": "Prima di eliminare questo ruolo, seleziona un nuovo ruolo a cui trasferire i membri esistenti.",
"network": "Rete",
"manage": "Gestisci", "manage": "Gestisci",
"sitesNotFound": "Nessun sito trovato.", "sitesNotFound": "Nessun sito trovato.",
"pangolinServerAdmin": "Server Admin - Pangolina", "pangolinServerAdmin": "Server Admin - Pangolina",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Privato", "sidebarClientResources": "Privato",
"sidebarAccessControl": "Controllo Accesso", "sidebarAccessControl": "Controllo Accesso",
"sidebarLogsAndAnalytics": "Registri E Analisi", "sidebarLogsAndAnalytics": "Registri E Analisi",
"sidebarTeam": "Squadra",
"sidebarUsers": "Utenti", "sidebarUsers": "Utenti",
"sidebarAdmin": "Amministratore", "sidebarAdmin": "Amministratore",
"sidebarInvitations": "Inviti", "sidebarInvitations": "Inviti",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Log & Analytics", "sidebarLogAndAnalytics": "Log & Analytics",
"sidebarBluePrints": "Progetti", "sidebarBluePrints": "Progetti",
"sidebarOrganization": "Organizzazione", "sidebarOrganization": "Organizzazione",
"sidebarManagement": "Gestione",
"sidebarBillingAndLicenses": "Fatturazione E Licenze", "sidebarBillingAndLicenses": "Fatturazione E Licenze",
"sidebarLogsAnalytics": "Analisi", "sidebarLogsAnalytics": "Analisi",
"blueprints": "Progetti", "blueprints": "Progetti",
@@ -1289,7 +1292,6 @@
"parsedContents": "Sommario Analizzato (Solo Lettura)", "parsedContents": "Sommario Analizzato (Solo Lettura)",
"enableDockerSocket": "Abilita Progetto Docker", "enableDockerSocket": "Abilita Progetto Docker",
"enableDockerSocketDescription": "Abilita la raschiatura dell'etichetta Docker Socket per le etichette dei progetti. Il percorso del socket deve essere fornito a Newt.", "enableDockerSocketDescription": "Abilita la raschiatura dell'etichetta Docker Socket per le etichette dei progetti. Il percorso del socket deve essere fornito a Newt.",
"enableDockerSocketLink": "Scopri di più",
"viewDockerContainers": "Visualizza Contenitori Docker", "viewDockerContainers": "Visualizza Contenitori Docker",
"containersIn": "Contenitori in {siteName}", "containersIn": "Contenitori in {siteName}",
"selectContainerDescription": "Seleziona qualsiasi contenitore da usare come hostname per questo obiettivo. Fai clic su una porta per usare una porta.", "selectContainerDescription": "Seleziona qualsiasi contenitore da usare come hostname per questo obiettivo. Fai clic su una porta per usare una porta.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Il tempo è in secondi", "timeIsInSeconds": "Il tempo è in secondi",
"requireDeviceApproval": "Richiede Approvazioni Dispositivo", "requireDeviceApproval": "Richiede Approvazioni Dispositivo",
"requireDeviceApprovalDescription": "Gli utenti con questo ruolo hanno bisogno di nuovi dispositivi approvati da un amministratore prima di poter connettersi e accedere alle risorse.", "requireDeviceApprovalDescription": "Gli utenti con questo ruolo hanno bisogno di nuovi dispositivi approvati da un amministratore prima di poter connettersi e accedere alle risorse.",
"sshAccess": "Accesso SSH",
"roleAllowSsh": "Consenti SSH",
"roleAllowSshAllow": "Consenti",
"roleAllowSshDisallow": "Non Consentire",
"roleAllowSshDescription": "Consenti agli utenti con questo ruolo di connettersi alle risorse tramite SSH. Quando disabilitato, il ruolo non può utilizzare l'accesso SSH.",
"sshSudoMode": "Accesso Sudo",
"sshSudoModeNone": "Nessuno",
"sshSudoModeNoneDescription": "L'utente non può eseguire comandi con sudo.",
"sshSudoModeFull": "Sudo Completo",
"sshSudoModeFullDescription": "L'utente può eseguire qualsiasi comando con sudo.",
"sshSudoModeCommands": "Comandi",
"sshSudoModeCommandsDescription": "L'utente può eseguire solo i comandi specificati con sudo.",
"sshSudo": "Consenti sudo",
"sshSudoCommands": "Comandi Sudo",
"sshSudoCommandsDescription": "Elenco di comandi che l'utente può eseguire con sudo.",
"sshCreateHomeDir": "Crea Cartella Home",
"sshUnixGroups": "Gruppi Unix",
"sshUnixGroupsDescription": "Gruppi Unix su cui aggiungere l'utente sull'host di destinazione.",
"retryAttempts": "Tentativi di Riprova", "retryAttempts": "Tentativi di Riprova",
"expectedResponseCodes": "Codici di Risposta Attesi", "expectedResponseCodes": "Codici di Risposta Attesi",
"expectedResponseCodesDescription": "Codice di stato HTTP che indica lo stato di salute. Se lasciato vuoto, considerato sano è compreso tra 200-300.", "expectedResponseCodesDescription": "Codice di stato HTTP che indica lo stato di salute. Se lasciato vuoto, considerato sano è compreso tra 200-300.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Controllo Accesso", "editInternalResourceDialogAccessControl": "Controllo Accesso",
"editInternalResourceDialogAccessControlDescription": "Controlla quali ruoli, utenti e client macchina hanno accesso a questa risorsa quando connessi. Gli amministratori hanno sempre accesso.", "editInternalResourceDialogAccessControlDescription": "Controlla quali ruoli, utenti e client macchina hanno accesso a questa risorsa quando connessi. Gli amministratori hanno sempre accesso.",
"editInternalResourceDialogPortRangeValidationError": "Il range delle porte deve essere \"*\" per tutte le porte, o un elenco di porte e intervalli separato da virgole (ad es. \"80,443,8000-9000\"). Le porte devono essere tra 1 e 65535.", "editInternalResourceDialogPortRangeValidationError": "Il range delle porte deve essere \"*\" per tutte le porte, o un elenco di porte e intervalli separato da virgole (ad es. \"80,443,8000-9000\"). Le porte devono essere tra 1 e 65535.",
"internalResourceAuthDaemonStrategy": "Posizione Demone Autenticazione SSH",
"internalResourceAuthDaemonStrategyDescription": "Scegli dove funziona il demone di autenticazione SSH: sul sito (Newt) o su un host remoto.",
"internalResourceAuthDaemonDescription": "Il demone di autenticazione SSH gestisce la firma della chiave SSH e l'autenticazione PAM per questa risorsa. Scegli se viene eseguito sul sito (Newt) o su un host remoto separato. Vedi <docsLink>la documentazione</docsLink> per ulteriori informazioni.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Seleziona Strategia",
"internalResourceAuthDaemonStrategyLabel": "Posizione",
"internalResourceAuthDaemonSite": "Sul Sito",
"internalResourceAuthDaemonSiteDescription": "Il demone Auth viene eseguito sul sito (Nuovo).",
"internalResourceAuthDaemonRemote": "Host Remoto",
"internalResourceAuthDaemonRemoteDescription": "Il demone di autenticazione viene eseguito su un host che non è il sito.",
"internalResourceAuthDaemonPort": "Porta Demone (facoltativa)",
"orgAuthWhatsThis": "Dove posso trovare l'ID della mia organizzazione?", "orgAuthWhatsThis": "Dove posso trovare l'ID della mia organizzazione?",
"learnMore": "Scopri di più", "learnMore": "Scopri di più",
"backToHome": "Torna alla home", "backToHome": "Torna alla home",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "역할이 제거되었습니다", "accessRoleRemoved": "역할이 제거되었습니다",
"accessRoleRemovedDescription": "역할이 성공적으로 제거되었습니다.", "accessRoleRemovedDescription": "역할이 성공적으로 제거되었습니다.",
"accessRoleRequiredRemove": "이 역할을 삭제하기 전에 기존 구성원을 전송할 새 역할을 선택하세요.", "accessRoleRequiredRemove": "이 역할을 삭제하기 전에 기존 구성원을 전송할 새 역할을 선택하세요.",
"network": "네트워크",
"manage": "관리", "manage": "관리",
"sitesNotFound": "사이트를 찾을 수 없습니다.", "sitesNotFound": "사이트를 찾을 수 없습니다.",
"pangolinServerAdmin": "서버 관리자 - 판골린", "pangolinServerAdmin": "서버 관리자 - 판골린",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "비공개", "sidebarClientResources": "비공개",
"sidebarAccessControl": "액세스 제어", "sidebarAccessControl": "액세스 제어",
"sidebarLogsAndAnalytics": "로그 및 분석", "sidebarLogsAndAnalytics": "로그 및 분석",
"sidebarTeam": "팀",
"sidebarUsers": "사용자", "sidebarUsers": "사용자",
"sidebarAdmin": "관리자", "sidebarAdmin": "관리자",
"sidebarInvitations": "초대", "sidebarInvitations": "초대",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "로그 & 통계", "sidebarLogAndAnalytics": "로그 & 통계",
"sidebarBluePrints": "청사진", "sidebarBluePrints": "청사진",
"sidebarOrganization": "조직", "sidebarOrganization": "조직",
"sidebarManagement": "관리",
"sidebarBillingAndLicenses": "결제 및 라이선스", "sidebarBillingAndLicenses": "결제 및 라이선스",
"sidebarLogsAnalytics": "분석", "sidebarLogsAnalytics": "분석",
"blueprints": "청사진", "blueprints": "청사진",
@@ -1289,7 +1292,6 @@
"parsedContents": "구문 분석된 콘텐츠 (읽기 전용)", "parsedContents": "구문 분석된 콘텐츠 (읽기 전용)",
"enableDockerSocket": "Docker 청사진 활성화", "enableDockerSocket": "Docker 청사진 활성화",
"enableDockerSocketDescription": "블루프린트 레이블을 위한 Docker 소켓 레이블 수집을 활성화합니다. 소켓 경로는 Newt에 제공되어야 합니다.", "enableDockerSocketDescription": "블루프린트 레이블을 위한 Docker 소켓 레이블 수집을 활성화합니다. 소켓 경로는 Newt에 제공되어야 합니다.",
"enableDockerSocketLink": "자세히 알아보기",
"viewDockerContainers": "도커 컨테이너 보기", "viewDockerContainers": "도커 컨테이너 보기",
"containersIn": "{siteName}의 컨테이너", "containersIn": "{siteName}의 컨테이너",
"selectContainerDescription": "이 대상을 위한 호스트 이름으로 사용할 컨테이너를 선택하세요. 포트를 사용하려면 포트를 클릭하세요.", "selectContainerDescription": "이 대상을 위한 호스트 이름으로 사용할 컨테이너를 선택하세요. 포트를 사용하려면 포트를 클릭하세요.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "시간은 초 단위입니다", "timeIsInSeconds": "시간은 초 단위입니다",
"requireDeviceApproval": "장치 승인 요구", "requireDeviceApproval": "장치 승인 요구",
"requireDeviceApprovalDescription": "이 역할을 가진 사용자는 장치가 연결되기 전에 관리자의 승인이 필요합니다.", "requireDeviceApprovalDescription": "이 역할을 가진 사용자는 장치가 연결되기 전에 관리자의 승인이 필요합니다.",
"sshAccess": "SSH 접속",
"roleAllowSsh": "SSH 허용",
"roleAllowSshAllow": "허용",
"roleAllowSshDisallow": "허용 안 함",
"roleAllowSshDescription": "이 역할을 가진 사용자가 SSH를 통해 리소스에 연결할 수 있도록 허용합니다. 비활성화되면 역할은 SSH 접속을 사용할 수 없습니다.",
"sshSudoMode": "Sudo 접속",
"sshSudoModeNone": "없음",
"sshSudoModeNoneDescription": "사용자는 sudo로 명령을 실행할 수 없습니다.",
"sshSudoModeFull": "전체 Sudo",
"sshSudoModeFullDescription": "사용자는 모든 명령을 sudo로 실행할 수 있습니다.",
"sshSudoModeCommands": "명령",
"sshSudoModeCommandsDescription": "사용자는 sudo로 지정된 명령만 실행할 수 있습니다.",
"sshSudo": "Sudo 허용",
"sshSudoCommands": "Sudo 명령",
"sshSudoCommandsDescription": "사용자가 sudo로 실행할 수 있도록 허용된 명령 목록입니다.",
"sshCreateHomeDir": "홈 디렉터리 생성",
"sshUnixGroups": "유닉스 그룹",
"sshUnixGroupsDescription": "대상 호스트에서 사용자를 추가할 유닉스 그룹입니다.",
"retryAttempts": "재시도 횟수", "retryAttempts": "재시도 횟수",
"expectedResponseCodes": "예상 응답 코드", "expectedResponseCodes": "예상 응답 코드",
"expectedResponseCodesDescription": "정상 상태를 나타내는 HTTP 상태 코드입니다. 비워 두면 200-300이 정상으로 간주됩니다.", "expectedResponseCodesDescription": "정상 상태를 나타내는 HTTP 상태 코드입니다. 비워 두면 200-300이 정상으로 간주됩니다.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "액세스 제어", "editInternalResourceDialogAccessControl": "액세스 제어",
"editInternalResourceDialogAccessControlDescription": "연결 시 이 리소스에 대한 액세스 권한을 가지는 역할, 사용자, 그리고 머신 클라이언트를 제어합니다. 관리자는 항상 접근할 수 있습니다.", "editInternalResourceDialogAccessControlDescription": "연결 시 이 리소스에 대한 액세스 권한을 가지는 역할, 사용자, 그리고 머신 클라이언트를 제어합니다. 관리자는 항상 접근할 수 있습니다.",
"editInternalResourceDialogPortRangeValidationError": "모든 포트에 대해서는 \"*\"로, 아니면 쉼표로 구분된 포트 및 범위 목록(예: \"80,443,8000-9000\")을 설정해야 합니다. 포트는 1에서 65535 사이여야 합니다.", "editInternalResourceDialogPortRangeValidationError": "모든 포트에 대해서는 \"*\"로, 아니면 쉼표로 구분된 포트 및 범위 목록(예: \"80,443,8000-9000\")을 설정해야 합니다. 포트는 1에서 65535 사이여야 합니다.",
"internalResourceAuthDaemonStrategy": "SSH 인증 데몬 위치",
"internalResourceAuthDaemonStrategyDescription": "SSH 인증 데몬이 작동하는 위치를 선택하세요: 사이트(Newt)에서 또는 원격 호스트에서.",
"internalResourceAuthDaemonDescription": "SSH 인증 데몬은 이 리소스를 위한 SSH 키 서명과 PAM 인증을 처리합니다. 사이트(Newt)에서 나 별도의 원격 호스트에서 실행할 것인지를 선택하세요. 자세한 내용은 <docsLink>문서</docsLink>를 참조하세요.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "전략 선택",
"internalResourceAuthDaemonStrategyLabel": "위치",
"internalResourceAuthDaemonSite": "사이트에서 인증 데몬이 실행됩니다(Newt).",
"internalResourceAuthDaemonSiteDescription": "인증 데몬이 사이트(Newt)에서 실행됩니다.",
"internalResourceAuthDaemonRemote": "원격 호스트",
"internalResourceAuthDaemonRemoteDescription": "인증 데몬이 사이트가 아닌 다른 호스트에서 실행됩니다.",
"internalResourceAuthDaemonPort": "데몬 포트 (선택 사항)",
"orgAuthWhatsThis": "조직 ID를 어디에서 찾을 수 있습니까?", "orgAuthWhatsThis": "조직 ID를 어디에서 찾을 수 있습니까?",
"learnMore": "자세히 알아보기", "learnMore": "자세히 알아보기",
"backToHome": "홈으로 돌아가기", "backToHome": "홈으로 돌아가기",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Rolle fjernet", "accessRoleRemoved": "Rolle fjernet",
"accessRoleRemovedDescription": "Rollen er vellykket fjernet.", "accessRoleRemovedDescription": "Rollen er vellykket fjernet.",
"accessRoleRequiredRemove": "Før du sletter denne rollen, vennligst velg en ny rolle å overføre eksisterende medlemmer til.", "accessRoleRequiredRemove": "Før du sletter denne rollen, vennligst velg en ny rolle å overføre eksisterende medlemmer til.",
"network": "Nettverk",
"manage": "Administrer", "manage": "Administrer",
"sitesNotFound": "Ingen områder funnet.", "sitesNotFound": "Ingen områder funnet.",
"pangolinServerAdmin": "Server Admin - Pangolin", "pangolinServerAdmin": "Server Admin - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Privat", "sidebarClientResources": "Privat",
"sidebarAccessControl": "Tilgangskontroll", "sidebarAccessControl": "Tilgangskontroll",
"sidebarLogsAndAnalytics": "Logger og analyser", "sidebarLogsAndAnalytics": "Logger og analyser",
"sidebarTeam": "Lag",
"sidebarUsers": "Brukere", "sidebarUsers": "Brukere",
"sidebarAdmin": "Administrator", "sidebarAdmin": "Administrator",
"sidebarInvitations": "Invitasjoner", "sidebarInvitations": "Invitasjoner",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Logg og analyser", "sidebarLogAndAnalytics": "Logg og analyser",
"sidebarBluePrints": "Tegninger", "sidebarBluePrints": "Tegninger",
"sidebarOrganization": "Organisasjon", "sidebarOrganization": "Organisasjon",
"sidebarManagement": "Administrasjon",
"sidebarBillingAndLicenses": "Fakturering & lisenser", "sidebarBillingAndLicenses": "Fakturering & lisenser",
"sidebarLogsAnalytics": "Analyser", "sidebarLogsAnalytics": "Analyser",
"blueprints": "Tegninger", "blueprints": "Tegninger",
@@ -1289,7 +1292,6 @@
"parsedContents": "Parastinnhold (kun lese)", "parsedContents": "Parastinnhold (kun lese)",
"enableDockerSocket": "Aktiver Docker blåkopi", "enableDockerSocket": "Aktiver Docker blåkopi",
"enableDockerSocketDescription": "Aktiver skraping av Docker Socket for blueprint Etiketter. Socket bane må brukes for nye.", "enableDockerSocketDescription": "Aktiver skraping av Docker Socket for blueprint Etiketter. Socket bane må brukes for nye.",
"enableDockerSocketLink": "Lær mer",
"viewDockerContainers": "Vis Docker-containere", "viewDockerContainers": "Vis Docker-containere",
"containersIn": "Containere i {siteName}", "containersIn": "Containere i {siteName}",
"selectContainerDescription": "Velg en hvilken som helst container for å bruke som vertsnavn for dette målet. Klikk på en port for å bruke en port.", "selectContainerDescription": "Velg en hvilken som helst container for å bruke som vertsnavn for dette målet. Klikk på en port for å bruke en port.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Tid er i sekunder", "timeIsInSeconds": "Tid er i sekunder",
"requireDeviceApproval": "Krev enhetsgodkjenning", "requireDeviceApproval": "Krev enhetsgodkjenning",
"requireDeviceApprovalDescription": "Brukere med denne rollen trenger nye enheter godkjent av en admin før de kan koble seg og få tilgang til ressurser.", "requireDeviceApprovalDescription": "Brukere med denne rollen trenger nye enheter godkjent av en admin før de kan koble seg og få tilgang til ressurser.",
"sshAccess": "SSH tilgang",
"roleAllowSsh": "Tillat SSH",
"roleAllowSshAllow": "Tillat",
"roleAllowSshDisallow": "Forby",
"roleAllowSshDescription": "Tillat brukere med denne rollen å koble til ressurser via SSH. Når deaktivert får rollen ikke tilgang til SSH.",
"sshSudoMode": "Sudo tilgang",
"sshSudoModeNone": "Ingen",
"sshSudoModeNoneDescription": "Brukeren kan ikke kjøre kommandoer med sudo.",
"sshSudoModeFull": "Full Sudo",
"sshSudoModeFullDescription": "Brukeren kan kjøre hvilken som helst kommando med sudo.",
"sshSudoModeCommands": "Kommandoer",
"sshSudoModeCommandsDescription": "Brukeren kan bare kjøre de angitte kommandoene med sudo.",
"sshSudo": "Tillat sudo",
"sshSudoCommands": "Sudo kommandoer",
"sshSudoCommandsDescription": "Liste av kommandoer brukeren har lov til å kjøre med sudo.",
"sshCreateHomeDir": "Opprett hjemmappe",
"sshUnixGroups": "Unix grupper",
"sshUnixGroupsDescription": "Unix grupper for å legge til brukeren til målverten.",
"retryAttempts": "Forsøk på nytt", "retryAttempts": "Forsøk på nytt",
"expectedResponseCodes": "Forventede svarkoder", "expectedResponseCodes": "Forventede svarkoder",
"expectedResponseCodesDescription": "HTTP-statuskode som indikerer sunn status. Hvis den blir stående tom, regnes 200-300 som sunn.", "expectedResponseCodesDescription": "HTTP-statuskode som indikerer sunn status. Hvis den blir stående tom, regnes 200-300 som sunn.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Tilgangskontroll", "editInternalResourceDialogAccessControl": "Tilgangskontroll",
"editInternalResourceDialogAccessControlDescription": "Kontroller hvilke roller, brukere og maskinklienter som har tilgang til denne ressursen når den er koblet til. Administratorer har alltid tilgang.", "editInternalResourceDialogAccessControlDescription": "Kontroller hvilke roller, brukere og maskinklienter som har tilgang til denne ressursen når den er koblet til. Administratorer har alltid tilgang.",
"editInternalResourceDialogPortRangeValidationError": "Portsjiktet må være \"*\" for alle porter, eller en kommaseparert liste med porter og sjikt (f.eks. \"80,443,8000-9000\"). Porter må være mellom 1 og 65535.", "editInternalResourceDialogPortRangeValidationError": "Portsjiktet må være \"*\" for alle porter, eller en kommaseparert liste med porter og sjikt (f.eks. \"80,443,8000-9000\"). Porter må være mellom 1 og 65535.",
"internalResourceAuthDaemonStrategy": "SSH Auth Daemon Sted",
"internalResourceAuthDaemonStrategyDescription": "Velg hvor SSH-autentisering daemon kjører: på nettstedet (Newt) eller på en ekstern vert.",
"internalResourceAuthDaemonDescription": "SSH-godkjenning daemon håndterer SSH-nøkkel signering og PAM autentisering for denne ressursen. Velg om den kjører på nettstedet (Newt) eller på en separat ekstern vert. Se <docsLink>dokumentasjonen</docsLink> for mer.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Velg strategi",
"internalResourceAuthDaemonStrategyLabel": "Sted",
"internalResourceAuthDaemonSite": "På nettsted",
"internalResourceAuthDaemonSiteDescription": "Autentiser daemon kjører på nettstedet (Newt).",
"internalResourceAuthDaemonRemote": "Ekstern vert",
"internalResourceAuthDaemonRemoteDescription": "Autentiser daemon kjører på en vert som ikke er nettstedet.",
"internalResourceAuthDaemonPort": "Daemon Port (valgfritt)",
"orgAuthWhatsThis": "Hvor kan jeg finne min organisasjons-ID?", "orgAuthWhatsThis": "Hvor kan jeg finne min organisasjons-ID?",
"learnMore": "Lær mer", "learnMore": "Lær mer",
"backToHome": "Gå tilbake til start", "backToHome": "Gå tilbake til start",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Rol verwijderd", "accessRoleRemoved": "Rol verwijderd",
"accessRoleRemovedDescription": "De rol is succesvol verwijderd.", "accessRoleRemovedDescription": "De rol is succesvol verwijderd.",
"accessRoleRequiredRemove": "Voordat u deze rol verwijdert, selecteer een nieuwe rol om bestaande leden aan te dragen.", "accessRoleRequiredRemove": "Voordat u deze rol verwijdert, selecteer een nieuwe rol om bestaande leden aan te dragen.",
"network": "Netwerk",
"manage": "Beheren", "manage": "Beheren",
"sitesNotFound": "Geen sites gevonden.", "sitesNotFound": "Geen sites gevonden.",
"pangolinServerAdmin": "Serverbeheer - Pangolin", "pangolinServerAdmin": "Serverbeheer - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Privé", "sidebarClientResources": "Privé",
"sidebarAccessControl": "Toegangs controle", "sidebarAccessControl": "Toegangs controle",
"sidebarLogsAndAnalytics": "Logs & Analytics", "sidebarLogsAndAnalytics": "Logs & Analytics",
"sidebarTeam": "Team",
"sidebarUsers": "Gebruikers", "sidebarUsers": "Gebruikers",
"sidebarAdmin": "Beheerder", "sidebarAdmin": "Beheerder",
"sidebarInvitations": "Uitnodigingen", "sidebarInvitations": "Uitnodigingen",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Log & Analytics", "sidebarLogAndAnalytics": "Log & Analytics",
"sidebarBluePrints": "Blauwdrukken", "sidebarBluePrints": "Blauwdrukken",
"sidebarOrganization": "Organisatie", "sidebarOrganization": "Organisatie",
"sidebarManagement": "Beheer",
"sidebarBillingAndLicenses": "Facturatie & Licenties", "sidebarBillingAndLicenses": "Facturatie & Licenties",
"sidebarLogsAnalytics": "Analyses", "sidebarLogsAnalytics": "Analyses",
"blueprints": "Blauwdrukken", "blueprints": "Blauwdrukken",
@@ -1289,7 +1292,6 @@
"parsedContents": "Geparseerde inhoud (alleen lezen)", "parsedContents": "Geparseerde inhoud (alleen lezen)",
"enableDockerSocket": "Schakel Docker Blauwdruk in", "enableDockerSocket": "Schakel Docker Blauwdruk in",
"enableDockerSocketDescription": "Schakel Docker Socket label in voor blauwdruk labels. Pad naar Nieuw.", "enableDockerSocketDescription": "Schakel Docker Socket label in voor blauwdruk labels. Pad naar Nieuw.",
"enableDockerSocketLink": "Meer informatie",
"viewDockerContainers": "Bekijk Docker containers", "viewDockerContainers": "Bekijk Docker containers",
"containersIn": "Containers in {siteName}", "containersIn": "Containers in {siteName}",
"selectContainerDescription": "Selecteer een container om als hostnaam voor dit doel te gebruiken. Klik op een poort om een poort te gebruiken.", "selectContainerDescription": "Selecteer een container om als hostnaam voor dit doel te gebruiken. Klik op een poort om een poort te gebruiken.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Tijd is in seconden", "timeIsInSeconds": "Tijd is in seconden",
"requireDeviceApproval": "Vereist goedkeuring van apparaat", "requireDeviceApproval": "Vereist goedkeuring van apparaat",
"requireDeviceApprovalDescription": "Gebruikers met deze rol hebben nieuwe apparaten nodig die door een beheerder zijn goedgekeurd voordat ze verbinding kunnen maken met bronnen en deze kunnen gebruiken.", "requireDeviceApprovalDescription": "Gebruikers met deze rol hebben nieuwe apparaten nodig die door een beheerder zijn goedgekeurd voordat ze verbinding kunnen maken met bronnen en deze kunnen gebruiken.",
"sshAccess": "SSH toegang",
"roleAllowSsh": "SSH toestaan",
"roleAllowSshAllow": "Toestaan",
"roleAllowSshDisallow": "Weigeren",
"roleAllowSshDescription": "Sta gebruikers met deze rol toe om verbinding te maken met bronnen via SSH. Indien uitgeschakeld kan de rol geen gebruik maken van SSH toegang.",
"sshSudoMode": "Sudo toegang",
"sshSudoModeNone": "geen",
"sshSudoModeNoneDescription": "Gebruiker kan geen commando's uitvoeren met sudo.",
"sshSudoModeFull": "Volledige Sudo",
"sshSudoModeFullDescription": "Gebruiker kan elk commando uitvoeren met een sudo.",
"sshSudoModeCommands": "Opdrachten",
"sshSudoModeCommandsDescription": "Gebruiker kan alleen de opgegeven commando's uitvoeren met de sudo.",
"sshSudo": "sudo toestaan",
"sshSudoCommands": "Sudo Commando's",
"sshSudoCommandsDescription": "Lijst van commando's die de gebruiker mag uitvoeren met een sudo.",
"sshCreateHomeDir": "Maak Home Directory",
"sshUnixGroups": "Unix groepen",
"sshUnixGroupsDescription": "Unix groepen om de gebruiker toe te voegen aan de doel host.",
"retryAttempts": "Herhaal Pogingen", "retryAttempts": "Herhaal Pogingen",
"expectedResponseCodes": "Verwachte Reactiecodes", "expectedResponseCodes": "Verwachte Reactiecodes",
"expectedResponseCodesDescription": "HTTP-statuscode die gezonde status aangeeft. Indien leeg wordt 200-300 als gezond beschouwd.", "expectedResponseCodesDescription": "HTTP-statuscode die gezonde status aangeeft. Indien leeg wordt 200-300 als gezond beschouwd.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Toegangs controle", "editInternalResourceDialogAccessControl": "Toegangs controle",
"editInternalResourceDialogAccessControlDescription": "Beheer welke rollen, gebruikers en machineclients toegang hebben tot deze bron wanneer ze zijn verbonden. Beheerders hebben altijd toegang.", "editInternalResourceDialogAccessControlDescription": "Beheer welke rollen, gebruikers en machineclients toegang hebben tot deze bron wanneer ze zijn verbonden. Beheerders hebben altijd toegang.",
"editInternalResourceDialogPortRangeValidationError": "Poortbereik moet \"*\" zijn voor alle poorten, of een komma-gescheiden lijst van poorten en bereiken (bijv. \"80,443,8000-9000\"). Poorten moeten tussen 1 en 65535 zijn.", "editInternalResourceDialogPortRangeValidationError": "Poortbereik moet \"*\" zijn voor alle poorten, of een komma-gescheiden lijst van poorten en bereiken (bijv. \"80,443,8000-9000\"). Poorten moeten tussen 1 en 65535 zijn.",
"internalResourceAuthDaemonStrategy": "SSH Auth Daemon locatie",
"internalResourceAuthDaemonStrategyDescription": "Kies waar de SSH authenticatie daemon wordt uitgevoerd: op de website (Newt) of op een externe host.",
"internalResourceAuthDaemonDescription": "De SSH authenticatie daemon zorgt voor SSH sleutelondertekening en PAM authenticatie voor deze resource. Kies of het wordt uitgevoerd op de website (Nieuw) of op een afzonderlijke externe host. Zie <docsLink>de documentatie</docsLink> voor meer.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Selecteer strategie",
"internalResourceAuthDaemonStrategyLabel": "Locatie",
"internalResourceAuthDaemonSite": "In de site",
"internalResourceAuthDaemonSiteDescription": "Auth daemon draait op de site (Newt).",
"internalResourceAuthDaemonRemote": "Externe host",
"internalResourceAuthDaemonRemoteDescription": "Authenticatiedaemon draait op een host die niet de site is.",
"internalResourceAuthDaemonPort": "Daemon poort (optioneel)",
"orgAuthWhatsThis": "Waar kan ik mijn organisatie-ID vinden?", "orgAuthWhatsThis": "Waar kan ik mijn organisatie-ID vinden?",
"learnMore": "Meer informatie", "learnMore": "Meer informatie",
"backToHome": "Ga terug naar startpagina", "backToHome": "Ga terug naar startpagina",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Rola usunięta", "accessRoleRemoved": "Rola usunięta",
"accessRoleRemovedDescription": "Rola została pomyślnie usunięta.", "accessRoleRemovedDescription": "Rola została pomyślnie usunięta.",
"accessRoleRequiredRemove": "Przed usunięciem tej roli, wybierz nową rolę do której zostaną przeniesieni obecni członkowie.", "accessRoleRequiredRemove": "Przed usunięciem tej roli, wybierz nową rolę do której zostaną przeniesieni obecni członkowie.",
"network": "Sieć",
"manage": "Zarządzaj", "manage": "Zarządzaj",
"sitesNotFound": "Nie znaleziono witryn.", "sitesNotFound": "Nie znaleziono witryn.",
"pangolinServerAdmin": "Administrator serwera - Pangolin", "pangolinServerAdmin": "Administrator serwera - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Prywatny", "sidebarClientResources": "Prywatny",
"sidebarAccessControl": "Kontrola dostępu", "sidebarAccessControl": "Kontrola dostępu",
"sidebarLogsAndAnalytics": "Logi i Analityki", "sidebarLogsAndAnalytics": "Logi i Analityki",
"sidebarTeam": "Drużyna",
"sidebarUsers": "Użytkownicy", "sidebarUsers": "Użytkownicy",
"sidebarAdmin": "Administrator", "sidebarAdmin": "Administrator",
"sidebarInvitations": "Zaproszenia", "sidebarInvitations": "Zaproszenia",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Dziennik & Analityka", "sidebarLogAndAnalytics": "Dziennik & Analityka",
"sidebarBluePrints": "Schematy", "sidebarBluePrints": "Schematy",
"sidebarOrganization": "Organizacja", "sidebarOrganization": "Organizacja",
"sidebarManagement": "Zarządzanie",
"sidebarBillingAndLicenses": "Płatność i licencje", "sidebarBillingAndLicenses": "Płatność i licencje",
"sidebarLogsAnalytics": "Analityka", "sidebarLogsAnalytics": "Analityka",
"blueprints": "Schematy", "blueprints": "Schematy",
@@ -1289,7 +1292,6 @@
"parsedContents": "Przetworzona zawartość (tylko do odczytu)", "parsedContents": "Przetworzona zawartość (tylko do odczytu)",
"enableDockerSocket": "Włącz schemat dokera", "enableDockerSocket": "Włącz schemat dokera",
"enableDockerSocketDescription": "Włącz etykietowanie kieszeni dokującej dla etykiet schematów. Ścieżka do gniazda musi być dostarczona do Newt.", "enableDockerSocketDescription": "Włącz etykietowanie kieszeni dokującej dla etykiet schematów. Ścieżka do gniazda musi być dostarczona do Newt.",
"enableDockerSocketLink": "Dowiedz się więcej",
"viewDockerContainers": "Zobacz kontenery dokujące", "viewDockerContainers": "Zobacz kontenery dokujące",
"containersIn": "Pojemniki w {siteName}", "containersIn": "Pojemniki w {siteName}",
"selectContainerDescription": "Wybierz dowolny kontener do użycia jako nazwa hosta dla tego celu. Kliknij port, aby użyć portu.", "selectContainerDescription": "Wybierz dowolny kontener do użycia jako nazwa hosta dla tego celu. Kliknij port, aby użyć portu.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Czas w sekundach", "timeIsInSeconds": "Czas w sekundach",
"requireDeviceApproval": "Wymagaj zatwierdzenia urządzenia", "requireDeviceApproval": "Wymagaj zatwierdzenia urządzenia",
"requireDeviceApprovalDescription": "Użytkownicy o tej roli potrzebują nowych urządzeń zatwierdzonych przez administratora, zanim będą mogli połączyć się i uzyskać dostęp do zasobów.", "requireDeviceApprovalDescription": "Użytkownicy o tej roli potrzebują nowych urządzeń zatwierdzonych przez administratora, zanim będą mogli połączyć się i uzyskać dostęp do zasobów.",
"sshAccess": "Dostęp SSH",
"roleAllowSsh": "Zezwalaj na SSH",
"roleAllowSshAllow": "Zezwól",
"roleAllowSshDisallow": "Nie zezwalaj",
"roleAllowSshDescription": "Zezwalaj użytkownikom z tej roli na łączenie się z zasobami za pomocą SSH. Gdy wyłączone, rola nie może korzystać z dostępu SSH.",
"sshSudoMode": "Dostęp Sudo",
"sshSudoModeNone": "Brak",
"sshSudoModeNoneDescription": "Użytkownik nie może uruchamiać poleceń z sudo.",
"sshSudoModeFull": "Pełne Sudo",
"sshSudoModeFullDescription": "Użytkownik może uruchomić dowolne polecenie z sudo.",
"sshSudoModeCommands": "Polecenia",
"sshSudoModeCommandsDescription": "Użytkownik może uruchamiać tylko określone polecenia z sudo.",
"sshSudo": "Zezwól na sudo",
"sshSudoCommands": "Komendy Sudo",
"sshSudoCommandsDescription": "Lista poleceń, które użytkownik może uruchamiać z sudo.",
"sshCreateHomeDir": "Utwórz katalog domowy",
"sshUnixGroups": "Grupy Unix",
"sshUnixGroupsDescription": "Grupy Unix do dodania użytkownika do docelowego hosta.",
"retryAttempts": "Próby Ponowienia", "retryAttempts": "Próby Ponowienia",
"expectedResponseCodes": "Oczekiwane Kody Odpowiedzi", "expectedResponseCodes": "Oczekiwane Kody Odpowiedzi",
"expectedResponseCodesDescription": "Kod statusu HTTP, który wskazuje zdrowy status. Jeśli pozostanie pusty, uznaje się 200-300 za zdrowy.", "expectedResponseCodesDescription": "Kod statusu HTTP, który wskazuje zdrowy status. Jeśli pozostanie pusty, uznaje się 200-300 za zdrowy.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Kontrola dostępu", "editInternalResourceDialogAccessControl": "Kontrola dostępu",
"editInternalResourceDialogAccessControlDescription": "Kontroluj, które role, użytkownicy i klienci maszyn mają dostęp do tego zasobu po połączeniu. Administratorzy zawsze mają dostęp.", "editInternalResourceDialogAccessControlDescription": "Kontroluj, które role, użytkownicy i klienci maszyn mają dostęp do tego zasobu po połączeniu. Administratorzy zawsze mają dostęp.",
"editInternalResourceDialogPortRangeValidationError": "Zakres portów musi być \"*\" dla wszystkich portów lub listą portów i zakresów oddzielonych przecinkami (np. \"80,443,8000-9000\"). Porty muszą znajdować się w przedziale od 1 do 65535.", "editInternalResourceDialogPortRangeValidationError": "Zakres portów musi być \"*\" dla wszystkich portów lub listą portów i zakresów oddzielonych przecinkami (np. \"80,443,8000-9000\"). Porty muszą znajdować się w przedziale od 1 do 65535.",
"internalResourceAuthDaemonStrategy": "SSH Auth Daemon Lokalizacja",
"internalResourceAuthDaemonStrategyDescription": "Wybierz, gdzie działa demon uwierzytelniania SSH: na stronie (Newt) lub na zdalnym serwerze.",
"internalResourceAuthDaemonDescription": "Uwierzytelnianie SSH obsługuje podpisywanie klucza SSH i uwierzytelnianie PAM dla tego zasobu. Wybierz, czy działa na stronie (Newt), czy na oddzielnym serwerze zdalnym. Zobacz <docsLink>dokumentację</docsLink> dla więcej.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Wybierz strategię",
"internalResourceAuthDaemonStrategyLabel": "Lokalizacja",
"internalResourceAuthDaemonSite": "Na stronie",
"internalResourceAuthDaemonSiteDescription": "Demon Auth działa na stronie (nowy).",
"internalResourceAuthDaemonRemote": "Zdalny host",
"internalResourceAuthDaemonRemoteDescription": "Demon Auth działa na serwerze, który nie jest stroną.",
"internalResourceAuthDaemonPort": "Port Daemon (opcjonalnie)",
"orgAuthWhatsThis": "Gdzie mogę znaleźć swój identyfikator organizacji?", "orgAuthWhatsThis": "Gdzie mogę znaleźć swój identyfikator organizacji?",
"learnMore": "Dowiedz się więcej", "learnMore": "Dowiedz się więcej",
"backToHome": "Wróć do strony głównej", "backToHome": "Wróć do strony głównej",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Função removida", "accessRoleRemoved": "Função removida",
"accessRoleRemovedDescription": "A função foi removida com sucesso.", "accessRoleRemovedDescription": "A função foi removida com sucesso.",
"accessRoleRequiredRemove": "Antes de apagar esta função, selecione uma nova função para transferir os membros existentes.", "accessRoleRequiredRemove": "Antes de apagar esta função, selecione uma nova função para transferir os membros existentes.",
"network": "Rede",
"manage": "Gerir", "manage": "Gerir",
"sitesNotFound": "Nenhum site encontrado.", "sitesNotFound": "Nenhum site encontrado.",
"pangolinServerAdmin": "Administrador do Servidor - Pangolin", "pangolinServerAdmin": "Administrador do Servidor - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Privado", "sidebarClientResources": "Privado",
"sidebarAccessControl": "Controle de Acesso", "sidebarAccessControl": "Controle de Acesso",
"sidebarLogsAndAnalytics": "Registros e Análises", "sidebarLogsAndAnalytics": "Registros e Análises",
"sidebarTeam": "Equipe",
"sidebarUsers": "Utilizadores", "sidebarUsers": "Utilizadores",
"sidebarAdmin": "Administrador", "sidebarAdmin": "Administrador",
"sidebarInvitations": "Convites", "sidebarInvitations": "Convites",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Registo & Análise", "sidebarLogAndAnalytics": "Registo & Análise",
"sidebarBluePrints": "Diagramas", "sidebarBluePrints": "Diagramas",
"sidebarOrganization": "Organização", "sidebarOrganization": "Organização",
"sidebarManagement": "Gestão",
"sidebarBillingAndLicenses": "Faturamento e Licenças", "sidebarBillingAndLicenses": "Faturamento e Licenças",
"sidebarLogsAnalytics": "Análises", "sidebarLogsAnalytics": "Análises",
"blueprints": "Diagramas", "blueprints": "Diagramas",
@@ -1289,7 +1292,6 @@
"parsedContents": "Conteúdo analisado (Somente Leitura)", "parsedContents": "Conteúdo analisado (Somente Leitura)",
"enableDockerSocket": "Habilitar o Diagrama Docker", "enableDockerSocket": "Habilitar o Diagrama Docker",
"enableDockerSocketDescription": "Ativar a scraping de rótulo Docker para rótulos de diagramas. Caminho de Socket deve ser fornecido para Newt.", "enableDockerSocketDescription": "Ativar a scraping de rótulo Docker para rótulos de diagramas. Caminho de Socket deve ser fornecido para Newt.",
"enableDockerSocketLink": "Saiba mais",
"viewDockerContainers": "Ver contêineres Docker", "viewDockerContainers": "Ver contêineres Docker",
"containersIn": "Contêineres em {siteName}", "containersIn": "Contêineres em {siteName}",
"selectContainerDescription": "Selecione qualquer contêiner para usar como hostname para este alvo. Clique em uma porta para usar uma porta.", "selectContainerDescription": "Selecione qualquer contêiner para usar como hostname para este alvo. Clique em uma porta para usar uma porta.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "O tempo está em segundos", "timeIsInSeconds": "O tempo está em segundos",
"requireDeviceApproval": "Exigir aprovação do dispositivo", "requireDeviceApproval": "Exigir aprovação do dispositivo",
"requireDeviceApprovalDescription": "Usuários com esta função precisam de novos dispositivos aprovados por um administrador antes que eles possam se conectar e acessar recursos.", "requireDeviceApprovalDescription": "Usuários com esta função precisam de novos dispositivos aprovados por um administrador antes que eles possam se conectar e acessar recursos.",
"sshAccess": "Acesso SSH",
"roleAllowSsh": "Permitir SSH",
"roleAllowSshAllow": "Autorizar",
"roleAllowSshDisallow": "Anular",
"roleAllowSshDescription": "Permitir que usuários com esta função se conectem a recursos via SSH. Quando desativado, a função não pode usar o acesso SSH.",
"sshSudoMode": "Acesso Sudo",
"sshSudoModeNone": "Nenhuma",
"sshSudoModeNoneDescription": "O usuário não pode executar comandos com o sudo.",
"sshSudoModeFull": "Sudo Completo",
"sshSudoModeFullDescription": "O usuário pode executar qualquer comando com sudo.",
"sshSudoModeCommands": "Comandos",
"sshSudoModeCommandsDescription": "Usuário só pode executar os comandos especificados com sudo.",
"sshSudo": "Permitir sudo",
"sshSudoCommands": "Comandos Sudo",
"sshSudoCommandsDescription": "Lista de comandos com permissão de executar com o sudo.",
"sshCreateHomeDir": "Criar Diretório Inicial",
"sshUnixGroups": "Grupos Unix",
"sshUnixGroupsDescription": "Grupos Unix para adicionar o usuário no host de destino.",
"retryAttempts": "Tentativas de Repetição", "retryAttempts": "Tentativas de Repetição",
"expectedResponseCodes": "Códigos de Resposta Esperados", "expectedResponseCodes": "Códigos de Resposta Esperados",
"expectedResponseCodesDescription": "Código de status HTTP que indica estado saudável. Se deixado em branco, 200-300 é considerado saudável.", "expectedResponseCodesDescription": "Código de status HTTP que indica estado saudável. Se deixado em branco, 200-300 é considerado saudável.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Controle de Acesso", "editInternalResourceDialogAccessControl": "Controle de Acesso",
"editInternalResourceDialogAccessControlDescription": "Controle quais funções, usuários e clientes de máquina podem acessar este recurso quando conectados. Os administradores sempre têm acesso.", "editInternalResourceDialogAccessControlDescription": "Controle quais funções, usuários e clientes de máquina podem acessar este recurso quando conectados. Os administradores sempre têm acesso.",
"editInternalResourceDialogPortRangeValidationError": "O intervalo de portas deve ser \"*\" para todas as portas, ou uma lista de portas e intervalos separados por vírgulas (por exemplo, \"80,443,8000-9000\"). As portas devem estar entre 1 e 65535.", "editInternalResourceDialogPortRangeValidationError": "O intervalo de portas deve ser \"*\" para todas as portas, ou uma lista de portas e intervalos separados por vírgulas (por exemplo, \"80,443,8000-9000\"). As portas devem estar entre 1 e 65535.",
"internalResourceAuthDaemonStrategy": "Local do Daemon de autenticação SSH",
"internalResourceAuthDaemonStrategyDescription": "Escolha onde o daemon de autenticação SSH funciona: no site (Newt) ou em um host remoto.",
"internalResourceAuthDaemonDescription": "A autenticação SSH daemon lida com assinatura de chave SSH e autenticação PAM para este recurso. Escolha se ele é executado no site (Newt) ou em um host remoto separado. Veja <docsLink>a documentação</docsLink> para mais informações.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Selecione a estratégia",
"internalResourceAuthDaemonStrategyLabel": "Local:",
"internalResourceAuthDaemonSite": "No Site",
"internalResourceAuthDaemonSiteDescription": "O serviço de autenticação é executado no site (Newt).",
"internalResourceAuthDaemonRemote": "Host Remoto",
"internalResourceAuthDaemonRemoteDescription": "O serviço de autenticação é executado em um host que não é o site.",
"internalResourceAuthDaemonPort": "Porta do Daemon (opcional)",
"orgAuthWhatsThis": "Onde posso encontrar meu ID da organização?", "orgAuthWhatsThis": "Onde posso encontrar meu ID da organização?",
"learnMore": "Saiba mais", "learnMore": "Saiba mais",
"backToHome": "Voltar para a página inicial", "backToHome": "Voltar para a página inicial",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Роль удалена", "accessRoleRemoved": "Роль удалена",
"accessRoleRemovedDescription": "Роль была успешно удалена.", "accessRoleRemovedDescription": "Роль была успешно удалена.",
"accessRoleRequiredRemove": "Перед удалением этой роли выберите новую роль для переноса существующих участников.", "accessRoleRequiredRemove": "Перед удалением этой роли выберите новую роль для переноса существующих участников.",
"network": "Сеть",
"manage": "Управление", "manage": "Управление",
"sitesNotFound": "Сайты не найдены.", "sitesNotFound": "Сайты не найдены.",
"pangolinServerAdmin": "Администратор сервера - Pangolin", "pangolinServerAdmin": "Администратор сервера - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Приватный", "sidebarClientResources": "Приватный",
"sidebarAccessControl": "Контроль доступа", "sidebarAccessControl": "Контроль доступа",
"sidebarLogsAndAnalytics": "Журналы и аналитика", "sidebarLogsAndAnalytics": "Журналы и аналитика",
"sidebarTeam": "Команда",
"sidebarUsers": "Пользователи", "sidebarUsers": "Пользователи",
"sidebarAdmin": "Админ", "sidebarAdmin": "Админ",
"sidebarInvitations": "Приглашения", "sidebarInvitations": "Приглашения",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Журнал и аналитика", "sidebarLogAndAnalytics": "Журнал и аналитика",
"sidebarBluePrints": "Чертежи", "sidebarBluePrints": "Чертежи",
"sidebarOrganization": "Организация", "sidebarOrganization": "Организация",
"sidebarManagement": "Управление",
"sidebarBillingAndLicenses": "Биллинг и лицензии", "sidebarBillingAndLicenses": "Биллинг и лицензии",
"sidebarLogsAnalytics": "Статистика", "sidebarLogsAnalytics": "Статистика",
"blueprints": "Чертежи", "blueprints": "Чертежи",
@@ -1289,7 +1292,6 @@
"parsedContents": "Переработанное содержимое (только для чтения)", "parsedContents": "Переработанное содержимое (только для чтения)",
"enableDockerSocket": "Включить чертёж Docker", "enableDockerSocket": "Включить чертёж Docker",
"enableDockerSocketDescription": "Включить scraping ярлыка Docker Socket для ярлыков чертежей. Путь к сокету должен быть предоставлен в Newt.", "enableDockerSocketDescription": "Включить scraping ярлыка Docker Socket для ярлыков чертежей. Путь к сокету должен быть предоставлен в Newt.",
"enableDockerSocketLink": "Узнать больше",
"viewDockerContainers": "Просмотр контейнеров Docker", "viewDockerContainers": "Просмотр контейнеров Docker",
"containersIn": "Контейнеры в {siteName}", "containersIn": "Контейнеры в {siteName}",
"selectContainerDescription": "Выберите любой контейнер для использования в качестве имени хоста для этой цели. Нажмите на порт, чтобы использовать порт.", "selectContainerDescription": "Выберите любой контейнер для использования в качестве имени хоста для этой цели. Нажмите на порт, чтобы использовать порт.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Время указано в секундах", "timeIsInSeconds": "Время указано в секундах",
"requireDeviceApproval": "Требовать подтверждения устройства", "requireDeviceApproval": "Требовать подтверждения устройства",
"requireDeviceApprovalDescription": "Пользователям с этой ролью нужны новые устройства, одобренные администратором, прежде чем они смогут подключаться и получать доступ к ресурсам.", "requireDeviceApprovalDescription": "Пользователям с этой ролью нужны новые устройства, одобренные администратором, прежде чем они смогут подключаться и получать доступ к ресурсам.",
"sshAccess": "SSH доступ",
"roleAllowSsh": "Разрешить SSH",
"roleAllowSshAllow": "Разрешить",
"roleAllowSshDisallow": "Запретить",
"roleAllowSshDescription": "Разрешить пользователям с этой ролью подключаться к ресурсам через SSH. Если отключено, роль не может использовать доступ SSH.",
"sshSudoMode": "Sudo доступ",
"sshSudoModeNone": "Нет",
"sshSudoModeNoneDescription": "Пользователь не может запускать команды с sudo.",
"sshSudoModeFull": "Полная судо",
"sshSudoModeFullDescription": "Пользователь может запускать любую команду с помощью sudo.",
"sshSudoModeCommands": "Команды",
"sshSudoModeCommandsDescription": "Пользователь может запускать только указанные команды с помощью sudo.",
"sshSudo": "Разрешить sudo",
"sshSudoCommands": "Sudo Команды",
"sshSudoCommandsDescription": "Список команд, которые пользователю разрешено запускать с помощью sudo.",
"sshCreateHomeDir": "Создать домашний каталог",
"sshUnixGroups": "Unix группы",
"sshUnixGroupsDescription": "Unix группы для добавления пользователя на целевой хост.",
"retryAttempts": "Количество попыток повторного запроса", "retryAttempts": "Количество попыток повторного запроса",
"expectedResponseCodes": "Ожидаемые коды ответов", "expectedResponseCodes": "Ожидаемые коды ответов",
"expectedResponseCodesDescription": "HTTP-код состояния, указывающий на здоровое состояние. Если оставить пустым, 200-300 считается здоровым.", "expectedResponseCodesDescription": "HTTP-код состояния, указывающий на здоровое состояние. Если оставить пустым, 200-300 считается здоровым.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Контроль доступа", "editInternalResourceDialogAccessControl": "Контроль доступа",
"editInternalResourceDialogAccessControlDescription": "Контролируйте, какие роли, пользователи и машинные клиенты имеют доступ к этому ресурсу при подключении. Администраторы всегда имеют доступ.", "editInternalResourceDialogAccessControlDescription": "Контролируйте, какие роли, пользователи и машинные клиенты имеют доступ к этому ресурсу при подключении. Администраторы всегда имеют доступ.",
"editInternalResourceDialogPortRangeValidationError": "Диапазон портов должен быть \"*\" для всех портов или списком портов и диапазонов через запятую (например, \"80,443,8000-9000\"). Порты должны находиться в диапазоне от 1 до 65535.", "editInternalResourceDialogPortRangeValidationError": "Диапазон портов должен быть \"*\" для всех портов или списком портов и диапазонов через запятую (например, \"80,443,8000-9000\"). Порты должны находиться в диапазоне от 1 до 65535.",
"internalResourceAuthDaemonStrategy": "Местоположение демона по SSH",
"internalResourceAuthDaemonStrategyDescription": "Выберите, где работает демон аутентификации SSH: на сайте (Newt) или на удаленном узле.",
"internalResourceAuthDaemonDescription": "Демон аутентификации SSH обрабатывает подписание ключей SSH и аутентификацию PAM для этого ресурса. Выберите, запускать ли его на сайте (Newt) или на отдельном удаленном хосте. Подробности смотрите в <docsLink>документации</docsLink>.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Выберите стратегию",
"internalResourceAuthDaemonStrategyLabel": "Местоположение",
"internalResourceAuthDaemonSite": "На сайте",
"internalResourceAuthDaemonSiteDescription": "На сайте работает демон Auth (Newt).",
"internalResourceAuthDaemonRemote": "Удаленный хост",
"internalResourceAuthDaemonRemoteDescription": "Демон Auth запускается на хост, который не является сайтом.",
"internalResourceAuthDaemonPort": "Порт демона (опционально)",
"orgAuthWhatsThis": "Где я могу найти ID моей организации?", "orgAuthWhatsThis": "Где я могу найти ID моей организации?",
"learnMore": "Узнать больше", "learnMore": "Узнать больше",
"backToHome": "Вернуться домой", "backToHome": "Вернуться домой",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "Rol kaldırıldı", "accessRoleRemoved": "Rol kaldırıldı",
"accessRoleRemovedDescription": "Rol başarıyla kaldırıldı.", "accessRoleRemovedDescription": "Rol başarıyla kaldırıldı.",
"accessRoleRequiredRemove": "Bu rolü silmeden önce, mevcut üyeleri aktarmak için yeni bir rol seçin.", "accessRoleRequiredRemove": "Bu rolü silmeden önce, mevcut üyeleri aktarmak için yeni bir rol seçin.",
"network": "Ağ",
"manage": "Yönet", "manage": "Yönet",
"sitesNotFound": "Site bulunamadı.", "sitesNotFound": "Site bulunamadı.",
"pangolinServerAdmin": "Sunucu Yöneticisi - Pangolin", "pangolinServerAdmin": "Sunucu Yöneticisi - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "Özel", "sidebarClientResources": "Özel",
"sidebarAccessControl": "Erişim Kontrolü", "sidebarAccessControl": "Erişim Kontrolü",
"sidebarLogsAndAnalytics": "Kayıtlar & Analitik", "sidebarLogsAndAnalytics": "Kayıtlar & Analitik",
"sidebarTeam": "Ekip",
"sidebarUsers": "Kullanıcılar", "sidebarUsers": "Kullanıcılar",
"sidebarAdmin": "Yönetici", "sidebarAdmin": "Yönetici",
"sidebarInvitations": "Davetiye", "sidebarInvitations": "Davetiye",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "Kayıt & Analiz", "sidebarLogAndAnalytics": "Kayıt & Analiz",
"sidebarBluePrints": "Planlar", "sidebarBluePrints": "Planlar",
"sidebarOrganization": "Organizasyon", "sidebarOrganization": "Organizasyon",
"sidebarManagement": "Yönetim",
"sidebarBillingAndLicenses": "Faturalandırma & Lisanslar", "sidebarBillingAndLicenses": "Faturalandırma & Lisanslar",
"sidebarLogsAnalytics": "Analitik", "sidebarLogsAnalytics": "Analitik",
"blueprints": "Planlar", "blueprints": "Planlar",
@@ -1289,7 +1292,6 @@
"parsedContents": "Verilerin Ayrıştırılmış İçeriği (Salt Okunur)", "parsedContents": "Verilerin Ayrıştırılmış İçeriği (Salt Okunur)",
"enableDockerSocket": "Docker Soketini Etkinleştir", "enableDockerSocket": "Docker Soketini Etkinleştir",
"enableDockerSocketDescription": "Plan etiketleri için Docker Socket etiket toplamasını etkinleştirin. Newt'e soket yolu sağlanmalıdır.", "enableDockerSocketDescription": "Plan etiketleri için Docker Socket etiket toplamasını etkinleştirin. Newt'e soket yolu sağlanmalıdır.",
"enableDockerSocketLink": "Daha fazla bilgi",
"viewDockerContainers": "Docker Konteynerlerini Görüntüle", "viewDockerContainers": "Docker Konteynerlerini Görüntüle",
"containersIn": "{siteName} içindeki konteynerler", "containersIn": "{siteName} içindeki konteynerler",
"selectContainerDescription": "Bu hedef için bir ana bilgisayar adı olarak kullanmak üzere herhangi bir konteyner seçin. Bir bağlantı noktası kullanmak için bir bağlantı noktasına tıklayın.", "selectContainerDescription": "Bu hedef için bir ana bilgisayar adı olarak kullanmak üzere herhangi bir konteyner seçin. Bir bağlantı noktası kullanmak için bir bağlantı noktasına tıklayın.",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "Zaman saniye cinsindendir", "timeIsInSeconds": "Zaman saniye cinsindendir",
"requireDeviceApproval": "Cihaz Onaylarını Gerektir", "requireDeviceApproval": "Cihaz Onaylarını Gerektir",
"requireDeviceApprovalDescription": "Bu role sahip kullanıcıların yeni cihazlarının bağlanabilmesi ve kaynaklara erişebilmesi için bir yönetici tarafından onaylanması gerekiyor.", "requireDeviceApprovalDescription": "Bu role sahip kullanıcıların yeni cihazlarının bağlanabilmesi ve kaynaklara erişebilmesi için bir yönetici tarafından onaylanması gerekiyor.",
"sshAccess": "SSH Erişimi",
"roleAllowSsh": "SSH'a İzin Ver",
"roleAllowSshAllow": "İzin Ver",
"roleAllowSshDisallow": "İzin Verme",
"roleAllowSshDescription": "Bu role sahip kullanıcıların SSH aracılığıyla kaynaklara bağlanmasına izin verin. Devre dışı bırakıldığında, rol SSH erişimini kullanamaz.",
"sshSudoMode": "Sudo Erişimi",
"sshSudoModeNone": "Hiçbiri",
"sshSudoModeNoneDescription": "Kullanıcı, sudo komutunu kullanarak komut çalıştıramaz.",
"sshSudoModeFull": "Tam Sudo",
"sshSudoModeFullDescription": "Kullanıcı, sudo komutuyla her türlü komutu çalıştırabilir.",
"sshSudoModeCommands": "Komutlar",
"sshSudoModeCommandsDescription": "Kullanıcı sadece belirtilen komutları sudo ile çalıştırabilir.",
"sshSudo": "Sudo'ya izin ver",
"sshSudoCommands": "Sudo Komutları",
"sshSudoCommandsDescription": "Kullanıcının sudo ile çalıştırmasına izin verilen komutların listesi.",
"sshCreateHomeDir": "Ev Dizini Oluştur",
"sshUnixGroups": "Unix Grupları",
"sshUnixGroupsDescription": "Hedef ana bilgisayarda kullanıcıya eklemek için Unix grupları.",
"retryAttempts": "Tekrar Deneme Girişimleri", "retryAttempts": "Tekrar Deneme Girişimleri",
"expectedResponseCodes": "Beklenen Yanıt Kodları", "expectedResponseCodes": "Beklenen Yanıt Kodları",
"expectedResponseCodesDescription": "Sağlıklı durumu gösteren HTTP durum kodu. Boş bırakılırsa, 200-300 arası sağlıklı kabul edilir.", "expectedResponseCodesDescription": "Sağlıklı durumu gösteren HTTP durum kodu. Boş bırakılırsa, 200-300 arası sağlıklı kabul edilir.",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "Erişim Kontrolü", "editInternalResourceDialogAccessControl": "Erişim Kontrolü",
"editInternalResourceDialogAccessControlDescription": "Bağlandığında bu kaynağa erişimi olan roller, kullanıcılar ve makine müşterilerini kontrol edin. Yöneticiler her zaman erişime sahiptir.", "editInternalResourceDialogAccessControlDescription": "Bağlandığında bu kaynağa erişimi olan roller, kullanıcılar ve makine müşterilerini kontrol edin. Yöneticiler her zaman erişime sahiptir.",
"editInternalResourceDialogPortRangeValidationError": "Port aralığı, tüm portlar için \"*\" veya virgülle ayrılmış bir port ve aralık listesi olmalıdır (ör. \"80,443,8000-9000\"). Portlar 1 ile 65535 arasında olmalıdır.", "editInternalResourceDialogPortRangeValidationError": "Port aralığı, tüm portlar için \"*\" veya virgülle ayrılmış bir port ve aralık listesi olmalıdır (ör. \"80,443,8000-9000\"). Portlar 1 ile 65535 arasında olmalıdır.",
"internalResourceAuthDaemonStrategy": "SSH Kimlik Doğrulama Daemon Yeri",
"internalResourceAuthDaemonStrategyDescription": "SSH kimlik doğrulama sunucusunun nerede çalışacağını seçin: sitede (Newt) veya uzak bir ana bilgisayarda.",
"internalResourceAuthDaemonDescription": "SSH kimlik doğrulama sunucusu, bu kaynak için SSH anahtar imzalama ve PAM kimlik doğrulamasını yapar. Sitede (Newt) veya ayrı bir uzak ana bilgisayarda çalışıp çalışmayacağını seçin. Daha fazla bilgi için <docsLink> belgeleri</docsLink> görün.",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "Strateji Seçin",
"internalResourceAuthDaemonStrategyLabel": "Konum",
"internalResourceAuthDaemonSite": "Sitede",
"internalResourceAuthDaemonSiteDescription": "Kimlik doğrulama sunucusu sitede (Newt) çalışır.",
"internalResourceAuthDaemonRemote": "Uzak Ana Bilgisayar",
"internalResourceAuthDaemonRemoteDescription": "Kimlik doğrulama sunucusu, site olmayan bir ana bilgisayarda çalışır.",
"internalResourceAuthDaemonPort": "Daemon Portu (isteğe bağlı)",
"orgAuthWhatsThis": "Kuruluş kimliğimi nerede bulabilirim?", "orgAuthWhatsThis": "Kuruluş kimliğimi nerede bulabilirim?",
"learnMore": "Daha fazla bilgi", "learnMore": "Daha fazla bilgi",
"backToHome": "Ana sayfaya geri dön", "backToHome": "Ana sayfaya geri dön",

View File

@@ -790,6 +790,7 @@
"accessRoleRemoved": "角色已删除", "accessRoleRemoved": "角色已删除",
"accessRoleRemovedDescription": "角色已成功删除。", "accessRoleRemovedDescription": "角色已成功删除。",
"accessRoleRequiredRemove": "删除此角色之前,请选择一个新角色来转移现有成员。", "accessRoleRequiredRemove": "删除此角色之前,请选择一个新角色来转移现有成员。",
"network": "网络",
"manage": "管理", "manage": "管理",
"sitesNotFound": "未找到站点。", "sitesNotFound": "未找到站点。",
"pangolinServerAdmin": "服务器管理员 - Pangolin", "pangolinServerAdmin": "服务器管理员 - Pangolin",
@@ -1249,6 +1250,7 @@
"sidebarClientResources": "非公开的", "sidebarClientResources": "非公开的",
"sidebarAccessControl": "访问控制", "sidebarAccessControl": "访问控制",
"sidebarLogsAndAnalytics": "日志与分析", "sidebarLogsAndAnalytics": "日志与分析",
"sidebarTeam": "团队",
"sidebarUsers": "用户", "sidebarUsers": "用户",
"sidebarAdmin": "管理员", "sidebarAdmin": "管理员",
"sidebarInvitations": "邀请", "sidebarInvitations": "邀请",
@@ -1267,6 +1269,7 @@
"sidebarLogAndAnalytics": "日志与分析", "sidebarLogAndAnalytics": "日志与分析",
"sidebarBluePrints": "蓝图", "sidebarBluePrints": "蓝图",
"sidebarOrganization": "组织", "sidebarOrganization": "组织",
"sidebarManagement": "管理",
"sidebarBillingAndLicenses": "帐单和许可证", "sidebarBillingAndLicenses": "帐单和许可证",
"sidebarLogsAnalytics": "分析", "sidebarLogsAnalytics": "分析",
"blueprints": "蓝图", "blueprints": "蓝图",
@@ -1289,7 +1292,6 @@
"parsedContents": "解析内容 (只读)", "parsedContents": "解析内容 (只读)",
"enableDockerSocket": "启用 Docker 蓝图", "enableDockerSocket": "启用 Docker 蓝图",
"enableDockerSocketDescription": "启用 Docker Socket 标签擦除蓝图标签。套接字路径必须提供给新的。", "enableDockerSocketDescription": "启用 Docker Socket 标签擦除蓝图标签。套接字路径必须提供给新的。",
"enableDockerSocketLink": "了解更多",
"viewDockerContainers": "查看停靠容器", "viewDockerContainers": "查看停靠容器",
"containersIn": "{siteName} 中的容器", "containersIn": "{siteName} 中的容器",
"selectContainerDescription": "选择任何容器作为目标的主机名。点击端口使用端口。", "selectContainerDescription": "选择任何容器作为目标的主机名。点击端口使用端口。",
@@ -1643,6 +1645,24 @@
"timeIsInSeconds": "时间以秒为单位", "timeIsInSeconds": "时间以秒为单位",
"requireDeviceApproval": "需要设备批准", "requireDeviceApproval": "需要设备批准",
"requireDeviceApprovalDescription": "具有此角色的用户需要管理员批准的新设备才能连接和访问资源。", "requireDeviceApprovalDescription": "具有此角色的用户需要管理员批准的新设备才能连接和访问资源。",
"sshAccess": "SSH 访问",
"roleAllowSsh": "允许 SSH",
"roleAllowSshAllow": "允许",
"roleAllowSshDisallow": "不允许",
"roleAllowSshDescription": "允许具有此角色的用户通过 SSH 连接到资源。禁用时,角色不能使用 SSH 访问。",
"sshSudoMode": "Sudo 访问",
"sshSudoModeNone": "无",
"sshSudoModeNoneDescription": "用户不能用sudo运行命令。",
"sshSudoModeFull": "全苏多",
"sshSudoModeFullDescription": "用户可以用 sudo 运行任何命令。",
"sshSudoModeCommands": "命令",
"sshSudoModeCommandsDescription": "用户只能用 sudo 运行指定的命令。",
"sshSudo": "允许Sudo",
"sshSudoCommands": "Sudo 命令",
"sshSudoCommandsDescription": "允许用户使用 sudo 运行的命令列表。",
"sshCreateHomeDir": "创建主目录",
"sshUnixGroups": "Unix 组",
"sshUnixGroupsDescription": "将用户添加到目标主机的Unix组。",
"retryAttempts": "重试次数", "retryAttempts": "重试次数",
"expectedResponseCodes": "期望响应代码", "expectedResponseCodes": "期望响应代码",
"expectedResponseCodesDescription": "HTTP 状态码表示健康状态。如留空200-300 被视为健康。", "expectedResponseCodesDescription": "HTTP 状态码表示健康状态。如留空200-300 被视为健康。",
@@ -2503,6 +2523,17 @@
"editInternalResourceDialogAccessControl": "访问控制", "editInternalResourceDialogAccessControl": "访问控制",
"editInternalResourceDialogAccessControlDescription": "控制当连接到此资源时,哪些角色、用户和机器客户端可以访问。管理员始终具有访问权。", "editInternalResourceDialogAccessControlDescription": "控制当连接到此资源时,哪些角色、用户和机器客户端可以访问。管理员始终具有访问权。",
"editInternalResourceDialogPortRangeValidationError": "端口范围必须为\"*\"表示所有端口,或一个用逗号分隔的端口和范围列表(例如:\"80,443,8000-9000\"。端口必须在1到65535之间。", "editInternalResourceDialogPortRangeValidationError": "端口范围必须为\"*\"表示所有端口,或一个用逗号分隔的端口和范围列表(例如:\"80,443,8000-9000\"。端口必须在1到65535之间。",
"internalResourceAuthDaemonStrategy": "SSH 认证守护进程位置",
"internalResourceAuthDaemonStrategyDescription": "选择 SSH 身份验证守护进程在哪里运行:站点(新建) 或远程主机。",
"internalResourceAuthDaemonDescription": "SSH 身份验证守护程序处理此资源的 SSH 密钥签名和PAM 身份验证。 选择它是在站点(新建)还是在单独的远程主机上运行。请参阅 <docsLink>文档</docsLink>。",
"internalResourceAuthDaemonDocsUrl": "https://docs.pangolin.net",
"internalResourceAuthDaemonStrategyPlaceholder": "选择策略",
"internalResourceAuthDaemonStrategyLabel": "地点",
"internalResourceAuthDaemonSite": "在站点",
"internalResourceAuthDaemonSiteDescription": "认证守护进程在站点上运行(新建)。",
"internalResourceAuthDaemonRemote": "远程主机",
"internalResourceAuthDaemonRemoteDescription": "认证守护进程运行在不是站点的主机上。",
"internalResourceAuthDaemonPort": "守护进程端口(可选)",
"orgAuthWhatsThis": "我的组织ID在哪里可以找到", "orgAuthWhatsThis": "我的组织ID在哪里可以找到",
"learnMore": "了解更多", "learnMore": "了解更多",
"backToHome": "返回首页", "backToHome": "返回首页",

View File

@@ -233,10 +233,10 @@ export const siteResources = pgTable("siteResources", {
tcpPortRangeString: varchar("tcpPortRangeString").notNull().default("*"), tcpPortRangeString: varchar("tcpPortRangeString").notNull().default("*"),
udpPortRangeString: varchar("udpPortRangeString").notNull().default("*"), udpPortRangeString: varchar("udpPortRangeString").notNull().default("*"),
disableIcmp: boolean("disableIcmp").notNull().default(false), disableIcmp: boolean("disableIcmp").notNull().default(false),
authDaemonPort: integer("authDaemonPort"), authDaemonPort: integer("authDaemonPort").default(22123),
authDaemonMode: varchar("authDaemonMode", { length: 32 }).$type< authDaemonMode: varchar("authDaemonMode", { length: 32 })
"site" | "remote" .$type<"site" | "remote">()
>() .default("site")
}); });
export const clientSiteResources = pgTable("clientSiteResources", { export const clientSiteResources = pgTable("clientSiteResources", {
@@ -379,7 +379,7 @@ export const roles = pgTable("roles", {
requireDeviceApproval: boolean("requireDeviceApproval").default(false), requireDeviceApproval: boolean("requireDeviceApproval").default(false),
sshSudoMode: varchar("sshSudoMode", { length: 32 }).default("none"), // "none" | "full" | "commands" sshSudoMode: varchar("sshSudoMode", { length: 32 }).default("none"), // "none" | "full" | "commands"
sshSudoCommands: text("sshSudoCommands").default("[]"), sshSudoCommands: text("sshSudoCommands").default("[]"),
sshCreateHomeDir: boolean("sshCreateHomeDir").default(false), sshCreateHomeDir: boolean("sshCreateHomeDir").default(true),
sshUnixGroups: text("sshUnixGroups").default("[]") sshUnixGroups: text("sshUnixGroups").default("[]")
}); });
@@ -1067,4 +1067,6 @@ export type SecurityKey = InferSelectModel<typeof securityKeys>;
export type WebauthnChallenge = InferSelectModel<typeof webauthnChallenge>; export type WebauthnChallenge = InferSelectModel<typeof webauthnChallenge>;
export type DeviceWebAuthCode = InferSelectModel<typeof deviceWebAuthCodes>; export type DeviceWebAuthCode = InferSelectModel<typeof deviceWebAuthCodes>;
export type RequestAuditLog = InferSelectModel<typeof requestAuditLog>; export type RequestAuditLog = InferSelectModel<typeof requestAuditLog>;
export type RoundTripMessageTracker = InferSelectModel<typeof roundTripMessageTracker>; export type RoundTripMessageTracker = InferSelectModel<
typeof roundTripMessageTracker
>;

View File

@@ -258,8 +258,10 @@ export const siteResources = sqliteTable("siteResources", {
disableIcmp: integer("disableIcmp", { mode: "boolean" }) disableIcmp: integer("disableIcmp", { mode: "boolean" })
.notNull() .notNull()
.default(false), .default(false),
authDaemonPort: integer("authDaemonPort"), authDaemonPort: integer("authDaemonPort").default(22123),
authDaemonMode: text("authDaemonMode").$type<"site" | "remote">() authDaemonMode: text("authDaemonMode")
.$type<"site" | "remote">()
.default("site")
}); });
export const clientSiteResources = sqliteTable("clientSiteResources", { export const clientSiteResources = sqliteTable("clientSiteResources", {

View File

@@ -46,8 +46,6 @@ export class UsageService {
return null; return null;
} }
let orgIdToUse = await this.getBillingOrg(orgId, transaction);
// Truncate value to 11 decimal places // Truncate value to 11 decimal places
value = this.truncateValue(value); value = this.truncateValue(value);
@@ -59,6 +57,7 @@ export class UsageService {
try { try {
let usage; let usage;
if (transaction) { if (transaction) {
const orgIdToUse = await this.getBillingOrg(orgId, transaction);
usage = await this.internalAddUsage( usage = await this.internalAddUsage(
orgIdToUse, orgIdToUse,
featureId, featureId,
@@ -67,6 +66,7 @@ export class UsageService {
); );
} else { } else {
await db.transaction(async (trx) => { await db.transaction(async (trx) => {
const orgIdToUse = await this.getBillingOrg(orgId, trx);
usage = await this.internalAddUsage( usage = await this.internalAddUsage(
orgIdToUse, orgIdToUse,
featureId, featureId,
@@ -92,7 +92,7 @@ export class UsageService {
const delay = baseDelay + jitter; const delay = baseDelay + jitter;
logger.warn( logger.warn(
`Deadlock detected for ${orgIdToUse}/${featureId}, retrying attempt ${attempt}/${maxRetries} after ${delay.toFixed(0)}ms` `Deadlock detected for ${orgId}/${featureId}, retrying attempt ${attempt}/${maxRetries} after ${delay.toFixed(0)}ms`
); );
await new Promise((resolve) => setTimeout(resolve, delay)); await new Promise((resolve) => setTimeout(resolve, delay));
@@ -100,7 +100,7 @@ export class UsageService {
} }
logger.error( logger.error(
`Failed to add usage for ${orgIdToUse}/${featureId} after ${attempt} attempts:`, `Failed to add usage for ${orgId}/${featureId} after ${attempt} attempts:`,
error error
); );
break; break;
@@ -169,7 +169,7 @@ export class UsageService {
return; return;
} }
let orgIdToUse = await this.getBillingOrg(orgId); const orgIdToUse = await this.getBillingOrg(orgId);
try { try {
// Truncate value to 11 decimal places if provided // Truncate value to 11 decimal places if provided
@@ -227,7 +227,7 @@ export class UsageService {
orgId: string, orgId: string,
featureId: FeatureId featureId: FeatureId
): Promise<string | null> { ): Promise<string | null> {
let orgIdToUse = await this.getBillingOrg(orgId); const orgIdToUse = await this.getBillingOrg(orgId);
const cacheKey = `customer_${orgIdToUse}_${featureId}`; const cacheKey = `customer_${orgIdToUse}_${featureId}`;
const cached = cache.get<string>(cacheKey); const cached = cache.get<string>(cacheKey);
@@ -274,7 +274,7 @@ export class UsageService {
return null; return null;
} }
let orgIdToUse = await this.getBillingOrg(orgId, trx); const orgIdToUse = await this.getBillingOrg(orgId, trx);
const usageId = `${orgIdToUse}-${featureId}`; const usageId = `${orgIdToUse}-${featureId}`;
@@ -382,7 +382,7 @@ export class UsageService {
return false; return false;
} }
let orgIdToUse = await this.getBillingOrg(orgId, trx); const orgIdToUse = await this.getBillingOrg(orgId, trx);
// This method should check the current usage against the limits set for the organization // This method should check the current usage against the limits set for the organization
// and kick out all of the sites on the org // and kick out all of the sites on the org

View File

@@ -78,7 +78,8 @@ export async function getOrgTierData(
if ( if (
subscription.type === "tier1" || subscription.type === "tier1" ||
subscription.type === "tier2" || subscription.type === "tier2" ||
subscription.type === "tier3" subscription.type === "tier3" ||
subscription.type === "enterprise"
) { ) {
tier = subscription.type; tier = subscription.type;
active = true; active = true;

View File

@@ -14,6 +14,9 @@
import { config } from "@server/lib/config"; import { config } from "@server/lib/config";
import logger from "@server/logger"; import logger from "@server/logger";
import { redis } from "#private/lib/redis"; import { redis } from "#private/lib/redis";
import { v4 as uuidv4 } from "uuid";
const instanceId = uuidv4();
export class LockManager { export class LockManager {
/** /**
@@ -33,7 +36,7 @@ export class LockManager {
} }
const lockValue = `${ const lockValue = `${
config.getRawConfig().gerbil.exit_node_name instanceId
}:${Date.now()}`; }:${Date.now()}`;
const redisKey = `lock:${lockKey}`; const redisKey = `lock:${lockKey}`;
@@ -52,7 +55,7 @@ export class LockManager {
if (result === "OK") { if (result === "OK") {
logger.debug( logger.debug(
`Lock acquired: ${lockKey} by ${ `Lock acquired: ${lockKey} by ${
config.getRawConfig().gerbil.exit_node_name instanceId
}` }`
); );
return true; return true;
@@ -63,14 +66,14 @@ export class LockManager {
if ( if (
existingValue && existingValue &&
existingValue.startsWith( existingValue.startsWith(
`${config.getRawConfig().gerbil.exit_node_name}:` `${instanceId}:`
) )
) { ) {
// Extend the lock TTL since it's the same worker // Extend the lock TTL since it's the same worker
await redis.pexpire(redisKey, ttlMs); await redis.pexpire(redisKey, ttlMs);
logger.debug( logger.debug(
`Lock extended: ${lockKey} by ${ `Lock extended: ${lockKey} by ${
config.getRawConfig().gerbil.exit_node_name instanceId
}` }`
); );
return true; return true;
@@ -116,7 +119,7 @@ export class LockManager {
local key = KEYS[1] local key = KEYS[1]
local worker_prefix = ARGV[1] local worker_prefix = ARGV[1]
local current_value = redis.call('GET', key) local current_value = redis.call('GET', key)
if current_value and string.find(current_value, worker_prefix, 1, true) == 1 then if current_value and string.find(current_value, worker_prefix, 1, true) == 1 then
return redis.call('DEL', key) return redis.call('DEL', key)
else else
@@ -129,19 +132,19 @@ export class LockManager {
luaScript, luaScript,
1, 1,
redisKey, redisKey,
`${config.getRawConfig().gerbil.exit_node_name}:` `${instanceId}:`
)) as number; )) as number;
if (result === 1) { if (result === 1) {
logger.debug( logger.debug(
`Lock released: ${lockKey} by ${ `Lock released: ${lockKey} by ${
config.getRawConfig().gerbil.exit_node_name instanceId
}` }`
); );
} else { } else {
logger.warn( logger.warn(
`Lock not released - not owned by worker: ${lockKey} by ${ `Lock not released - not owned by worker: ${lockKey} by ${
config.getRawConfig().gerbil.exit_node_name instanceId
}` }`
); );
} }
@@ -198,7 +201,7 @@ export class LockManager {
const ownedByMe = const ownedByMe =
exists && exists &&
value!.startsWith( value!.startsWith(
`${config.getRawConfig().gerbil.exit_node_name}:` `${instanceId}:`
); );
const owner = exists ? value!.split(":")[0] : undefined; const owner = exists ? value!.split(":")[0] : undefined;
@@ -233,7 +236,7 @@ export class LockManager {
local worker_prefix = ARGV[1] local worker_prefix = ARGV[1]
local ttl = tonumber(ARGV[2]) local ttl = tonumber(ARGV[2])
local current_value = redis.call('GET', key) local current_value = redis.call('GET', key)
if current_value and string.find(current_value, worker_prefix, 1, true) == 1 then if current_value and string.find(current_value, worker_prefix, 1, true) == 1 then
return redis.call('PEXPIRE', key, ttl) return redis.call('PEXPIRE', key, ttl)
else else
@@ -246,14 +249,14 @@ export class LockManager {
luaScript, luaScript,
1, 1,
redisKey, redisKey,
`${config.getRawConfig().gerbil.exit_node_name}:`, `${instanceId}:`,
ttlMs.toString() ttlMs.toString()
)) as number; )) as number;
if (result === 1) { if (result === 1) {
logger.debug( logger.debug(
`Lock extended: ${lockKey} by ${ `Lock extended: ${lockKey} by ${
config.getRawConfig().gerbil.exit_node_name instanceId
} for ${ttlMs}ms` } for ${ttlMs}ms`
); );
return true; return true;
@@ -356,7 +359,7 @@ export class LockManager {
(value) => (value) =>
value && value &&
value.startsWith( value.startsWith(
`${config.getRawConfig().gerbil.exit_node_name}:` `${instanceId}:`
) )
).length; ).length;
} }

View File

@@ -72,15 +72,15 @@ export const privateConfigSchema = z.object({
db: z.int().nonnegative().optional().default(0) db: z.int().nonnegative().optional().default(0)
}) })
) )
.optional(),
tls: z
.object({
rejectUnauthorized: z
.boolean()
.optional()
.default(true)
})
.optional() .optional()
// tls: z
// .object({
// reject_unauthorized: z
// .boolean()
// .optional()
// .default(true)
// })
// .optional()
}) })
.optional(), .optional(),
gerbil: z gerbil: z

View File

@@ -108,11 +108,15 @@ class RedisManager {
port: redisConfig.port!, port: redisConfig.port!,
password: redisConfig.password, password: redisConfig.password,
db: redisConfig.db db: redisConfig.db
// tls: {
// rejectUnauthorized:
// redisConfig.tls?.reject_unauthorized || false
// }
}; };
// Enable TLS if configured (required for AWS ElastiCache in-transit encryption)
if (redisConfig.tls) {
opts.tls = {
rejectUnauthorized: redisConfig.tls.rejectUnauthorized ?? true
};
}
return opts; return opts;
} }
@@ -130,11 +134,15 @@ class RedisManager {
port: replica.port!, port: replica.port!,
password: replica.password, password: replica.password,
db: replica.db || redisConfig.db db: replica.db || redisConfig.db
// tls: {
// rejectUnauthorized:
// replica.tls?.reject_unauthorized || false
// }
}; };
// Enable TLS if configured (required for AWS ElastiCache in-transit encryption)
if (redisConfig.tls) {
opts.tls = {
rejectUnauthorized: redisConfig.tls.rejectUnauthorized ?? true
};
}
return opts; return opts;
} }

View File

@@ -197,7 +197,6 @@ export async function updateSiteBandwidth(
usageService usageService
.checkLimitSet( .checkLimitSet(
orgId, orgId,
FeatureId.EGRESS_DATA_MB, FeatureId.EGRESS_DATA_MB,
bandwidthUsage bandwidthUsage
) )

View File

@@ -2,9 +2,13 @@ import { db, dnsRecords } from "@server/db";
import { domains, exitNodes, orgDomains, orgs, resources } from "@server/db"; import { domains, exitNodes, orgDomains, orgs, resources } from "@server/db";
import config from "@server/lib/config"; import config from "@server/lib/config";
import { eq, ne } from "drizzle-orm"; import { eq, ne } from "drizzle-orm";
import logger from "@server/logger"; import { build } from "@server/build";
export async function copyInConfig() { export async function copyInConfig() {
if (build == "saas") {
return;
}
const endpoint = config.getRawConfig().gerbil.base_endpoint; const endpoint = config.getRawConfig().gerbil.base_endpoint;
const listenPort = config.getRawConfig().gerbil.start_port; const listenPort = config.getRawConfig().gerbil.start_port;

View File

@@ -19,6 +19,7 @@ import m11 from "./scriptsPg/1.14.0";
import m12 from "./scriptsPg/1.15.0"; import m12 from "./scriptsPg/1.15.0";
import m13 from "./scriptsPg/1.15.3"; import m13 from "./scriptsPg/1.15.3";
import m14 from "./scriptsPg/1.15.4"; import m14 from "./scriptsPg/1.15.4";
import { build } from "@server/build";
// THIS CANNOT IMPORT ANYTHING FROM THE SERVER // THIS CANNOT IMPORT ANYTHING FROM THE SERVER
// EXCEPT FOR THE DATABASE AND THE SCHEMA // EXCEPT FOR THE DATABASE AND THE SCHEMA
@@ -53,6 +54,10 @@ async function run() {
} }
export async function runMigrations() { export async function runMigrations() {
if (build == "saas") {
console.log("Running in SaaS mode, skipping migrations...");
return;
}
if (process.env.DISABLE_MIGRATIONS) { if (process.env.DISABLE_MIGRATIONS) {
console.log("Migrations are disabled. Skipping..."); console.log("Migrations are disabled. Skipping...");
return; return;

View File

@@ -37,6 +37,7 @@ import m32 from "./scriptsSqlite/1.14.0";
import m33 from "./scriptsSqlite/1.15.0"; import m33 from "./scriptsSqlite/1.15.0";
import m34 from "./scriptsSqlite/1.15.3"; import m34 from "./scriptsSqlite/1.15.3";
import m35 from "./scriptsSqlite/1.15.4"; import m35 from "./scriptsSqlite/1.15.4";
import { build } from "@server/build";
// THIS CANNOT IMPORT ANYTHING FROM THE SERVER // THIS CANNOT IMPORT ANYTHING FROM THE SERVER
// EXCEPT FOR THE DATABASE AND THE SCHEMA // EXCEPT FOR THE DATABASE AND THE SCHEMA
@@ -105,6 +106,10 @@ function backupDb() {
} }
export async function runMigrations() { export async function runMigrations() {
if (build == "saas") {
console.log("Running in SaaS mode, skipping migrations...");
return;
}
if (process.env.DISABLE_MIGRATIONS) { if (process.env.DISABLE_MIGRATIONS) {
console.log("Migrations are disabled. Skipping..."); console.log("Migrations are disabled. Skipping...");
return; return;

View File

@@ -445,6 +445,54 @@ export default function BillingPage() {
const currentPlanId = getCurrentPlanId(); const currentPlanId = getCurrentPlanId();
// Check if subscription is in a problematic state that requires attention
const hasProblematicSubscription = (): boolean => {
if (!tierSubscription?.subscription) return false;
const status = tierSubscription.subscription.status;
return (
status === "past_due" ||
status === "unpaid" ||
status === "incomplete" ||
status === "incomplete_expired"
);
};
const isProblematicState = hasProblematicSubscription();
// Get user-friendly subscription status message
const getSubscriptionStatusMessage = (): { title: string; description: string } | null => {
if (!tierSubscription?.subscription || !isProblematicState) return null;
const status = tierSubscription.subscription.status;
switch (status) {
case "past_due":
return {
title: t("billingPastDueTitle") || "Payment Past Due",
description: t("billingPastDueDescription") || "Your payment is past due. Please update your payment method to continue using your current plan features. If not resolved, your subscription will be canceled and you'll be reverted to the free tier."
};
case "unpaid":
return {
title: t("billingUnpaidTitle") || "Subscription Unpaid",
description: t("billingUnpaidDescription") || "Your subscription is unpaid and you have been reverted to the free tier. Please update your payment method to restore your subscription."
};
case "incomplete":
return {
title: t("billingIncompleteTitle") || "Payment Incomplete",
description: t("billingIncompleteDescription") || "Your payment is incomplete. Please complete the payment process to activate your subscription."
};
case "incomplete_expired":
return {
title: t("billingIncompleteExpiredTitle") || "Payment Expired",
description: t("billingIncompleteExpiredDescription") || "Your payment was never completed and has expired. You have been reverted to the free tier. Please subscribe again to restore access to paid features."
};
default:
return null;
}
};
const statusMessage = getSubscriptionStatusMessage();
// Get button label and action for each plan // Get button label and action for each plan
const getPlanAction = (plan: PlanOption) => { const getPlanAction = (plan: PlanOption) => {
if (plan.id === "enterprise") { if (plan.id === "enterprise") {
@@ -458,7 +506,7 @@ export default function BillingPage() {
if (plan.id === currentPlanId) { if (plan.id === currentPlanId) {
// If it's the basic plan (basic with no subscription), show as current but disabled // If it's the basic plan (basic with no subscription), show as current but disabled
if (plan.id === "basic" && !hasSubscription) { if (plan.id === "basic" && !hasSubscription && !isProblematicState) {
return { return {
label: "Current Plan", label: "Current Plan",
action: () => {}, action: () => {},
@@ -466,8 +514,17 @@ export default function BillingPage() {
disabled: true disabled: true
}; };
} }
// If on free tier but has a problematic subscription, allow them to manage it
if (plan.id === "basic" && isProblematicState) {
return {
label: "Manage Subscription",
action: handleModifySubscription,
variant: "default" as const,
disabled: false
};
}
return { return {
label: "Modify Current Plan", label: "Manage Current Plan",
action: handleModifySubscription, action: handleModifySubscription,
variant: "default" as const, variant: "default" as const,
disabled: false disabled: false
@@ -503,7 +560,7 @@ export default function BillingPage() {
} }
}, },
variant: "outline" as const, variant: "outline" as const,
disabled: false disabled: isProblematicState
}; };
} }
@@ -522,7 +579,7 @@ export default function BillingPage() {
} }
}, },
variant: "outline" as const, variant: "outline" as const,
disabled: false disabled: isProblematicState
}; };
}; };
@@ -648,6 +705,26 @@ export default function BillingPage() {
return ( return (
<SettingsContainer> <SettingsContainer>
{/* Subscription Status Alert */}
{isProblematicState && statusMessage && (
<Alert variant="destructive" className="mb-6">
<AlertTriangle className="h-4 w-4" />
<AlertTitle>
{statusMessage.title}
</AlertTitle>
<AlertDescription>
{statusMessage.description}
{" "}
<button
onClick={handleModifySubscription}
className="underline font-semibold hover:no-underline"
>
{t("billingManageSubscription") || "Manage your subscription"}
</button>
</AlertDescription>
</Alert>
)}
{/* Your Plan Section */} {/* Your Plan Section */}
<SettingsSection> <SettingsSection>
<SettingsSectionHeader> <SettingsSectionHeader>
@@ -692,22 +769,50 @@ export default function BillingPage() {
</div> </div>
</div> </div>
<div className="mt-4"> <div className="mt-4">
<Button {isProblematicState && planAction.disabled && !isCurrentPlan && plan.id !== "enterprise" ? (
variant={ <Tooltip>
isCurrentPlan <TooltipTrigger asChild>
? "default" <div>
: "outline" <Button
} variant={
size="sm" isCurrentPlan
className="w-full" ? "default"
onClick={planAction.action} : "outline"
disabled={ }
isLoading || planAction.disabled size="sm"
} className="w-full"
loading={isLoading && isCurrentPlan} onClick={planAction.action}
> disabled={
{planAction.label} isLoading || planAction.disabled
</Button> }
loading={isLoading && isCurrentPlan}
>
{planAction.label}
</Button>
</div>
</TooltipTrigger>
<TooltipContent>
<p>{t("billingResolvePaymentIssue") || "Please resolve your payment issue before upgrading or downgrading"}</p>
</TooltipContent>
</Tooltip>
) : (
<Button
variant={
isCurrentPlan
? "default"
: "outline"
}
size="sm"
className="w-full"
onClick={planAction.action}
disabled={
isLoading || planAction.disabled
}
loading={isLoading && isCurrentPlan}
>
{planAction.label}
</Button>
)}
</div> </div>
</div> </div>
); );

View File

@@ -82,13 +82,13 @@ export default async function RootLayout({
<body className={`${font.className} h-screen-safe overflow-hidden`}> <body className={`${font.className} h-screen-safe overflow-hidden`}>
<StoreInternalRedirect /> <StoreInternalRedirect />
<TopLoader /> <TopLoader />
{build === "saas" && ( {/* build === "saas" && (
<Script <Script
src="https://rybbit.fossorial.io/api/script.js" src="https://rybbit.fossorial.io/api/script.js"
data-site-id="fe1ff2a33287" data-site-id="fe1ff2a33287"
strategy="afterInteractive" strategy="afterInteractive"
/> />
)} )*/}
<ViewportHeightFix /> <ViewportHeightFix />
<NextIntlClientProvider> <NextIntlClientProvider>
<ThemeProvider <ThemeProvider

View File

@@ -20,7 +20,7 @@ export const isOrgSubscribed = cache(async (orgId: string) => {
try { try {
const subRes = await getCachedSubscription(orgId); const subRes = await getCachedSubscription(orgId);
subscribed = subscribed =
(subRes.data.data.tier == "tier1" || subRes.data.data.tier == "tier2" || subRes.data.data.tier == "tier3") && (subRes.data.data.tier == "tier1" || subRes.data.data.tier == "tier2" || subRes.data.data.tier == "tier3" || subRes.data.data.tier == "enterprise") &&
subRes.data.data.active; subRes.data.data.active;
} catch {} } catch {}
} }

View File

@@ -42,7 +42,8 @@ export function SubscriptionStatusProvider({
if ( if (
subscription.type == "tier1" || subscription.type == "tier1" ||
subscription.type == "tier2" || subscription.type == "tier2" ||
subscription.type == "tier3" subscription.type == "tier3" ||
subscription.type == "enterprise"
) { ) {
return { return {
tier: subscription.type, tier: subscription.type,
@@ -61,7 +62,7 @@ export function SubscriptionStatusProvider({
const isSubscribed = () => { const isSubscribed = () => {
const { tier, active } = getTier(); const { tier, active } = getTier();
return ( return (
(tier == "tier1" || tier == "tier2" || tier == "tier3") && (tier == "tier1" || tier == "tier2" || tier == "tier3" || tier == "enterprise") &&
active active
); );
}; };