From c5569fccf1263cefa3f9c2cd97b896ebfbc38374 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:14 -0700 Subject: [PATCH 01/28] New translations en-us.json (French) --- messages/fr-FR.json | 351 ++++++++++++++++++++++---------------------- 1 file changed, 178 insertions(+), 173 deletions(-) diff --git a/messages/fr-FR.json b/messages/fr-FR.json index 00da9036..95a90c0c 100644 --- a/messages/fr-FR.json +++ b/messages/fr-FR.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "La façon la plus simple de créer un point d'entrée dans votre réseau. Pas de configuration supplémentaire.", "siteWg": "WireGuard basique", "siteWgDescription": "Utilisez n'importe quel client WireGuard pour établir un tunnel. Configuration NAT manuelle requise.", - "siteWgDescriptionSaas": "Utilisez n'importe quel client WireGuard pour établir un tunnel. Configuration NAT manuelle requise. FONCTIONNE UNIQUEMENT SUR DES NŒUDS AUTONOMES", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Ressources locales seulement. Pas de tunneling.", - "siteLocalDescriptionSaas": "Ressources locales uniquement. Pas de tunneling. FONCTIONNE UNIQUEMENT SUR DES NŒUDS AUTONOMES", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Voir tous les sites", "siteTunnelDescription": "Déterminez comment vous voulez vous connecter à votre site", "siteNewtCredentials": "Identifiants Newt", @@ -159,7 +159,7 @@ "resourceHTTP": "Ressource HTTPS", "resourceHTTPDescription": "Requêtes de proxy à votre application via HTTPS en utilisant un sous-domaine ou un domaine de base.", "resourceRaw": "Ressource TCP/UDP brute", - "resourceRawDescription": "Demandes de proxy à votre application via TCP/UDP en utilisant un numéro de port.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Créer une ressource", "resourceCreateDescription": "Suivez les étapes ci-dessous pour créer une nouvelle ressource", "resourceSeeAll": "Voir toutes les ressources", @@ -168,9 +168,9 @@ "siteSelect": "Sélectionner un site", "siteSearch": "Chercher un site", "siteNotFound": "Aucun site trouvé.", - "selectCountry": "Sélectionnez un pays", - "searchCountries": "Recherchez des pays...", - "noCountryFound": "Aucun pays trouvé.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Ce site fournira la connectivité à la cible.", "resourceType": "Type de ressource", "resourceTypeDescription": "Déterminer comment vous voulez accéder à votre ressource", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Sous-domaine : {subdomain}", "domainPickerNamespace": "Espace de noms : {namespace}", "domainPickerShowMore": "Afficher plus", - "regionSelectorTitle": "Sélectionner Région", - "regionSelectorInfo": "Sélectionner une région nous aide à offrir de meilleures performances pour votre localisation. Vous n'avez pas besoin d'être dans la même région que votre serveur.", - "regionSelectorPlaceholder": "Choisissez une région", - "regionSelectorComingSoon": "Bientôt disponible", - "billingLoadingSubscription": "Chargement de l'abonnement...", - "billingFreeTier": "Niveau gratuit", - "billingWarningOverLimit": "Attention : Vous avez dépassé une ou plusieurs limites d'utilisation. Vos sites ne se connecteront pas tant que vous n'avez pas modifié votre abonnement ou ajusté votre utilisation.", - "billingUsageLimitsOverview": "Vue d'ensemble des limites d'utilisation", - "billingMonitorUsage": "Surveillez votre consommation par rapport aux limites configurées. Si vous avez besoin d'une augmentation des limites, veuillez nous contacter à support@fossorial.io.", - "billingDataUsage": "Utilisation des données", - "billingOnlineTime": "Temps en ligne du site", - "billingUsers": "Utilisateurs actifs", - "billingDomains": "Domaines actifs", - "billingRemoteExitNodes": "Nœuds auto-hébergés actifs", - "billingNoLimitConfigured": "Aucune limite configurée", - "billingEstimatedPeriod": "Période de facturation estimée", - "billingIncludedUsage": "Utilisation incluse", - "billingIncludedUsageDescription": "Utilisation incluse dans votre plan d'abonnement actuel", - "billingFreeTierIncludedUsage": "Tolérances d'utilisation du niveau gratuit", - "billingIncluded": "inclus", - "billingEstimatedTotal": "Total estimé :", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", "billingNotes": "Notes", - "billingEstimateNote": "Ceci est une estimation basée sur votre utilisation actuelle.", - "billingActualChargesMayVary": "Les frais réels peuvent varier.", - "billingBilledAtEnd": "Vous serez facturé à la fin de la période de facturation.", - "billingModifySubscription": "Modifier l'abonnement", - "billingStartSubscription": "Démarrer l'abonnement", - "billingRecurringCharge": "Frais récurrents", - "billingManageSubscriptionSettings": "Gérez les paramètres et préférences de votre abonnement", - "billingNoActiveSubscription": "Vous n'avez pas d'abonnement actif. Commencez votre abonnement pour augmenter les limites d'utilisation.", - "billingFailedToLoadSubscription": "Échec du chargement de l'abonnement", - "billingFailedToLoadUsage": "Échec du chargement de l'utilisation", - "billingFailedToGetCheckoutUrl": "Échec pour obtenir l'URL de paiement", - "billingPleaseTryAgainLater": "Veuillez réessayer plus tard.", - "billingCheckoutError": "Erreur de paiement", - "billingFailedToGetPortalUrl": "Échec pour obtenir l'URL du portail", - "billingPortalError": "Erreur du portail", - "billingDataUsageInfo": "Vous êtes facturé pour toutes les données transférées via vos tunnels sécurisés lorsque vous êtes connecté au cloud. Cela inclut le trafic entrant et sortant sur tous vos sites. Lorsque vous atteignez votre limite, vos sites se déconnecteront jusqu'à ce que vous mettiez à niveau votre plan ou réduisiez l'utilisation. Les données ne sont pas facturées lors de l'utilisation de nœuds.", - "billingOnlineTimeInfo": "Vous êtes facturé en fonction de la durée de connexion de vos sites au cloud. Par exemple, 44 640 minutes équivaut à un site fonctionnant 24/7 pendant un mois complet. Lorsque vous atteignez votre limite, vos sites se déconnecteront jusqu'à ce que vous mettiez à niveau votre forfait ou réduisiez votre consommation. Le temps n'est pas facturé lors de l'utilisation de nœuds.", - "billingUsersInfo": "Vous êtes facturé pour chaque utilisateur dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de comptes utilisateurs actifs dans votre organisation.", - "billingDomainInfo": "Vous êtes facturé pour chaque domaine dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de comptes de domaine actifs dans votre organisation.", - "billingRemoteExitNodesInfo": "Vous êtes facturé pour chaque nœud géré dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de nœuds gérés actifs dans votre organisation.", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Domaine introuvable", "domainNotFoundDescription": "Cette ressource est désactivée car le domaine n'existe plus dans notre système. Veuillez définir un nouveau domaine pour cette ressource.", "failed": "Échec", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Les modifications DNS peuvent mettre du temps à se propager sur internet. Cela peut prendre de quelques minutes à 48 heures selon votre fournisseur DNS et les réglages TTL.", "resourcePortRequired": "Le numéro de port est requis pour les ressources non-HTTP", "resourcePortNotAllowed": "Le numéro de port ne doit pas être défini pour les ressources HTTP", - "billingPricingCalculatorLink": "Calculateur de prix", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Je suis d'accord avec", "termsOfService": "les conditions d'utilisation", @@ -1412,41 +1412,41 @@ "addNewTarget": "Ajouter une nouvelle cible", "targetsList": "Liste des cibles", "targetErrorDuplicateTargetFound": "Cible en double trouvée", - "healthCheckHealthy": "Sain", - "healthCheckUnhealthy": "En mauvaise santé", - "healthCheckUnknown": "Inconnu", - "healthCheck": "Vérification de l'état de santé", - "configureHealthCheck": "Configurer la vérification de l'état de santé", - "configureHealthCheckDescription": "Configurer la surveillance de la santé pour {target}", - "enableHealthChecks": "Activer les vérifications de santé", - "enableHealthChecksDescription": "Surveiller la vie de cette cible. Vous pouvez surveiller un point de terminaison différent de la cible si nécessaire.", - "healthScheme": "Méthode", - "healthSelectScheme": "Sélectionnez la méthode", - "healthCheckPath": "Chemin d'accès", - "healthHostname": "IP / Hôte", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", + "healthHostname": "IP / Host", "healthPort": "Port", - "healthCheckPathDescription": "Le chemin à vérifier pour le statut de santé.", - "healthyIntervalSeconds": "Intervalle sain", - "unhealthyIntervalSeconds": "Intervalle en mauvaise santé", - "IntervalSeconds": "Intervalle sain", - "timeoutSeconds": "Délai", - "timeIsInSeconds": "Le temps est exprimé en secondes", - "retryAttempts": "Tentatives de réessai", - "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.", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "En-têtes personnalisés", - "customHeadersDescription": "En-têtes séparés par une nouvelle ligne: En-nom: valeur", - "headersValidationError": "Les entêtes doivent être au format : Header-Name: valeur.", - "saveHealthCheck": "Sauvegarder la vérification de l'état de santé", - "healthCheckSaved": "Vérification de l'état de santé enregistrée", - "healthCheckSavedDescription": "La configuration de la vérification de l'état de santé a été enregistrée avec succès", - "healthCheckError": "Erreur de vérification de l'état de santé", - "healthCheckErrorDescription": "Une erreur s'est produite lors de l'enregistrement de la configuration de la vérification de l'état de santé", - "healthCheckPathRequired": "Le chemin de vérification de l'état de santé est requis", - "healthCheckMethodRequired": "La méthode HTTP est requise", - "healthCheckIntervalMin": "L'intervalle de vérification doit être d'au moins 5 secondes", - "healthCheckTimeoutMin": "Le délai doit être d'au moins 1 seconde", - "healthCheckRetryMin": "Les tentatives de réessai doivent être d'au moins 1", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "Méthode HTTP", "selectHttpMethod": "Sélectionnez la méthode HTTP", "domainPickerSubdomainLabel": "Sous-domaine", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Entrez un sous-domaine pour rechercher et sélectionner parmi les domaines gratuits disponibles.", "domainPickerFreeDomains": "Domaines gratuits", "domainPickerSearchForAvailableDomains": "Rechercher des domaines disponibles", - "domainPickerNotWorkSelfHosted": "Remarque : Les domaines fournis gratuitement ne sont pas disponibles pour les instances auto-hébergées pour le moment.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Domaine", "resourceEditDomain": "Modifier le domaine", "siteName": "Nom du site", @@ -1543,72 +1543,72 @@ "autoLoginError": "Erreur de connexion automatique", "autoLoginErrorNoRedirectUrl": "Aucune URL de redirection reçue du fournisseur d'identité.", "autoLoginErrorGeneratingUrl": "Échec de la génération de l'URL d'authentification.", - "remoteExitNodeManageRemoteExitNodes": "Gérer auto-hébergé", - "remoteExitNodeDescription": "Gérer les nœuds pour étendre votre connectivité réseau", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Rechercher des nœuds...", - "remoteExitNodeAdd": "Ajouter un noeud", - "remoteExitNodeErrorDelete": "Erreur lors de la suppression du noeud", - "remoteExitNodeQuestionRemove": "Êtes-vous sûr de vouloir supprimer le noeud {selectedNode} de l'organisation ?", - "remoteExitNodeMessageRemove": "Une fois supprimé, le noeud ne sera plus accessible.", - "remoteExitNodeMessageConfirm": "Pour confirmer, veuillez saisir le nom du noeud ci-dessous.", - "remoteExitNodeConfirmDelete": "Confirmer la suppression du noeud", - "remoteExitNodeDelete": "Supprimer le noeud", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Créer un noeud", - "description": "Créer un nouveau nœud pour étendre votre connectivité réseau", - "viewAllButton": "Voir tous les nœuds", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Stratégie de création", - "description": "Choisissez ceci pour configurer manuellement votre nœud ou générer de nouveaux identifiants.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Adopter un nœud", - "description": "Choisissez ceci si vous avez déjà les identifiants pour le noeud." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Générer des clés", - "description": "Choisissez ceci si vous voulez générer de nouvelles clés pour le noeud" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Adopter un nœud existant", - "description": "Entrez les identifiants du noeud existant que vous souhaitez adopter", - "nodeIdLabel": "Nœud ID", - "nodeIdDescription": "L'ID du noeud existant que vous voulez adopter", + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", "secretLabel": "Secret", - "secretDescription": "La clé secrète du noeud existant", - "submitButton": "Noeud d'Adopt" + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Informations d'identification générées", - "description": "Utilisez ces identifiants générés pour configurer votre noeud", - "nodeIdTitle": "Nœud ID", + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", "secretTitle": "Secret", - "saveCredentialsTitle": "Ajouter des identifiants à la config", - "saveCredentialsDescription": "Ajoutez ces informations d'identification à votre fichier de configuration du nœud Pangolin auto-hébergé pour compléter la connexion.", - "submitButton": "Créer un noeud" + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "ID de nœud et secret sont requis lors de l'adoption d'un noeud existant" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Échec du chargement des valeurs par défaut", - "defaultsNotLoaded": "Valeurs par défaut non chargées", - "createFailed": "Impossible de créer le noeud" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Noeud créé avec succès" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Sélection du noeud", - "remoteExitNodeSelectionDescription": "Sélectionnez un nœud pour acheminer le trafic pour ce site local", - "remoteExitNodeRequired": "Un noeud doit être sélectionné pour les sites locaux", - "noRemoteExitNodesAvailable": "Aucun noeud disponible", - "noRemoteExitNodesAvailableDescription": "Aucun noeud n'est disponible pour cette organisation. Créez d'abord un noeud pour utiliser des sites locaux.", - "exitNode": "Nœud de sortie", - "country": "Pays", - "rulesMatchCountry": "Actuellement basé sur l'IP source", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Gestion autonome", "description": "Serveur Pangolin auto-hébergé avec des cloches et des sifflets supplémentaires", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Domaine international détecté", "willbestoredas": "Sera stocké comme :", - "roleMappingDescription": "Détermine comment les rôles sont assignés aux utilisateurs lorsqu'ils se connectent lorsque la fourniture automatique est activée.", - "selectRole": "Sélectionnez un rôle", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choisir un rôle", - "selectRoleDescription": "Sélectionnez un rôle à assigner à tous les utilisateurs de ce fournisseur d'identité", - "roleMappingExpressionDescription": "Entrez une expression JMESPath pour extraire les informations du rôle du jeton ID", - "idpTenantIdRequired": "L'ID du locataire est requis", - "invalidValue": "Valeur non valide", - "idpTypeLabel": "Type de fournisseur d'identité", - "roleMappingExpressionPlaceholder": "ex: contenu(groupes) && 'admin' || 'membre'", - "idpGoogleConfiguration": "Configuration Google", - "idpGoogleConfigurationDescription": "Configurer vos identifiants Google OAuth2", - "idpGoogleClientIdDescription": "Votre identifiant client Google OAuth2", - "idpGoogleClientSecretDescription": "Votre secret client Google OAuth2", - "idpAzureConfiguration": "Configuration de l'entra ID Azure", - "idpAzureConfigurationDescription": "Configurer vos identifiants OAuth2 Azure Entra", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "votre-locataire-id", - "idpAzureTenantIdDescription": "Votre ID de locataire Azure (trouvé dans l'aperçu Azure Active Directory)", - "idpAzureClientIdDescription": "Votre ID client d'enregistrement de l'application Azure", - "idpAzureClientSecretDescription": "Le secret de votre client d'enregistrement Azure App", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Configuration Google", - "idpAzureConfigurationTitle": "Configuration de l'entra ID Azure", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Votre ID client d'enregistrement de l'application Azure", - "idpAzureClientSecretDescription2": "Le secret de votre client d'enregistrement Azure App", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Fournisseur Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Sous-réseau", - "subnetDescription": "Le sous-réseau de la configuration réseau de cette organisation.", - "authPage": "Page d'authentification", - "authPageDescription": "Configurer la page d'authentification de votre organisation", - "authPageDomain": "Domaine de la page d'authentification", - "noDomainSet": "Aucun domaine défini", - "changeDomain": "Changer de domaine", - "selectDomain": "Sélectionner un domaine", - "restartCertificate": "Redémarrer le certificat", - "editAuthPageDomain": "Modifier le domaine de la page d'authentification", - "setAuthPageDomain": "Définir le domaine de la page d'authentification", - "failedToFetchCertificate": "Impossible de récupérer le certificat", - "failedToRestartCertificate": "Échec du redémarrage du certificat", - "addDomainToEnableCustomAuthPages": "Ajouter un domaine pour activer les pages d'authentification personnalisées pour votre organisation", - "selectDomainForOrgAuthPage": "Sélectionnez un domaine pour la page d'authentification de l'organisation", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Domaine fourni", "domainPickerFreeProvidedDomain": "Domaine fourni gratuitement", "domainPickerVerified": "Vérifié", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "La «{sub}» n'a pas pu être validée pour {domain}.", "domainPickerSubdomainSanitized": "Sous-domaine nettoyé", "domainPickerSubdomainCorrected": "\"{sub}\" a été corrigé à \"{sanitized}\"", - "orgAuthSignInTitle": "Connectez-vous à votre organisation", - "orgAuthChooseIdpDescription": "Choisissez votre fournisseur d'identité pour continuer", - "orgAuthNoIdpConfigured": "Cette organisation n'a aucun fournisseur d'identité configuré. Vous pouvez vous connecter avec votre identité Pangolin à la place.", - "orgAuthSignInWithPangolin": "Se connecter avec Pangolin", - "subscriptionRequiredToUse": "Un abonnement est requis pour utiliser cette fonctionnalité.", - "idpDisabled": "Les fournisseurs d'identité sont désactivés.", - "orgAuthPageDisabled": "La page d'authentification de l'organisation est désactivée.", - "domainRestartedDescription": "La vérification du domaine a été redémarrée avec succès", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Modifier le fichier : config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Modifier le fichier : docker-compose.yml", "emailVerificationRequired": "La vérification de l'e-mail est requise. Veuillez vous reconnecter via {dashboardUrl}/auth/login terminé cette étape. Puis revenez ici.", - "twoFactorSetupRequired": "La configuration d'authentification à deux facteurs est requise. Veuillez vous reconnecter via {dashboardUrl}/auth/login terminé cette étape. Puis revenez ici." + "twoFactorSetupRequired": "La configuration d'authentification à deux facteurs est requise. Veuillez vous reconnecter via {dashboardUrl}/auth/login terminé cette étape. Puis revenez ici.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From b3a6cd066042b6fe12d7a95a33e5de434538ef7c Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:15 -0700 Subject: [PATCH 02/28] New translations en-us.json (Bulgarian) --- messages/bg-BG.json | 215 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 207 insertions(+), 8 deletions(-) diff --git a/messages/bg-BG.json b/messages/bg-BG.json index 1a579ed0..ba407ff2 100644 --- a/messages/bg-BG.json +++ b/messages/bg-BG.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Най-лесният начин да създадете входна точка в мрежата си. Без допълнително конфигуриране.", "siteWg": "Основен WireGuard", "siteWgDescription": "Use any WireGuard client to establish a tunnel. Manual NAT setup required. ONLY WORKS ON SELF HOSTED NODES", - "siteWgDescriptionSaas": "Използвайте всеки WireGuard клиент за установяване на тунел. Ръчно нат задаване е необходимо. РАБОТИ САМО НА СОБСТВЕНИ УЗЛИ.", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Local resources only. No tunneling. ONLY WORKS ON SELF HOSTED NODES", - "siteLocalDescriptionSaas": "Само локални ресурси. Без тунелиране. РАБОТИ САМО НА СОБСТВЕНИ УЗЛИ.", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Вижте всички сайтове", "siteTunnelDescription": "Определете как искате да се свържете с вашия сайт", "siteNewtCredentials": "Newt Удостоверения", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS ресурс", "resourceHTTPDescription": "Прокси заявки към вашето приложение през HTTPS с помощта на субдомейн или базов домейн.", "resourceRaw": "Суров TCP/UDP ресурс", - "resourceRawDescription": "Прокси заявки към вашето приложение през TCP/UDP с помощта на номер на порт.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Създайте ресурс", "resourceCreateDescription": "Следвайте стъпките по-долу, за да създадете нов ресурс", "resourceSeeAll": "Вижте всички ресурси", @@ -168,6 +168,9 @@ "siteSelect": "Изберете сайт", "siteSearch": "Търсене на сайт", "siteNotFound": "Няма намерени сайтове.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Този сайт ще осигури свързаност до целта.", "resourceType": "Тип ресурс", "resourceTypeDescription": "Определете как искате да получите достъп до вашия ресурс", @@ -914,8 +917,6 @@ "idpConnectingToFinished": "Свързано", "idpErrorConnectingTo": "Имаше проблем със свързването към {name}. Моля, свържете се с вашия администратор.", "idpErrorNotFound": "Не е намерен идентификационен доставчик", - "idpGoogleAlt": "Google", - "idpAzureAlt": "Azure", "inviteInvalid": "Невалидна покана", "inviteInvalidDescription": "Линкът към поканата е невалиден.", "inviteErrorWrongUser": "Поканата не е за този потребител", @@ -1257,6 +1258,48 @@ "domainPickerSubdomain": "Поддомейн: {subdomain}", "domainPickerNamespace": "Име на пространство: {namespace}", "domainPickerShowMore": "Покажи повече", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Домейнът не е намерен", "domainNotFoundDescription": "Този ресурс е деактивиран, защото домейнът вече не съществува в нашата система. Моля, задайте нов домейн за този ресурс.", "failed": "Неуспешно", @@ -1320,6 +1363,7 @@ "createDomainDnsPropagationDescription": "Промените в DNS може да отнемат време, за да се разпространят в интернет. Това може да отнеме от няколко минути до 48 часа, в зависимост от вашия DNS доставчик и TTL настройките .", "resourcePortRequired": "Номерът на порта е задължителен за не-HTTP ресурси", "resourcePortNotAllowed": "Номерът на порта не трябва да бъде задаван за HTTP ресурси", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Съгласен съм с", "termsOfService": "условията за ползване", @@ -1368,6 +1412,41 @@ "addNewTarget": "Добави нова цел", "targetsList": "Списък с цели", "targetErrorDuplicateTargetFound": "Дублирана цел намерена", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", + "healthHostname": "IP / Host", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "customHeaders": "Персонализирани заглавия", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP Метод", "selectHttpMethod": "Изберете HTTP метод", "domainPickerSubdomainLabel": "Поддомен", @@ -1381,6 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Въведете поддомен, за да търсите и изберете от наличните свободни домейни.", "domainPickerFreeDomains": "Безплатни домейни", "domainPickerSearchForAvailableDomains": "Търсене за налични домейни", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Домейн", "resourceEditDomain": "Редактиране на домейн", "siteName": "Име на сайта", @@ -1463,6 +1543,72 @@ "autoLoginError": "Грешка при автоматично влизане", "autoLoginErrorNoRedirectUrl": "Не е получен URL за пренасочване от доставчика на идентификационни данни.", "autoLoginErrorGeneratingUrl": "Неуспешно генериране на URL за удостоверяване.", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", + "remoteExitNodes": "Nodes", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", + "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeCreate": { + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", + "strategy": { + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", + "adopt": { + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." + }, + "generate": { + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" + } + }, + "adopt": { + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" + }, + "generate": { + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" + }, + "validation": { + "adoptRequired": "Node ID and Secret are required when adopting an existing node" + }, + "errors": { + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" + }, + "success": { + "created": "Node created successfully" + } + }, + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Управлявано Самостоятелно-хоствано", "description": "По-надежден и по-нисък поддръжка на Самостоятелно-хостван Панголиин сървър с допълнителни екстри", @@ -1501,11 +1647,53 @@ }, "internationaldomaindetected": "Открит международен домейн", "willbestoredas": "Ще бъде съхранено като:", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", + "idpTenantId": "Tenant ID", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "idpGoogleTitle": "Google", + "idpGoogleAlt": "Google", + "idpAzureTitle": "Azure Entra ID", + "idpAzureAlt": "Azure", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", + "idpTenantIdLabel": "Tenant ID", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC доставчик", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC доставчик", - "customHeaders": "Персонализирани заглавия", - "customHeadersDescription": "Add custom headers to be sent when proxying requests. One per line in the format Header-Name: value", - "headersValidationError": "Заглавията трябва да бъдат във формат: Име на заглавието: стойност.", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Предоставен домейн", "domainPickerFreeProvidedDomain": "Безплатен предоставен домейн", "domainPickerVerified": "Проверено", @@ -1519,10 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" не може да се направи валиден за {domain}.", "domainPickerSubdomainSanitized": "Поддомен пречистен", "domainPickerSubdomainCorrected": "\"{sub}\" беше коригиран на \"{sanitized}\"", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Редактиране на файл: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Редактиране на файл: docker-compose.yml", "emailVerificationRequired": "Потвърждението на Email е необходимо. Моля, влезте отново чрез {dashboardUrl}/auth/login, за да завършите тази стъпка. След това, върнете се тук.", "twoFactorSetupRequired": "Необходима е настройка на двуфакторно удостоверяване. Моля, влезте отново чрез {dashboardUrl}/auth/login, за да завършите тази стъпка. След това, върнете се тук.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", "rewritePath": "Rewrite Path", "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From 942f7c2bc9966b73a83c21285b32260b3935313b Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:16 -0700 Subject: [PATCH 03/28] New translations en-us.json (Czech) --- messages/cs-CZ.json | 365 ++++++++++++++++++++++---------------------- 1 file changed, 185 insertions(+), 180 deletions(-) diff --git a/messages/cs-CZ.json b/messages/cs-CZ.json index 91f4a46a..fb6e2eb0 100644 --- a/messages/cs-CZ.json +++ b/messages/cs-CZ.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Nejjednodušší způsob, jak vytvořit vstupní bod do vaší sítě. Žádné další nastavení.", "siteWg": "Základní WireGuard", "siteWgDescription": "Použijte jakéhokoli klienta WireGuard abyste sestavili tunel. Vyžaduje se ruční nastavení NAT.", - "siteWgDescriptionSaas": "Použijte jakéhokoli klienta WireGuard abyste sestavili tunel. Vyžaduje se ruční nastavení NAT. FUNGUJE POUZE NA SELF-HOSTED SERVERECH", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Pouze lokální zdroje. Žádný tunel.", - "siteLocalDescriptionSaas": "Pouze lokální zdroje. Žádný tunel. FUNGUJE POUZE NA SELF-HOSTED SERVERECH", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Zobrazit všechny lokality", "siteTunnelDescription": "Určete jak se chcete připojit k vaší lokalitě", "siteNewtCredentials": "Přihlašovací údaje Newt", @@ -159,7 +159,7 @@ "resourceHTTP": "Zdroj HTTPS", "resourceHTTPDescription": "Požadavky na proxy pro vaši aplikaci přes HTTPS pomocí subdomény nebo základní domény.", "resourceRaw": "Surový TCP/UDP zdroj", - "resourceRawDescription": "Požadavky na proxy pro vaši aplikaci přes TCP/UDP pomocí čísla portu.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Vytvořit zdroj", "resourceCreateDescription": "Postupujte podle níže uvedených kroků, abyste vytvořili a připojili nový zdroj", "resourceSeeAll": "Zobrazit všechny zdroje", @@ -168,9 +168,9 @@ "siteSelect": "Vybrat lokalitu", "siteSearch": "Hledat lokalitu", "siteNotFound": "Nebyla nalezena žádná lokalita.", - "selectCountry": "Vyberte zemi", - "searchCountries": "Hledat země...", - "noCountryFound": "Nebyla nalezena žádná země.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Tato lokalita poskytne připojení k cíli.", "resourceType": "Typ zdroje", "resourceTypeDescription": "Určete, jak chcete přistupovat ke svému zdroji", @@ -917,8 +917,6 @@ "idpConnectingToFinished": "Připojeno", "idpErrorConnectingTo": "Při připojování k {name}došlo k chybě. Obraťte se na správce.", "idpErrorNotFound": "IdP nenalezen", - "idpGoogleAlt": "Google", - "idpAzureAlt": "Azure", "inviteInvalid": "Neplatná pozvánka", "inviteInvalidDescription": "Odkaz pro pozvání je neplatný.", "inviteErrorWrongUser": "Pozvat není pro tohoto uživatele", @@ -1260,48 +1258,48 @@ "domainPickerSubdomain": "Subdoména: {subdomain}", "domainPickerNamespace": "Jmenný prostor: {namespace}", "domainPickerShowMore": "Zobrazit více", - "regionSelectorTitle": "Vybrat region", - "regionSelectorInfo": "Výběr regionu nám pomáhá poskytovat lepší výkon pro vaši polohu. Nemusíte být ve stejném regionu jako váš server.", - "regionSelectorPlaceholder": "Vyberte region", - "regionSelectorComingSoon": "Již brzy", - "billingLoadingSubscription": "Načítání odběru...", - "billingFreeTier": "Volná úroveň", - "billingWarningOverLimit": "Upozornění: Překročili jste jeden nebo více omezení používání. Vaše stránky se nepřipojí dokud nezměníte předplatné nebo neupravíte své používání.", - "billingUsageLimitsOverview": "Přehled omezení použití", - "billingMonitorUsage": "Sledujte vaše využití pomocí nastavených limitů. Pokud potřebujete zvýšit limity, kontaktujte nás prosím support@fossorial.io.", - "billingDataUsage": "Využití dat", - "billingOnlineTime": "Stránka online čas", - "billingUsers": "Aktivní uživatelé", - "billingDomains": "Aktivní domény", - "billingRemoteExitNodes": "Aktivní Samostatně hostované uzly", - "billingNoLimitConfigured": "Žádný limit nenastaven", - "billingEstimatedPeriod": "Odhadované období fakturace", - "billingIncludedUsage": "Zahrnuto využití", - "billingIncludedUsageDescription": "Využití zahrnované s aktuálním plánem předplatného", - "billingFreeTierIncludedUsage": "Povolenky bezplatné úrovně využití", - "billingIncluded": "zahrnuto", - "billingEstimatedTotal": "Odhadovaný celkem:", - "billingNotes": "Poznámky", - "billingEstimateNote": "Toto je odhad založený na aktuálním využití.", - "billingActualChargesMayVary": "Skutečné náklady se mohou lišit.", - "billingBilledAtEnd": "Budete účtováni na konci fakturační doby.", - "billingModifySubscription": "Upravit předplatné", - "billingStartSubscription": "Začít předplatné", - "billingRecurringCharge": "Opakované nabití", - "billingManageSubscriptionSettings": "Spravovat nastavení a nastavení předplatného", - "billingNoActiveSubscription": "Nemáte aktivní předplatné. Začněte předplatné, abyste zvýšili omezení používání.", - "billingFailedToLoadSubscription": "Nepodařilo se načíst odběr", - "billingFailedToLoadUsage": "Nepodařilo se načíst využití", - "billingFailedToGetCheckoutUrl": "Nepodařilo se získat adresu URL pokladny", - "billingPleaseTryAgainLater": "Zkuste to prosím znovu později.", - "billingCheckoutError": "Chyba pokladny", - "billingFailedToGetPortalUrl": "Nepodařilo se získat URL portálu", - "billingPortalError": "Chyba portálu", - "billingDataUsageInfo": "Pokud jste připojeni k cloudu, jsou vám účtována všechna data přenášená prostřednictvím zabezpečených tunelů. To zahrnuje příchozí i odchozí provoz na všech vašich stránkách. Jakmile dosáhnete svého limitu, vaše stránky se odpojí, dokud neaktualizujete svůj tarif nebo nezmenšíte jeho používání. Data nejsou nabírána při používání uzlů.", - "billingOnlineTimeInfo": "Platíte na základě toho, jak dlouho budou vaše stránky připojeny k cloudu. Například, 44,640 minut se rovná jedné stránce 24/7 po celý měsíc. Jakmile dosáhnete svého limitu, vaše stránky se odpojí, dokud neaktualizujete svůj tarif nebo nezkrátíte jeho používání. Čas není vybírán při používání uzlů.", - "billingUsersInfo": "Obdrželi jste platbu za každého uživatele ve vaší organizaci. Fakturace je počítána denně na základě počtu aktivních uživatelských účtů ve vašem org.", - "billingDomainInfo": "Platba je účtována za každou doménu ve vaší organizaci. Fakturace je počítána denně na základě počtu aktivních doménových účtů na Vašem org.", - "billingRemoteExitNodesInfo": "Za každý spravovaný uzel ve vaší organizaci se vám účtuje denně. Fakturace je počítána na základě počtu aktivních spravovaných uzlů ve vašem org.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Doména nenalezena", "domainNotFoundDescription": "Tento dokument je zakázán, protože doména již neexistuje náš systém. Nastavte prosím novou doménu pro tento dokument.", "failed": "Selhalo", @@ -1365,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Změna DNS může trvat nějakou dobu, než se šíří po internetu. To může trvat kdekoli od několika minut do 48 hodin v závislosti na poskytovateli DNS a nastavení TTL.", "resourcePortRequired": "Pro neHTTP zdroje je vyžadováno číslo portu", "resourcePortNotAllowed": "Číslo portu by nemělo být nastaveno pro HTTP zdroje", - "billingPricingCalculatorLink": "Cenová kalkulačka", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Souhlasím s", "termsOfService": "podmínky služby", @@ -1414,41 +1412,41 @@ "addNewTarget": "Add New Target", "targetsList": "Seznam cílů", "targetErrorDuplicateTargetFound": "Byl nalezen duplicitní cíl", - "healthCheckHealthy": "Zdravé", - "healthCheckUnhealthy": "Nezdravé", - "healthCheckUnknown": "Neznámý", - "healthCheck": "Kontrola stavu", - "configureHealthCheck": "Konfigurace kontroly stavu", - "configureHealthCheckDescription": "Nastavit sledování zdravotního stavu pro {target}", - "enableHealthChecks": "Povolit kontrolu stavu", - "enableHealthChecksDescription": "Sledujte zdraví tohoto cíle. V případě potřeby můžete sledovat jiný cílový bod, než je cíl.", - "healthScheme": "Způsob", - "healthSelectScheme": "Vybrat metodu", - "healthCheckPath": "Cesta", - "healthHostname": "IP / Hostitel", - "healthPort": "Přístav", - "healthCheckPathDescription": "Cesta ke kontrole zdravotního stavu.", - "healthyIntervalSeconds": "Interval zdraví", - "unhealthyIntervalSeconds": "Nezdravý interval", - "IntervalSeconds": "Interval zdraví", - "timeoutSeconds": "Časový limit", - "timeIsInSeconds": "Čas je v sekundách", - "retryAttempts": "Opakovat pokusy", - "expectedResponseCodes": "Očekávané kódy odezvy", - "expectedResponseCodesDescription": "HTTP kód stavu, který označuje zdravý stav. Ponecháte-li prázdné, 200-300 je považováno za zdravé.", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", + "healthHostname": "IP / Host", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Vlastní záhlaví", - "customHeadersDescription": "Záhlaví oddělená nová řádka: hodnota", - "headersValidationError": "Headers must be in the format: Header-Name: value.", - "saveHealthCheck": "Uložit kontrolu stavu", - "healthCheckSaved": "Kontrola stavu uložena", - "healthCheckSavedDescription": "Nastavení kontroly stavu bylo úspěšně uloženo", - "healthCheckError": "Chyba kontroly stavu", - "healthCheckErrorDescription": "Došlo k chybě při ukládání konfigurace kontroly stavu", - "healthCheckPathRequired": "Je vyžadována cesta kontroly stavu", - "healthCheckMethodRequired": "HTTP metoda je povinná", - "healthCheckIntervalMin": "Interval kontroly musí být nejméně 5 sekund", - "healthCheckTimeoutMin": "Časový limit musí být nejméně 1 sekunda", - "healthCheckRetryMin": "Pokusy opakovat musí být alespoň 1", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP metoda", "selectHttpMethod": "Vyberte HTTP metodu", "domainPickerSubdomainLabel": "Subdoména", @@ -1462,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Zadejte subdoménu pro hledání a výběr z dostupných domén zdarma.", "domainPickerFreeDomains": "Volné domény", "domainPickerSearchForAvailableDomains": "Hledat dostupné domény", - "domainPickerNotWorkSelfHosted": "Poznámka: Poskytnuté domény nejsou momentálně k dispozici pro vlastní hostované instance.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Doména", "resourceEditDomain": "Upravit doménu", "siteName": "Název webu", @@ -1545,72 +1543,72 @@ "autoLoginError": "Automatická chyba přihlášení", "autoLoginErrorNoRedirectUrl": "Od poskytovatele identity nebyla obdržena žádná adresa URL.", "autoLoginErrorGeneratingUrl": "Nepodařilo se vygenerovat ověřovací URL.", - "remoteExitNodeManageRemoteExitNodes": "Spravovat vlastní hostování", - "remoteExitNodeDescription": "Spravujte uzly pro rozšíření připojení k síti", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Hledat uzly...", - "remoteExitNodeAdd": "Přidat uzel", - "remoteExitNodeErrorDelete": "Chyba při odstraňování uzlu", - "remoteExitNodeQuestionRemove": "Jste si jisti, že chcete odstranit uzel {selectedNode} z organizace?", - "remoteExitNodeMessageRemove": "Po odstranění uzel již nebude přístupný.", - "remoteExitNodeMessageConfirm": "Pro potvrzení zadejte název uzlu níže.", - "remoteExitNodeConfirmDelete": "Potvrdit odstranění uzlu", - "remoteExitNodeDelete": "Odstranit uzel", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Vytvořit uzel", - "description": "Vytvořit nový uzel pro rozšíření síťového připojení", - "viewAllButton": "Zobrazit všechny uzly", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Strategie tvorby", - "description": "Vyberte pro manuální konfiguraci vašeho uzlu nebo vygenerujte nové přihlašovací údaje.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Přijmout uzel", - "description": "Zvolte tuto možnost, pokud již máte přihlašovací údaje k uzlu." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Generovat klíče", - "description": "Vyberte tuto možnost, pokud chcete vygenerovat nové klíče pro uzel" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Přijmout existující uzel", - "description": "Zadejte přihlašovací údaje existujícího uzlu, který chcete přijmout", - "nodeIdLabel": "ID uzlu", - "nodeIdDescription": "ID existujícího uzlu, který chcete přijmout", - "secretLabel": "Tajný klíč", - "secretDescription": "Tajný klíč existujícího uzlu", - "submitButton": "Přijmout uzel" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Vygenerovaná pověření", - "description": "Použijte tyto generované přihlašovací údaje pro nastavení vašeho uzlu", - "nodeIdTitle": "ID uzlu", - "secretTitle": "Tajný klíč", - "saveCredentialsTitle": "Přidat přihlašovací údaje do konfigurace", - "saveCredentialsDescription": "Přidejte tyto přihlašovací údaje do vlastního konfiguračního souboru Pangolin uzlu pro dokončení připojení.", - "submitButton": "Vytvořit uzel" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "ID uzlu a tajný klíč jsou vyžadovány při přijetí existujícího uzlu" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Nepodařilo se načíst výchozí hodnoty", - "defaultsNotLoaded": "Výchozí hodnoty nebyly načteny", - "createFailed": "Nepodařilo se vytvořit uzel" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Uzel byl úspěšně vytvořen" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Výběr uzlu", - "remoteExitNodeSelectionDescription": "Vyberte uzel pro směrování provozu přes tuto lokální stránku", - "remoteExitNodeRequired": "Pro lokální stránky musí být vybrán uzel", - "noRemoteExitNodesAvailable": "Nejsou k dispozici žádné uzly", - "noRemoteExitNodesAvailableDescription": "Pro tuto organizaci nejsou k dispozici žádné uzly. Nejprve vytvořte uzel pro použití lokálních stránek.", - "exitNode": "Ukončit uzel", - "country": "L 343, 22.12.2009, s. 1).", - "rulesMatchCountry": "Aktuálně založené na zdrojové IP adrese", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Spravované vlastní hostování", "description": "Spolehlivější a nízko udržovaný Pangolinův server s dalšími zvony a bičkami", @@ -1649,51 +1647,53 @@ }, "internationaldomaindetected": "Zjištěna mezinárodní doména", "willbestoredas": "Bude uloženo jako:", - "roleMappingDescription": "Určete, jak jsou role přiřazeny uživatelům, když se přihlásí, když je povoleno automatické poskytnutí služby.", - "selectRole": "Vyberte roli", - "roleMappingExpression": "Výraz", - "selectRolePlaceholder": "Vyberte roli", - "selectRoleDescription": "Vyberte roli pro přiřazení všem uživatelům od tohoto poskytovatele identity", - "roleMappingExpressionDescription": "Zadejte výraz JMESPath pro získání informací o roli z ID token", - "idpTenantIdRequired": "ID nájemce je povinné", - "invalidValue": "Neplatná hodnota", - "idpTypeLabel": "Typ poskytovatele identity", - "roleMappingExpressionPlaceholder": "např. obsahuje(skupiny, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Konfigurace Google", - "idpGoogleConfigurationDescription": "Konfigurace přihlašovacích údajů Google OAuth2", - "idpGoogleClientIdDescription": "Vaše ID klienta Google OAuth2", - "idpGoogleClientSecretDescription": "Tajný klíč klienta Google OAuth2", - "idpAzureConfiguration": "Nastavení Azure Entra ID", - "idpAzureConfigurationDescription": "Nastavte vaše Azure Entra ID OAuth2", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "vaše-tenant-id", - "idpAzureTenantIdDescription": "Vaše Azure nájemce ID (nalezeno v přehledu Azure Active Directory – Azure)", - "idpAzureClientIdDescription": "Vaše ID registrace aplikace Azure", - "idpAzureClientSecretDescription": "Tajný klíč registrace aplikace Azure", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", + "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", - "idpGoogleConfigurationTitle": "Konfigurace Google", - "idpAzureConfigurationTitle": "Nastavení Azure Entra ID", + "idpAzureAlt": "Azure", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Vaše ID registrace aplikace Azure", - "idpAzureClientSecretDescription2": "Tajný klíč registrace aplikace Azure", - "subnet": "Podsíť", - "subnetDescription": "Podsíť pro konfiguraci sítě této organizace.", - "authPage": "Auth stránka", - "authPageDescription": "Konfigurace autentizační stránky vaší organizace", - "authPageDomain": "Doména ověření stránky", - "noDomainSet": "Není nastavena žádná doména", - "changeDomain": "Změnit doménu", - "selectDomain": "Vybrat doménu", - "restartCertificate": "Restartovat certifikát", - "editAuthPageDomain": "Upravit doménu autentizační stránky", - "setAuthPageDomain": "Nastavit doménu autentické stránky", - "failedToFetchCertificate": "Nepodařilo se načíst certifikát", - "failedToRestartCertificate": "Restartování certifikátu se nezdařilo", - "addDomainToEnableCustomAuthPages": "Přidejte doménu pro povolení vlastních ověřovacích stránek pro vaši organizaci", - "selectDomainForOrgAuthPage": "Vyberte doménu pro ověřovací stránku organizace", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Poskytovatel Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Poskytnutá doména", "domainPickerFreeProvidedDomain": "Zdarma poskytnutá doména", "domainPickerVerified": "Ověřeno", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" nemohl být platný pro {domain}.", "domainPickerSubdomainSanitized": "Upravená subdoména", "domainPickerSubdomainCorrected": "\"{sub}\" bylo opraveno na \"{sanitized}\"", - "orgAuthSignInTitle": "Přihlaste se do vaší organizace", - "orgAuthChooseIdpDescription": "Chcete-li pokračovat, vyberte svého poskytovatele identity", - "orgAuthNoIdpConfigured": "Tato organizace nemá nakonfigurovány žádné poskytovatele identity. Místo toho se můžete přihlásit s vaší Pangolinovou identitou.", - "orgAuthSignInWithPangolin": "Přihlásit se pomocí Pangolinu", - "subscriptionRequiredToUse": "Pro použití této funkce je vyžadováno předplatné.", - "idpDisabled": "Poskytovatelé identit jsou zakázáni.", - "orgAuthPageDisabled": "Ověřovací stránka organizace je zakázána.", - "domainRestartedDescription": "Ověření domény bylo úspěšně restartováno", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Upravit soubor: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Upravit soubor: docker-compose.yml", "emailVerificationRequired": "Je vyžadováno ověření e-mailu. Přihlaste se znovu pomocí {dashboardUrl}/auth/login dokončete tento krok. Poté se vraťte zde.", - "twoFactorSetupRequired": "Je vyžadováno nastavení dvoufaktorového ověřování. Přihlaste se znovu pomocí {dashboardUrl}/autentizace/přihlášení dokončí tento krok. Poté se vraťte zde." + "twoFactorSetupRequired": "Je vyžadováno nastavení dvoufaktorového ověřování. Přihlaste se znovu pomocí {dashboardUrl}/autentizace/přihlášení dokončí tento krok. Poté se vraťte zde.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From ccff0592ca392dba970d6cefd6686f4bd35adfec Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:17 -0700 Subject: [PATCH 04/28] New translations en-us.json (German) --- messages/de-DE.json | 369 ++++++++++++++++++++++---------------------- 1 file changed, 187 insertions(+), 182 deletions(-) diff --git a/messages/de-DE.json b/messages/de-DE.json index f58a0b86..430a7949 100644 --- a/messages/de-DE.json +++ b/messages/de-DE.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Einfachster Weg, einen Zugriffspunkt zu deinem Netzwerk zu erstellen. Keine zusätzliche Einrichtung erforderlich.", "siteWg": "Einfacher WireGuard Tunnel", "siteWgDescription": "Verwende jeden WireGuard-Client, um einen Tunnel einzurichten. Manuelles NAT-Setup erforderlich.", - "siteWgDescriptionSaas": "Verwenden Sie jeden WireGuard-Client, um einen Tunnel zu erstellen. Manuelles NAT-Setup erforderlich. FUNKTIONIERT NUR BEI SELBSTGEHOSTETEN KNOTEN", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Nur lokale Ressourcen. Kein Tunneling.", - "siteLocalDescriptionSaas": "Nur lokale Ressourcen. Keine Tunneldurchführung. FUNKTIONIERT NUR BEI SELBSTGEHOSTETEN KNOTEN", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Alle Standorte anzeigen", "siteTunnelDescription": "Lege fest, wie du dich mit deinem Standort verbinden möchtest", "siteNewtCredentials": "Neue Newt Zugangsdaten", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS-Ressource", "resourceHTTPDescription": "Proxy-Anfragen an Ihre App über HTTPS unter Verwendung einer Subdomain oder einer Basis-Domain.", "resourceRaw": "Rohe TCP/UDP Ressource", - "resourceRawDescription": "Proxy-Anfragen an Ihre App über TCP/UDP mit einer Portnummer.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Ressource erstellen", "resourceCreateDescription": "Folgen Sie den Schritten unten, um eine neue Ressource zu erstellen", "resourceSeeAll": "Alle Ressourcen anzeigen", @@ -168,9 +168,9 @@ "siteSelect": "Standort auswählen", "siteSearch": "Standorte durchsuchen", "siteNotFound": "Keinen Standort gefunden.", - "selectCountry": "Land auswählen", - "searchCountries": "Länder suchen...", - "noCountryFound": "Kein Land gefunden.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Dieser Standort wird die Verbindung zum Ziel herstellen.", "resourceType": "Ressourcentyp", "resourceTypeDescription": "Legen Sie fest, wie Sie auf Ihre Ressource zugreifen möchten", @@ -1140,8 +1140,8 @@ "sidebarAllUsers": "Alle Benutzer", "sidebarIdentityProviders": "Identitätsanbieter", "sidebarLicense": "Lizenz", - "sidebarClients": "Kunden (Beta)", - "sidebarDomains": "Domänen", + "sidebarClients": "Clients (Beta)", + "sidebarDomains": "Domains", "enableDockerSocket": "Docker Blaupause aktivieren", "enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blaupausenbeschriftungen. Der Socket-Pfad muss neu angegeben werden.", "enableDockerSocketLink": "Mehr erfahren", @@ -1189,7 +1189,7 @@ "certificateStatus": "Zertifikatsstatus", "loading": "Laden", "restart": "Neustart", - "domains": "Domänen", + "domains": "Domains", "domainsDescription": "Domains für Ihre Organisation verwalten", "domainsSearch": "Domains durchsuchen...", "domainAdd": "Domain hinzufügen", @@ -1202,7 +1202,7 @@ "domainMessageConfirm": "Um zu bestätigen, geben Sie bitte den Domainnamen unten ein.", "domainConfirmDelete": "Domain-Löschung bestätigen", "domainDelete": "Domain löschen", - "domain": "Domäne", + "domain": "Domain", "selectDomainTypeNsName": "Domain-Delegation (NS)", "selectDomainTypeNsDescription": "Diese Domain und alle ihre Subdomains. Verwenden Sie dies, wenn Sie eine gesamte Domainzone kontrollieren möchten.", "selectDomainTypeCnameName": "Einzelne Domain (CNAME)", @@ -1242,7 +1242,7 @@ "sidebarExpand": "Erweitern", "newtUpdateAvailable": "Update verfügbar", "newtUpdateAvailableInfo": "Eine neue Version von Newt ist verfügbar. Bitte aktualisieren Sie auf die neueste Version für das beste Erlebnis.", - "domainPickerEnterDomain": "Domäne", + "domainPickerEnterDomain": "Domain", "domainPickerPlaceholder": "myapp.example.com", "domainPickerDescription": "Geben Sie die vollständige Domäne der Ressource ein, um verfügbare Optionen zu sehen.", "domainPickerDescriptionSaas": "Geben Sie eine vollständige Domäne, Subdomäne oder einfach einen Namen ein, um verfügbare Optionen zu sehen", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Subdomain: {subdomain}", "domainPickerNamespace": "Namespace: {namespace}", "domainPickerShowMore": "Mehr anzeigen", - "regionSelectorTitle": "Region auswählen", - "regionSelectorInfo": "Das Auswählen einer Region hilft uns, eine bessere Leistung für Ihren Standort bereitzustellen. Sie müssen sich nicht in derselben Region wie Ihr Server befinden.", - "regionSelectorPlaceholder": "Wähle eine Region", - "regionSelectorComingSoon": "Kommt bald", - "billingLoadingSubscription": "Abonnement wird geladen...", - "billingFreeTier": "Kostenlose Stufe", - "billingWarningOverLimit": "Warnung: Sie haben ein oder mehrere Nutzungslimits überschritten. Ihre Webseiten werden nicht verbunden, bis Sie Ihr Abonnement ändern oder Ihren Verbrauch anpassen.", - "billingUsageLimitsOverview": "Übersicht über Nutzungsgrenzen", - "billingMonitorUsage": "Überwachen Sie Ihren Verbrauch im Vergleich zu konfigurierten Grenzwerten. Wenn Sie eine Erhöhung der Limits benötigen, kontaktieren Sie uns bitte support@fossorial.io.", - "billingDataUsage": "Datenverbrauch", - "billingOnlineTime": "Online-Zeit der Seite", - "billingUsers": "Aktive Benutzer", - "billingDomains": "Aktive Domänen", - "billingRemoteExitNodes": "Aktive selbstgehostete Nodes", - "billingNoLimitConfigured": "Kein Limit konfiguriert", - "billingEstimatedPeriod": "Geschätzter Abrechnungszeitraum", - "billingIncludedUsage": "Inklusive Nutzung", - "billingIncludedUsageDescription": "Nutzung, die in Ihrem aktuellen Abonnementplan enthalten ist", - "billingFreeTierIncludedUsage": "Nutzungskontingente der kostenlosen Stufe", - "billingIncluded": "inbegriffen", - "billingEstimatedTotal": "Geschätzte Gesamtsumme:", - "billingNotes": "Notizen", - "billingEstimateNote": "Dies ist eine Schätzung basierend auf Ihrem aktuellen Verbrauch.", - "billingActualChargesMayVary": "Tatsächliche Kosten können variieren.", - "billingBilledAtEnd": "Sie werden am Ende des Abrechnungszeitraums in Rechnung gestellt.", - "billingModifySubscription": "Abonnement ändern", - "billingStartSubscription": "Abonnement starten", - "billingRecurringCharge": "Wiederkehrende Kosten", - "billingManageSubscriptionSettings": "Verwalten Sie Ihre Abonnement-Einstellungen und Präferenzen", - "billingNoActiveSubscription": "Sie haben kein aktives Abonnement. Starten Sie Ihr Abonnement, um Nutzungslimits zu erhöhen.", - "billingFailedToLoadSubscription": "Fehler beim Laden des Abonnements", - "billingFailedToLoadUsage": "Fehler beim Laden der Nutzung", - "billingFailedToGetCheckoutUrl": "Fehler beim Abrufen der Checkout-URL", - "billingPleaseTryAgainLater": "Bitte versuchen Sie es später noch einmal.", - "billingCheckoutError": "Checkout-Fehler", - "billingFailedToGetPortalUrl": "Fehler beim Abrufen der Portal-URL", - "billingPortalError": "Portalfehler", - "billingDataUsageInfo": "Wenn Sie mit der Cloud verbunden sind, werden alle Daten über Ihre sicheren Tunnel belastet. Dies schließt eingehenden und ausgehenden Datenverkehr über alle Ihre Websites ein. Wenn Sie Ihr Limit erreichen, werden Ihre Seiten die Verbindung trennen, bis Sie Ihr Paket upgraden oder die Nutzung verringern. Daten werden nicht belastet, wenn Sie Knoten verwenden.", - "billingOnlineTimeInfo": "Sie werden belastet, abhängig davon, wie lange Ihre Seiten mit der Cloud verbunden bleiben. Zum Beispiel 44.640 Minuten entspricht einer Site, die 24 Stunden am Tag des Monats läuft. Wenn Sie Ihr Limit erreichen, werden Ihre Seiten die Verbindung trennen, bis Sie Ihr Paket upgraden oder die Nutzung verringern. Die Zeit wird nicht belastet, wenn Sie Knoten verwenden.", - "billingUsersInfo": "Ihnen wird für jeden Benutzer in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich basierend auf der Anzahl der aktiven Benutzerkonten in Ihrer Organisation.", - "billingDomainInfo": "Ihnen wird für jede Domäne in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich basierend auf der Anzahl der aktiven Domänenkonten in Ihrer Organisation.", - "billingRemoteExitNodesInfo": "Ihnen wird für jeden verwalteten Node in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich basierend auf der Anzahl der aktiven verwalteten Nodes in Ihrer Organisation.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Domain nicht gefunden", "domainNotFoundDescription": "Diese Ressource ist deaktiviert, weil die Domain nicht mehr in unserem System existiert. Bitte setzen Sie eine neue Domain für diese Ressource.", "failed": "Fehlgeschlagen", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Es kann einige Zeit dauern, bis DNS-Änderungen im Internet verbreitet werden. Dies kann je nach Ihrem DNS-Provider und den TTL-Einstellungen von einigen Minuten bis zu 48 Stunden dauern.", "resourcePortRequired": "Portnummer ist für nicht-HTTP-Ressourcen erforderlich", "resourcePortNotAllowed": "Portnummer sollte für HTTP-Ressourcen nicht gesetzt werden", - "billingPricingCalculatorLink": "Preisrechner", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Ich stimme den", "termsOfService": "Nutzungsbedingungen zu", @@ -1371,7 +1371,7 @@ "privacyPolicy": "Datenschutzrichtlinie" }, "siteRequired": "Standort ist erforderlich.", - "olmTunnel": "Olm-Tunnel", + "olmTunnel": "Olm Tunnel", "olmTunnelDescription": "Nutzen Sie Olm für die Kundenverbindung", "errorCreatingClient": "Fehler beim Erstellen des Clients", "clientDefaultsNotFound": "Kundenvorgaben nicht gefunden", @@ -1412,41 +1412,41 @@ "addNewTarget": "Neues Ziel hinzufügen", "targetsList": "Ziel-Liste", "targetErrorDuplicateTargetFound": "Doppeltes Ziel gefunden", - "healthCheckHealthy": "Gesund", - "healthCheckUnhealthy": "Ungesund", - "healthCheckUnknown": "Unbekannt", - "healthCheck": "Gesundheits-Check", - "configureHealthCheck": "Gesundheits-Check konfigurieren", - "configureHealthCheckDescription": "Richten Sie die Gesundheitsüberwachung für {target} ein", - "enableHealthChecks": "Gesundheits-Checks aktivieren", - "enableHealthChecksDescription": "Überwachen Sie die Gesundheit dieses Ziels. Bei Bedarf können Sie einen anderen Endpunkt als das Ziel überwachen.", - "healthScheme": "Methode", - "healthSelectScheme": "Methode auswählen", - "healthCheckPath": "Pfad", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", "healthHostname": "IP / Host", "healthPort": "Port", - "healthCheckPathDescription": "Der Pfad zum Überprüfen des Gesundheitszustands.", - "healthyIntervalSeconds": "Gesunder Intervall", - "unhealthyIntervalSeconds": "Ungesunder Intervall", - "IntervalSeconds": "Gesunder Intervall", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Zeit ist in Sekunden", - "retryAttempts": "Wiederholungsversuche", - "expectedResponseCodes": "Erwartete Antwortcodes", - "expectedResponseCodesDescription": "HTTP-Statuscode, der einen gesunden Zustand anzeigt. Wenn leer gelassen, wird 200-300 als gesund angesehen.", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Eigene Kopfzeilen", - "customHeadersDescription": "Header neue Zeile getrennt: Header-Name: Wert", - "headersValidationError": "Header müssen im Format Header-Name: Wert sein.", - "saveHealthCheck": "Gesundheits-Check speichern", - "healthCheckSaved": "Gesundheits-Check gespeichert", - "healthCheckSavedDescription": "Die Konfiguration des Gesundheits-Checks wurde erfolgreich gespeichert", - "healthCheckError": "Fehler beim Gesundheits-Check", - "healthCheckErrorDescription": "Beim Speichern der Gesundheits-Check-Konfiguration ist ein Fehler aufgetreten", - "healthCheckPathRequired": "Gesundheits-Check-Pfad ist erforderlich", - "healthCheckMethodRequired": "HTTP-Methode ist erforderlich", - "healthCheckIntervalMin": "Prüfintervall muss mindestens 5 Sekunden betragen", - "healthCheckTimeoutMin": "Timeout muss mindestens 1 Sekunde betragen", - "healthCheckRetryMin": "Wiederholungsversuche müssen mindestens 1 betragen", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP-Methode", "selectHttpMethod": "HTTP-Methode auswählen", "domainPickerSubdomainLabel": "Subdomain", @@ -1460,8 +1460,8 @@ "domainPickerEnterSubdomainToSearch": "Geben Sie eine Subdomain ein, um verfügbare freie Domains zu suchen und auszuwählen.", "domainPickerFreeDomains": "Freie Domains", "domainPickerSearchForAvailableDomains": "Verfügbare Domains suchen", - "domainPickerNotWorkSelfHosted": "Hinweis: Kostenlose bereitgestellte Domains sind derzeit nicht für selbstgehostete Instanzen verfügbar.", - "resourceDomain": "Domäne", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "resourceDomain": "Domain", "resourceEditDomain": "Domain bearbeiten", "siteName": "Site-Name", "proxyPort": "Port", @@ -1543,72 +1543,72 @@ "autoLoginError": "Fehler bei der automatischen Anmeldung", "autoLoginErrorNoRedirectUrl": "Keine Weiterleitungs-URL vom Identitätsanbieter erhalten.", "autoLoginErrorGeneratingUrl": "Fehler beim Generieren der Authentifizierungs-URL.", - "remoteExitNodeManageRemoteExitNodes": "Selbst-Hosted verwalten", - "remoteExitNodeDescription": "Knoten verwalten, um die Netzwerkverbindung zu erweitern", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Knoten suchen...", - "remoteExitNodeAdd": "Knoten hinzufügen", - "remoteExitNodeErrorDelete": "Fehler beim Löschen des Knotens", - "remoteExitNodeQuestionRemove": "Sind Sie sicher, dass Sie den Knoten {selectedNode} aus der Organisation entfernen möchten?", - "remoteExitNodeMessageRemove": "Einmal entfernt, wird der Knoten nicht mehr zugänglich sein.", - "remoteExitNodeMessageConfirm": "Um zu bestätigen, geben Sie bitte den Namen des Knotens unten ein.", - "remoteExitNodeConfirmDelete": "Löschknoten bestätigen", - "remoteExitNodeDelete": "Knoten löschen", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Knoten erstellen", - "description": "Erstellen Sie einen neuen Knoten, um Ihre Netzwerkverbindung zu erweitern", - "viewAllButton": "Alle Knoten anzeigen", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Erstellungsstrategie", - "description": "Wählen Sie diese Option, um Ihren Knoten manuell zu konfigurieren oder neue Zugangsdaten zu generieren.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Node übernehmen", - "description": "Wählen Sie dies, wenn Sie bereits die Anmeldedaten für den Knoten haben." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Schlüssel generieren", - "description": "Wählen Sie dies, wenn Sie neue Schlüssel für den Knoten generieren möchten" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Vorhandenen Node übernehmen", - "description": "Geben Sie die Zugangsdaten des vorhandenen Knotens ein, den Sie übernehmen möchten", - "nodeIdLabel": "Knoten-ID", - "nodeIdDescription": "Die ID des vorhandenen Knotens, den Sie übernehmen möchten", - "secretLabel": "Geheimnis", - "secretDescription": "Der geheime Schlüssel des vorhandenen Knotens", - "submitButton": "Node übernehmen" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Generierte Anmeldedaten", - "description": "Verwenden Sie diese generierten Anmeldeinformationen, um Ihren Knoten zu konfigurieren", - "nodeIdTitle": "Knoten-ID", - "secretTitle": "Geheimnis", - "saveCredentialsTitle": "Anmeldedaten zur Konfiguration hinzufügen", - "saveCredentialsDescription": "Fügen Sie diese Anmeldedaten zu Ihrer selbst-gehosteten Pangolin Node-Konfigurationsdatei hinzu, um die Verbindung abzuschließen.", - "submitButton": "Knoten erstellen" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "Knoten-ID und Geheimnis sind erforderlich, wenn ein existierender Knoten angenommen wird" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Fehler beim Laden der Standardeinstellungen", - "defaultsNotLoaded": "Standardeinstellungen nicht geladen", - "createFailed": "Knoten konnte nicht erstellt werden" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Knoten erfolgreich erstellt" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Knotenauswahl", - "remoteExitNodeSelectionDescription": "Wählen Sie einen Knoten aus, durch den Traffic für diese lokale Seite geleitet werden soll", - "remoteExitNodeRequired": "Ein Knoten muss für lokale Seiten ausgewählt sein", - "noRemoteExitNodesAvailable": "Keine Knoten verfügbar", - "noRemoteExitNodesAvailableDescription": "Für diese Organisation sind keine Knoten verfügbar. Erstellen Sie zuerst einen Knoten, um lokale Sites zu verwenden.", - "exitNode": "Exit-Node", - "country": "Land", - "rulesMatchCountry": "Derzeit basierend auf der Quell-IP", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Verwaltetes Selbsthosted", "description": "Zuverlässiger und wartungsarmer Pangolin Server mit zusätzlichen Glocken und Pfeifen", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Internationale Domain erkannt", "willbestoredas": "Wird gespeichert als:", - "roleMappingDescription": "Legen Sie fest, wie den Benutzern Rollen zugewiesen werden, wenn sie sich anmelden, wenn Auto Provision aktiviert ist.", - "selectRole": "Wählen Sie eine Rolle", - "roleMappingExpression": "Ausdruck", - "selectRolePlaceholder": "Rolle auswählen", - "selectRoleDescription": "Wählen Sie eine Rolle aus, die allen Benutzern von diesem Identitätsprovider zugewiesen werden soll", - "roleMappingExpressionDescription": "Geben Sie einen JMESPath-Ausdruck ein, um Rolleninformationen aus dem ID-Token zu extrahieren", - "idpTenantIdRequired": "Mandant ID ist erforderlich", - "invalidValue": "Ungültiger Wert", - "idpTypeLabel": "Identitätsanbietertyp", - "roleMappingExpressionPlaceholder": "z. B. enthalten(Gruppen, 'admin') && 'Admin' || 'Mitglied'", - "idpGoogleConfiguration": "Google-Konfiguration", - "idpGoogleConfigurationDescription": "Konfigurieren Sie Ihre Google OAuth2 Zugangsdaten", - "idpGoogleClientIdDescription": "Ihre Google OAuth2 Client-ID", - "idpGoogleClientSecretDescription": "Ihr Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Konfiguration", - "idpAzureConfigurationDescription": "Konfigurieren Sie Ihre Azure Entra ID OAuth2 Zugangsdaten", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "deine Mandant-ID", - "idpAzureTenantIdDescription": "Ihre Azure Mieter-ID (gefunden in Azure Active Directory Übersicht)", - "idpAzureClientIdDescription": "Ihre Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Ihr Azure App Registration Client Secret", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google-Konfiguration", - "idpAzureConfigurationTitle": "Azure Entra ID Konfiguration", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Ihre Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Ihr Azure App Registration Client Secret", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC Provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnetz", - "subnetDescription": "Das Subnetz für die Netzwerkkonfiguration dieser Organisation.", - "authPage": "Auth Seite", - "authPageDescription": "Konfigurieren Sie die Auth-Seite für Ihre Organisation", - "authPageDomain": "Domain der Auth Seite", - "noDomainSet": "Keine Domäne gesetzt", - "changeDomain": "Domain ändern", - "selectDomain": "Domain auswählen", - "restartCertificate": "Zertifikat neu starten", - "editAuthPageDomain": "Auth Page Domain bearbeiten", - "setAuthPageDomain": "Domain der Auth Seite festlegen", - "failedToFetchCertificate": "Zertifikat konnte nicht abgerufen werden", - "failedToRestartCertificate": "Zertifikat konnte nicht neu gestartet werden", - "addDomainToEnableCustomAuthPages": "Fügen Sie eine Domain hinzu, um benutzerdefinierte Authentifizierungsseiten für Ihre Organisation zu aktivieren", - "selectDomainForOrgAuthPage": "Wählen Sie eine Domain für die Authentifizierungsseite der Organisation", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Angegebene Domain", "domainPickerFreeProvidedDomain": "Kostenlose Domain", "domainPickerVerified": "Verifiziert", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" konnte nicht für {domain} gültig gemacht werden.", "domainPickerSubdomainSanitized": "Subdomain bereinigt", "domainPickerSubdomainCorrected": "\"{sub}\" wurde korrigiert zu \"{sanitized}\"", - "orgAuthSignInTitle": "Bei Ihrer Organisation anmelden", - "orgAuthChooseIdpDescription": "Wähle deinen Identitätsanbieter um fortzufahren", - "orgAuthNoIdpConfigured": "Diese Organisation hat keine Identitätsanbieter konfiguriert. Sie können sich stattdessen mit Ihrer Pangolin-Identität anmelden.", - "orgAuthSignInWithPangolin": "Mit Pangolin anmelden", - "subscriptionRequiredToUse": "Um diese Funktion nutzen zu können, ist ein Abonnement erforderlich.", - "idpDisabled": "Identitätsanbieter sind deaktiviert.", - "orgAuthPageDisabled": "Organisations-Authentifizierungsseite ist deaktiviert.", - "domainRestartedDescription": "Domain-Verifizierung erfolgreich neu gestartet", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Datei bearbeiten: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Datei bearbeiten: docker-compose.yml", "emailVerificationRequired": "E-Mail-Verifizierung ist erforderlich. Bitte melden Sie sich erneut über {dashboardUrl}/auth/login an. Kommen Sie dann wieder hierher.", - "twoFactorSetupRequired": "Die Zwei-Faktor-Authentifizierung ist erforderlich. Bitte melden Sie sich erneut über {dashboardUrl}/auth/login an. Dann kommen Sie hierher zurück." + "twoFactorSetupRequired": "Die Zwei-Faktor-Authentifizierung ist erforderlich. Bitte melden Sie sich erneut über {dashboardUrl}/auth/login an. Dann kommen Sie hierher zurück.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From 024eb2b15793f151ce52b9d21bbdc1406c5a294d Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:18 -0700 Subject: [PATCH 05/28] New translations en-us.json (Italian) --- messages/it-IT.json | 365 ++++++++++++++++++++++---------------------- 1 file changed, 185 insertions(+), 180 deletions(-) diff --git a/messages/it-IT.json b/messages/it-IT.json index 10286f7d..93fa58d0 100644 --- a/messages/it-IT.json +++ b/messages/it-IT.json @@ -36,8 +36,8 @@ "viewSettings": "Visualizza impostazioni", "delete": "Elimina", "name": "Nome", - "online": "In linea", - "offline": "Non in linea", + "online": "Online", + "offline": "Offline", "site": "Sito", "dataIn": "Dati In", "dataOut": "Dati Fuori", @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Modo più semplice per creare un entrypoint nella rete. Nessuna configurazione aggiuntiva.", "siteWg": "WireGuard Base", "siteWgDescription": "Usa qualsiasi client WireGuard per stabilire un tunnel. Impostazione NAT manuale richiesta.", - "siteWgDescriptionSaas": "Usa qualsiasi client WireGuard per stabilire un tunnel. Impostazione NAT manuale richiesta. FUNZIONA SOLO SU NODI AUTO-OSPITATI", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Solo risorse locali. Nessun tunneling.", - "siteLocalDescriptionSaas": "Solo risorse locali. Nessun tunneling. FUNZIONA SOLO SU NODI AUTO-OSPITATI", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Vedi Tutti I Siti", "siteTunnelDescription": "Determina come vuoi connetterti al tuo sito", "siteNewtCredentials": "Credenziali Newt", @@ -159,7 +159,7 @@ "resourceHTTP": "Risorsa HTTPS", "resourceHTTPDescription": "Richieste proxy alla tua app tramite HTTPS utilizzando un sottodominio o un dominio di base.", "resourceRaw": "Risorsa Raw TCP/UDP", - "resourceRawDescription": "Richieste proxy alla tua app tramite TCP/UDP utilizzando un numero di porta.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Crea Risorsa", "resourceCreateDescription": "Segui i passaggi seguenti per creare una nuova risorsa", "resourceSeeAll": "Vedi Tutte Le Risorse", @@ -168,9 +168,9 @@ "siteSelect": "Seleziona sito", "siteSearch": "Cerca sito", "siteNotFound": "Nessun sito trovato.", - "selectCountry": "Seleziona paese", - "searchCountries": "Cerca paesi...", - "noCountryFound": "Nessun paese trovato.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Questo sito fornirà connettività all'obiettivo.", "resourceType": "Tipo Di Risorsa", "resourceTypeDescription": "Determina come vuoi accedere alla tua risorsa", @@ -1221,7 +1221,7 @@ "orgBillingDescription": "Gestisci le tue informazioni di fatturazione e abbonamenti", "github": "GitHub", "pangolinHosted": "Pangolin Hosted", - "fossorial": "Fossoriale", + "fossorial": "Fossorial", "completeAccountSetup": "Completa la Configurazione dell'Account", "completeAccountSetupDescription": "Imposta la tua password per iniziare", "accountSetupSent": "Invieremo un codice di configurazione dell'account a questo indirizzo email.", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Sottodominio: {subdomain}", "domainPickerNamespace": "Namespace: {namespace}", "domainPickerShowMore": "Mostra Altro", - "regionSelectorTitle": "Seleziona regione", - "regionSelectorInfo": "Selezionare una regione ci aiuta a fornire migliori performance per la tua posizione. Non devi necessariamente essere nella stessa regione del tuo server.", - "regionSelectorPlaceholder": "Scegli una regione", - "regionSelectorComingSoon": "Prossimamente", - "billingLoadingSubscription": "Caricamento abbonamento...", - "billingFreeTier": "Piano Gratuito", - "billingWarningOverLimit": "Avviso: Hai superato uno o più limiti di utilizzo. I tuoi siti non si connetteranno finché non modifichi il tuo abbonamento o non adegui il tuo utilizzo.", - "billingUsageLimitsOverview": "Panoramica dei Limiti di Utilizzo", - "billingMonitorUsage": "Monitora il tuo utilizzo rispetto ai limiti configurati. Se hai bisogno di aumentare i limiti, contattaci all'indirizzo support@fossorial.io.", - "billingDataUsage": "Utilizzo dei Dati", - "billingOnlineTime": "Tempo Online del Sito", - "billingUsers": "Utenti Attivi", - "billingDomains": "Domini Attivi", - "billingRemoteExitNodes": "Nodi Self-hosted Attivi", - "billingNoLimitConfigured": "Nessun limite configurato", - "billingEstimatedPeriod": "Periodo di Fatturazione Stimato", - "billingIncludedUsage": "Utilizzo Incluso", - "billingIncludedUsageDescription": "Utilizzo incluso nel tuo piano di abbonamento corrente", - "billingFreeTierIncludedUsage": "Elenchi di utilizzi inclusi nel piano gratuito", - "billingIncluded": "incluso", - "billingEstimatedTotal": "Totale Stimato:", - "billingNotes": "Note", - "billingEstimateNote": "Questa è una stima basata sul tuo utilizzo attuale.", - "billingActualChargesMayVary": "I costi effettivi possono variare.", - "billingBilledAtEnd": "Sarai fatturato alla fine del periodo di fatturazione.", - "billingModifySubscription": "Modifica Abbonamento", - "billingStartSubscription": "Inizia Abbonamento", - "billingRecurringCharge": "Addebito Ricorrente", - "billingManageSubscriptionSettings": "Gestisci impostazioni e preferenze dell'abbonamento", - "billingNoActiveSubscription": "Non hai un abbonamento attivo. Avvia il tuo abbonamento per aumentare i limiti di utilizzo.", - "billingFailedToLoadSubscription": "Caricamento abbonamento fallito", - "billingFailedToLoadUsage": "Caricamento utilizzo fallito", - "billingFailedToGetCheckoutUrl": "Errore durante l'ottenimento dell'URL di pagamento", - "billingPleaseTryAgainLater": "Per favore, riprova più tardi.", - "billingCheckoutError": "Errore di Pagamento", - "billingFailedToGetPortalUrl": "Errore durante l'ottenimento dell'URL del portale", - "billingPortalError": "Errore del Portale", - "billingDataUsageInfo": "Hai addebitato tutti i dati trasferiti attraverso i tunnel sicuri quando sei connesso al cloud. Questo include sia il traffico in entrata e in uscita attraverso tutti i siti. Quando si raggiunge il limite, i siti si disconnetteranno fino a quando non si aggiorna il piano o si riduce l'utilizzo. I dati non vengono caricati quando si utilizzano nodi.", - "billingOnlineTimeInfo": "Ti viene addebitato in base al tempo in cui i tuoi siti rimangono connessi al cloud. Ad esempio, 44,640 minuti è uguale a un sito in esecuzione 24/7 per un mese intero. Quando raggiungi il tuo limite, i tuoi siti si disconnetteranno fino a quando non aggiorni il tuo piano o riduci l'utilizzo. Il tempo non viene caricato quando si usano i nodi.", - "billingUsersInfo": "Sei addebitato per ogni utente nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di account utente attivi nella tua organizzazione.", - "billingDomainInfo": "Sei addebitato per ogni dominio nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di account dominio attivi nella tua organizzazione.", - "billingRemoteExitNodesInfo": "Sei addebitato per ogni nodo gestito nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di nodi gestiti attivi nella tua organizzazione.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Domini Non Trovati", "domainNotFoundDescription": "Questa risorsa è disabilitata perché il dominio non esiste più nel nostro sistema. Si prega di impostare un nuovo dominio per questa risorsa.", "failed": "Fallito", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Le modifiche DNS possono richiedere del tempo per propagarsi in Internet. Questo può richiedere da pochi minuti a 48 ore, a seconda del tuo provider DNS e delle impostazioni TTL.", "resourcePortRequired": "Numero di porta richiesto per risorse non-HTTP", "resourcePortNotAllowed": "Il numero di porta non deve essere impostato per risorse HTTP", - "billingPricingCalculatorLink": "Calcolatore di Prezzi", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Accetto i", "termsOfService": "termini di servizio", @@ -1371,7 +1371,7 @@ "privacyPolicy": "informativa sulla privacy" }, "siteRequired": "Il sito è richiesto.", - "olmTunnel": "Tunnel Olm", + "olmTunnel": "Olm Tunnel", "olmTunnelDescription": "Usa Olm per la connettività client", "errorCreatingClient": "Errore nella creazione del client", "clientDefaultsNotFound": "Impostazioni predefinite del client non trovate", @@ -1412,41 +1412,41 @@ "addNewTarget": "Aggiungi Nuovo Target", "targetsList": "Elenco dei Target", "targetErrorDuplicateTargetFound": "Target duplicato trovato", - "healthCheckHealthy": "Sano", - "healthCheckUnhealthy": "Non Sano", - "healthCheckUnknown": "Sconosciuto", - "healthCheck": "Controllo Salute", - "configureHealthCheck": "Configura Controllo Salute", - "configureHealthCheckDescription": "Imposta il monitoraggio della salute per {target}", - "enableHealthChecks": "Abilita i Controlli di Salute", - "enableHealthChecksDescription": "Monitorare lo stato di salute di questo obiettivo. Se necessario, è possibile monitorare un endpoint diverso da quello del bersaglio.", - "healthScheme": "Metodo", - "healthSelectScheme": "Seleziona Metodo", - "healthCheckPath": "Percorso", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", "healthHostname": "IP / Host", - "healthPort": "Porta", - "healthCheckPathDescription": "Percorso per verificare lo stato di salute.", - "healthyIntervalSeconds": "Intervallo Sano", - "unhealthyIntervalSeconds": "Intervallo Non Sano", - "IntervalSeconds": "Intervallo Sano", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Il tempo è in secondi", - "retryAttempts": "Tentativi di Riprova", - "expectedResponseCodes": "Codici di Risposta Attesi", - "expectedResponseCodesDescription": "Codice di stato HTTP che indica lo stato di salute. Se lasciato vuoto, considerato sano è compreso tra 200-300.", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Intestazioni Personalizzate", - "customHeadersDescription": "Intestazioni nuova riga separate: Intestazione-Nome: valore", - "headersValidationError": "Le intestazioni devono essere nel formato: Intestazione-Nome: valore.", - "saveHealthCheck": "Salva Controllo Salute", - "healthCheckSaved": "Controllo Salute Salvato", - "healthCheckSavedDescription": "La configurazione del controllo salute è stata salvata con successo", - "healthCheckError": "Errore Controllo Salute", - "healthCheckErrorDescription": "Si è verificato un errore durante il salvataggio della configurazione del controllo salute.", - "healthCheckPathRequired": "Il percorso del controllo salute è richiesto", - "healthCheckMethodRequired": "Metodo HTTP richiesto", - "healthCheckIntervalMin": "L'intervallo del controllo deve essere almeno di 5 secondi", - "healthCheckTimeoutMin": "Il timeout deve essere di almeno 1 secondo", - "healthCheckRetryMin": "I tentativi di riprova devono essere almeno 1", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "Metodo HTTP", "selectHttpMethod": "Seleziona metodo HTTP", "domainPickerSubdomainLabel": "Sottodominio", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Inserisci un sottodominio per cercare e selezionare dai domini gratuiti disponibili.", "domainPickerFreeDomains": "Domini Gratuiti", "domainPickerSearchForAvailableDomains": "Cerca domini disponibili", - "domainPickerNotWorkSelfHosted": "Nota: I domini forniti gratuitamente non sono disponibili per le istanze self-hosted al momento.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Dominio", "resourceEditDomain": "Modifica Dominio", "siteName": "Nome del Sito", @@ -1543,72 +1543,72 @@ "autoLoginError": "Errore di Accesso Automatico", "autoLoginErrorNoRedirectUrl": "Nessun URL di reindirizzamento ricevuto dal provider di identità.", "autoLoginErrorGeneratingUrl": "Impossibile generare l'URL di autenticazione.", - "remoteExitNodeManageRemoteExitNodes": "Gestisci Self-Hosted", - "remoteExitNodeDescription": "Gestisci i nodi per estendere la connettività di rete", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Cerca nodi...", - "remoteExitNodeAdd": "Aggiungi Nodo", - "remoteExitNodeErrorDelete": "Errore nell'eliminare il nodo", - "remoteExitNodeQuestionRemove": "Sei sicuro di voler rimuovere il nodo {selectedNode} dall'organizzazione?", - "remoteExitNodeMessageRemove": "Una volta rimosso, il nodo non sarà più accessibile.", - "remoteExitNodeMessageConfirm": "Per confermare, digita il nome del nodo qui sotto.", - "remoteExitNodeConfirmDelete": "Conferma Eliminazione Nodo", - "remoteExitNodeDelete": "Elimina Nodo", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Crea Nodo", - "description": "Crea un nuovo nodo per estendere la connettività di rete", - "viewAllButton": "Visualizza Tutti I Nodi", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Strategia di Creazione", - "description": "Scegli questa opzione per configurare manualmente il nodo o generare nuove credenziali.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Adotta Nodo", - "description": "Scegli questo se hai già le credenziali per il nodo." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Genera Chiavi", - "description": "Scegli questa opzione se vuoi generare nuove chiavi per il nodo" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Adotta Nodo Esistente", - "description": "Inserisci le credenziali del nodo esistente che vuoi adottare", - "nodeIdLabel": "ID Nodo", - "nodeIdDescription": "L'ID del nodo esistente che si desidera adottare", - "secretLabel": "Segreto", - "secretDescription": "La chiave segreta del nodo esistente", - "submitButton": "Adotta Nodo" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Credenziali Generate", - "description": "Usa queste credenziali generate per configurare il nodo", - "nodeIdTitle": "ID Nodo", - "secretTitle": "Segreto", - "saveCredentialsTitle": "Aggiungi Credenziali alla Configurazione", - "saveCredentialsDescription": "Aggiungi queste credenziali al tuo file di configurazione del nodo self-hosted Pangolin per completare la connessione.", - "submitButton": "Crea Nodo" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "L'ID del nodo e il segreto sono necessari quando si adotta un nodo esistente" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Caricamento impostazioni predefinite fallito", - "defaultsNotLoaded": "Impostazioni predefinite non caricate", - "createFailed": "Impossibile creare il nodo" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Nodo creato con successo" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Selezione Nodo", - "remoteExitNodeSelectionDescription": "Seleziona un nodo per instradare il traffico per questo sito locale", - "remoteExitNodeRequired": "Un nodo deve essere selezionato per i siti locali", - "noRemoteExitNodesAvailable": "Nessun Nodo Disponibile", - "noRemoteExitNodesAvailableDescription": "Non ci sono nodi disponibili per questa organizzazione. Crea un nodo prima per usare i siti locali.", - "exitNode": "Nodo di Uscita", - "country": "Paese", - "rulesMatchCountry": "Attualmente basato sull'IP di origine", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Gestito Auto-Ospitato", "description": "Server Pangolin self-hosted più affidabile e a bassa manutenzione con campanelli e fischietti extra", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Dominio Internazionale Rilevato", "willbestoredas": "Verrà conservato come:", - "roleMappingDescription": "Determinare come i ruoli sono assegnati agli utenti quando accedono quando è abilitata la fornitura automatica.", - "selectRole": "Seleziona un ruolo", - "roleMappingExpression": "Espressione", - "selectRolePlaceholder": "Scegli un ruolo", - "selectRoleDescription": "Seleziona un ruolo da assegnare a tutti gli utenti da questo provider di identità", - "roleMappingExpressionDescription": "Inserire un'espressione JMESPath per estrarre le informazioni sul ruolo dal token ID", - "idpTenantIdRequired": "L'ID dell'inquilino è obbligatorio", - "invalidValue": "Valore non valido", - "idpTypeLabel": "Tipo Provider Identità", - "roleMappingExpressionPlaceholder": "es. contiene(gruppi, 'admin') && 'Admin' 'Membro'", - "idpGoogleConfiguration": "Configurazione Google", - "idpGoogleConfigurationDescription": "Configura le tue credenziali di Google OAuth2", - "idpGoogleClientIdDescription": "Il Tuo Client Id Google OAuth2", - "idpGoogleClientSecretDescription": "Il Tuo Client Google OAuth2 Secret", - "idpAzureConfiguration": "Configurazione Azure Entra ID", - "idpAzureConfigurationDescription": "Configura le credenziali OAuth2 di Azure Entra ID", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "iltuo-inquilino-id", - "idpAzureTenantIdDescription": "Il tuo ID del tenant Azure (trovato nella panoramica di Azure Active Directory)", - "idpAzureClientIdDescription": "Il Tuo Id Client Registrazione App Azure", - "idpAzureClientSecretDescription": "Il Tuo Client Di Registrazione App Azure Secret", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Configurazione Google", - "idpAzureConfigurationTitle": "Configurazione Azure Entra ID", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Il Tuo Id Client Registrazione App Azure", - "idpAzureClientSecretDescription2": "Il Tuo Client Di Registrazione App Azure Secret", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Sottorete", - "subnetDescription": "La sottorete per la configurazione di rete di questa organizzazione.", - "authPage": "Pagina Autenticazione", - "authPageDescription": "Configura la pagina di autenticazione per la tua organizzazione", - "authPageDomain": "Dominio Pagina Auth", - "noDomainSet": "Nessun dominio impostato", - "changeDomain": "Cambia Dominio", - "selectDomain": "Seleziona Dominio", - "restartCertificate": "Riavvia Certificato", - "editAuthPageDomain": "Modifica Dominio Pagina Auth", - "setAuthPageDomain": "Imposta Dominio Pagina Autenticazione", - "failedToFetchCertificate": "Recupero del certificato non riuscito", - "failedToRestartCertificate": "Riavvio del certificato non riuscito", - "addDomainToEnableCustomAuthPages": "Aggiungi un dominio per abilitare le pagine di autenticazione personalizzate per la tua organizzazione", - "selectDomainForOrgAuthPage": "Seleziona un dominio per la pagina di autenticazione dell'organizzazione", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Dominio Fornito", "domainPickerFreeProvidedDomain": "Dominio Fornito Gratuito", "domainPickerVerified": "Verificato", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" non può essere reso valido per {domain}.", "domainPickerSubdomainSanitized": "Sottodominio igienizzato", "domainPickerSubdomainCorrected": "\"{sub}\" è stato corretto in \"{sanitized}\"", - "orgAuthSignInTitle": "Accedi alla tua organizzazione", - "orgAuthChooseIdpDescription": "Scegli il tuo provider di identità per continuare", - "orgAuthNoIdpConfigured": "Questa organizzazione non ha nessun provider di identità configurato. Puoi accedere con la tua identità Pangolin.", - "orgAuthSignInWithPangolin": "Accedi con Pangolino", - "subscriptionRequiredToUse": "Per utilizzare questa funzionalità è necessario un abbonamento.", - "idpDisabled": "I provider di identità sono disabilitati.", - "orgAuthPageDisabled": "La pagina di autenticazione dell'organizzazione è disabilitata.", - "domainRestartedDescription": "Verifica del dominio riavviata con successo", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Modifica file: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Modifica file: docker-compose.yml", "emailVerificationRequired": "Verifica via email. Effettua nuovamente il login via {dashboardUrl}/auth/login completa questo passaggio. Quindi, torna qui.", - "twoFactorSetupRequired": "È richiesta la configurazione di autenticazione a due fattori. Effettua nuovamente l'accesso tramite {dashboardUrl}/auth/login completa questo passaggio. Quindi, torna qui." + "twoFactorSetupRequired": "È richiesta la configurazione di autenticazione a due fattori. Effettua nuovamente l'accesso tramite {dashboardUrl}/auth/login completa questo passaggio. Quindi, torna qui.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From e73e6956a54d74f4b351cc9685a467dc2b89664b Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:19 -0700 Subject: [PATCH 06/28] New translations en-us.json (Korean) --- messages/ko-KR.json | 367 ++++++++++++++++++++++---------------------- 1 file changed, 186 insertions(+), 181 deletions(-) diff --git a/messages/ko-KR.json b/messages/ko-KR.json index 4684eacb..34888669 100644 --- a/messages/ko-KR.json +++ b/messages/ko-KR.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "네트워크에 대한 진입점을 생성하는 가장 쉬운 방법입니다. 추가 설정이 필요 없습니다.", "siteWg": "기본 WireGuard", "siteWgDescription": "모든 WireGuard 클라이언트를 사용하여 터널을 설정하세요. 수동 NAT 설정이 필요합니다.", - "siteWgDescriptionSaas": "모든 WireGuard 클라이언트를 사용하여 터널을 설정하세요. 수동 NAT 설정이 필요합니다. 자체 호스팅 노드에서만 작동합니다.", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "로컬 리소스만 사용 가능합니다. 터널링이 없습니다.", - "siteLocalDescriptionSaas": "로컬 리소스만. 터널링 없음. 자체 호스팅 노드에서만 작동합니다.", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "모든 사이트 보기", "siteTunnelDescription": "사이트에 연결하는 방법을 결정하세요", "siteNewtCredentials": "Newt 자격 증명", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS 리소스", "resourceHTTPDescription": "서브도메인 또는 기본 도메인을 사용하여 HTTPS를 통해 앱에 대한 요청을 프록시합니다.", "resourceRaw": "원시 TCP/UDP 리소스", - "resourceRawDescription": "TCP/UDP를 통해 포트 번호를 사용하여 앱에 요청을 프록시합니다.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "리소스 생성", "resourceCreateDescription": "아래 단계를 따라 새 리소스를 생성하세요.", "resourceSeeAll": "모든 리소스 보기", @@ -168,9 +168,9 @@ "siteSelect": "사이트 선택", "siteSearch": "사이트 검색", "siteNotFound": "사이트를 찾을 수 없습니다.", - "selectCountry": "국가 선택하기", - "searchCountries": "국가 검색...", - "noCountryFound": "국가를 찾을 수 없습니다.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "이 사이트는 대상에 대한 연결을 제공합니다.", "resourceType": "리소스 유형", "resourceTypeDescription": "리소스에 접근하는 방법을 결정하세요", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "서브도메인: {subdomain}", "domainPickerNamespace": "이름 공간: {namespace}", "domainPickerShowMore": "더보기", - "regionSelectorTitle": "지역 선택", - "regionSelectorInfo": "지역을 선택하면 위치에 따라 더 나은 성능이 제공됩니다. 서버와 같은 지역에 있을 필요는 없습니다.", - "regionSelectorPlaceholder": "지역 선택", - "regionSelectorComingSoon": "곧 출시 예정", - "billingLoadingSubscription": "구독 불러오는 중...", - "billingFreeTier": "무료 티어", - "billingWarningOverLimit": "경고: 하나 이상의 사용 한도를 초과했습니다. 구독을 수정하거나 사용량을 조정하기 전까지 사이트는 연결되지 않습니다.", - "billingUsageLimitsOverview": "사용 한도 개요", - "billingMonitorUsage": "설정된 한도에 대한 사용량을 모니터링합니다. 한도를 늘려야 하는 경우 support@fossorial.io로 연락하십시오.", - "billingDataUsage": "데이터 사용량", - "billingOnlineTime": "사이트 온라인 시간", - "billingUsers": "활성 사용자", - "billingDomains": "활성 도메인", - "billingRemoteExitNodes": "활성 자체 호스팅 노드", - "billingNoLimitConfigured": "구성된 한도가 없습니다.", - "billingEstimatedPeriod": "예상 청구 기간", - "billingIncludedUsage": "포함 사용량", - "billingIncludedUsageDescription": "현재 구독 계획에 포함된 사용량", - "billingFreeTierIncludedUsage": "무료 티어 사용 허용량", - "billingIncluded": "포함됨", - "billingEstimatedTotal": "예상 총액:", - "billingNotes": "노트", - "billingEstimateNote": "현재 사용량을 기반으로 한 추정치입니다.", - "billingActualChargesMayVary": "실제 청구 금액은 다를 수 있습니다.", - "billingBilledAtEnd": "청구 기간이 끝난 후 청구됩니다.", - "billingModifySubscription": "구독 수정", - "billingStartSubscription": "구독 시작", - "billingRecurringCharge": "반복 요금", - "billingManageSubscriptionSettings": "구독 설정 및 기본 설정을 관리합니다", - "billingNoActiveSubscription": "활성 구독이 없습니다. 사용 한도를 늘리려면 구독을 시작하십시오.", - "billingFailedToLoadSubscription": "구독을 불러오는 데 실패했습니다.", - "billingFailedToLoadUsage": "사용량을 불러오는 데 실패했습니다.", - "billingFailedToGetCheckoutUrl": "체크아웃 URL을 가져오는 데 실패했습니다.", - "billingPleaseTryAgainLater": "나중에 다시 시도하십시오.", - "billingCheckoutError": "체크아웃 오류", - "billingFailedToGetPortalUrl": "포털 URL을 가져오는 데 실패했습니다.", - "billingPortalError": "포털 오류", - "billingDataUsageInfo": "클라우드에 연결할 때 보안 터널을 통해 전송된 모든 데이터에 대해 비용이 청구됩니다. 여기에는 모든 사이트의 들어오고 나가는 트래픽이 포함됩니다. 사용량 한도에 도달하면 플랜을 업그레이드하거나 사용량을 줄일 때까지 사이트가 연결 해제됩니다. 노드를 사용하는 경우 데이터는 요금이 청구되지 않습니다.", - "billingOnlineTimeInfo": "사이트가 클라우드에 연결된 시간에 따라 요금이 청구됩니다. 예를 들어, 44,640분은 사이트가 한 달 내내 24시간 작동하는 것과 같습니다. 사용량 한도에 도달하면 플랜을 업그레이드하거나 사용량을 줄일 때까지 사이트가 연결 해제됩니다. 노드를 사용할 때 시간은 요금이 청구되지 않습니다.", - "billingUsersInfo": "조직의 사용자마다 요금이 청구됩니다. 청구는 조직의 활성 사용자 계정 수에 따라 매일 계산됩니다.", - "billingDomainInfo": "조직의 도메인마다 요금이 청구됩니다. 청구는 조직의 활성 도메인 계정 수에 따라 매일 계산됩니다.", - "billingRemoteExitNodesInfo": "조직의 관리 노드마다 요금이 청구됩니다. 청구는 조직의 활성 관리 노드 수에 따라 매일 계산됩니다.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "도메인을 찾을 수 없습니다", "domainNotFoundDescription": "이 리소스는 도메인이 더 이상 시스템에 존재하지 않아 비활성화되었습니다. 이 리소스에 대한 새 도메인을 설정하세요.", "failed": "실패", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS 변경 사항은 인터넷 전체에 전파되는 데 시간이 걸립니다. DNS 제공자와 TTL 설정에 따라 몇 분에서 48시간까지 걸릴 수 있습니다.", "resourcePortRequired": "HTTP 리소스가 아닌 경우 포트 번호가 필요합니다", "resourcePortNotAllowed": "HTTP 리소스에 대해 포트 번호를 설정하지 마세요", - "billingPricingCalculatorLink": "가격 계산기", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "동의합니다", "termsOfService": "서비스 약관", @@ -1412,41 +1412,41 @@ "addNewTarget": "새 대상 추가", "targetsList": "대상 목록", "targetErrorDuplicateTargetFound": "중복 대상 발견", - "healthCheckHealthy": "정상", - "healthCheckUnhealthy": "비정상", - "healthCheckUnknown": "알 수 없음", - "healthCheck": "상태 확인", - "configureHealthCheck": "상태 확인 설정", - "configureHealthCheckDescription": "{target}에 대한 상태 모니터링 설정", - "enableHealthChecks": "상태 확인 활성화", - "enableHealthChecksDescription": "이 대상을 모니터링하여 건강 상태를 확인하세요. 필요에 따라 대상과 다른 엔드포인트를 모니터링할 수 있습니다.", - "healthScheme": "방법", - "healthSelectScheme": "방법 선택", - "healthCheckPath": "경로", - "healthHostname": "IP / 호스트", - "healthPort": "포트", - "healthCheckPathDescription": "상태 확인을 위한 경로입니다.", - "healthyIntervalSeconds": "정상 간격", - "unhealthyIntervalSeconds": "비정상 간격", - "IntervalSeconds": "정상 간격", - "timeoutSeconds": "시간 초과", - "timeIsInSeconds": "시간은 초 단위입니다", - "retryAttempts": "재시도 횟수", - "expectedResponseCodes": "예상 응답 코드", - "expectedResponseCodesDescription": "정상 상태를 나타내는 HTTP 상태 코드입니다. 비워 두면 200-300이 정상으로 간주됩니다.", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", + "healthHostname": "IP / Host", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "사용자 정의 헤더", - "customHeadersDescription": "헤더는 새 줄로 구분됨: Header-Name: value", - "headersValidationError": "헤더는 형식이어야 합니다: 헤더명: 값.", - "saveHealthCheck": "상태 확인 저장", - "healthCheckSaved": "상태 확인이 저장되었습니다.", - "healthCheckSavedDescription": "상태 확인 구성이 성공적으로 저장되었습니다", - "healthCheckError": "상태 확인 오류", - "healthCheckErrorDescription": "상태 확인 구성을 저장하는 동안 오류가 발생했습니다", - "healthCheckPathRequired": "상태 확인 경로는 필수입니다.", - "healthCheckMethodRequired": "HTTP 방법은 필수입니다.", - "healthCheckIntervalMin": "확인 간격은 최소 5초여야 합니다.", - "healthCheckTimeoutMin": "시간 초과는 최소 1초여야 합니다.", - "healthCheckRetryMin": "재시도 횟수는 최소 1회여야 합니다.", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP 메소드", "selectHttpMethod": "HTTP 메소드 선택", "domainPickerSubdomainLabel": "서브도메인", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "사용 가능한 무료 도메인에서 검색 및 선택할 서브도메인 입력.", "domainPickerFreeDomains": "무료 도메인", "domainPickerSearchForAvailableDomains": "사용 가능한 도메인 검색", - "domainPickerNotWorkSelfHosted": "참고: 무료 제공 도메인은 현재 자체 호스팅 인스턴스에 사용할 수 없습니다.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "도메인", "resourceEditDomain": "도메인 수정", "siteName": "사이트 이름", @@ -1543,72 +1543,72 @@ "autoLoginError": "자동 로그인 오류", "autoLoginErrorNoRedirectUrl": "ID 공급자로부터 리디렉션 URL을 받지 못했습니다.", "autoLoginErrorGeneratingUrl": "인증 URL 생성 실패.", - "remoteExitNodeManageRemoteExitNodes": "관리 자체 호스팅", - "remoteExitNodeDescription": "네트워크 연결성을 확장하기 위해 노드를 관리하세요", - "remoteExitNodes": "노드", - "searchRemoteExitNodes": "노드 검색...", - "remoteExitNodeAdd": "노드 추가", - "remoteExitNodeErrorDelete": "노드 삭제 오류", - "remoteExitNodeQuestionRemove": "조직에서 노드 {selectedNode}를 제거하시겠습니까?", - "remoteExitNodeMessageRemove": "한 번 제거되면 더 이상 노드에 접근할 수 없습니다.", - "remoteExitNodeMessageConfirm": "확인을 위해 아래에 노드 이름을 입력해 주세요.", - "remoteExitNodeConfirmDelete": "노드 삭제 확인", - "remoteExitNodeDelete": "노드 삭제", - "sidebarRemoteExitNodes": "노드", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", + "remoteExitNodes": "Nodes", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", + "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "노드 생성", - "description": "네트워크 연결성을 확장하기 위해 새 노드를 생성하세요", - "viewAllButton": "모든 노드 보기", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "생성 전략", - "description": "노드를 직접 구성하거나 새 자격 증명을 생성하려면 이것을 선택하세요.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "노드 채택", - "description": "이미 노드의 자격 증명이 있는 경우 이것을 선택하세요." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "키 생성", - "description": "노드에 대한 새 키를 생성하려면 이것을 선택하세요" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "기존 노드 채택", - "description": "채택하려는 기존 노드의 자격 증명을 입력하세요", - "nodeIdLabel": "노드 ID", - "nodeIdDescription": "채택하려는 기존 노드의 ID", - "secretLabel": "비밀", - "secretDescription": "기존 노드의 비밀 키", - "submitButton": "노드 채택" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "생성된 자격 증명", - "description": "생성된 자격 증명을 사용하여 노드를 구성하세요", - "nodeIdTitle": "노드 ID", - "secretTitle": "비밀", - "saveCredentialsTitle": "구성에 자격 증명 추가", - "saveCredentialsDescription": "연결을 완료하려면 이러한 자격 증명을 자체 호스팅 Pangolin 노드 구성 파일에 추가하십시오.", - "submitButton": "노드 생성" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "기존 노드를 채택하려면 노드 ID와 비밀 키가 필요합니다" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "기본값 로드 실패", - "defaultsNotLoaded": "기본값 로드되지 않음", - "createFailed": "노드 생성 실패" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "노드가 성공적으로 생성되었습니다" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "노드 선택", - "remoteExitNodeSelectionDescription": "이 로컬 사이트에서 트래픽을 라우팅할 노드를 선택하세요", - "remoteExitNodeRequired": "로컬 사이트에 노드를 선택해야 합니다", - "noRemoteExitNodesAvailable": "사용 가능한 노드가 없습니다", - "noRemoteExitNodesAvailableDescription": "이 조직에 사용 가능한 노드가 없습니다. 로컬 사이트를 사용하려면 먼저 노드를 생성하세요.", - "exitNode": "종단 노드", - "country": "국가", - "rulesMatchCountry": "현재 소스 IP를 기반으로 합니다", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "관리 자체 호스팅", "description": "더 신뢰할 수 있고 낮은 유지보수의 자체 호스팅 팡골린 서버, 추가 기능 포함", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "국제 도메인 감지됨", "willbestoredas": "다음으로 저장됩니다:", - "roleMappingDescription": "자동 프로비저닝이 활성화되면 사용자가 로그인할 때 역할이 할당되는 방법을 결정합니다.", - "selectRole": "역할 선택", - "roleMappingExpression": "표현식", - "selectRolePlaceholder": "역할 선택", - "selectRoleDescription": "이 신원 공급자로부터 모든 사용자에게 할당할 역할을 선택하십시오.", - "roleMappingExpressionDescription": "ID 토큰에서 역할 정보를 추출하기 위한 JMESPath 표현식을 입력하세요.", - "idpTenantIdRequired": "테넌트 ID가 필요합니다", - "invalidValue": "잘못된 값", - "idpTypeLabel": "신원 공급자 유형", - "roleMappingExpressionPlaceholder": "예: contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google 구성", - "idpGoogleConfigurationDescription": "Google OAuth2 자격 증명을 구성합니다.", - "idpGoogleClientIdDescription": "Google OAuth2 클라이언트 ID", - "idpGoogleClientSecretDescription": "Google OAuth2 클라이언트 비밀", - "idpAzureConfiguration": "Azure Entra ID 구성", - "idpAzureConfigurationDescription": "Azure Entra ID OAuth2 자격 증명을 구성합니다.", - "idpTenantId": "테넌트 ID", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", + "idpTenantId": "Tenant ID", "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Azure 액티브 디렉터리 개요에서 찾은 Azure 테넌트 ID", - "idpAzureClientIdDescription": "Azure 앱 등록 클라이언트 ID", - "idpAzureClientSecretDescription": "Azure 앱 등록 클라이언트 비밀", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "구글", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "애저", - "idpGoogleConfigurationTitle": "Google 구성", - "idpAzureConfigurationTitle": "Azure Entra ID 구성", - "idpTenantIdLabel": "테넌트 ID", - "idpAzureClientIdDescription2": "Azure 앱 등록 클라이언트 ID", - "idpAzureClientSecretDescription2": "Azure 앱 등록 클라이언트 비밀", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", + "idpTenantIdLabel": "Tenant ID", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC 공급자", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC 공급자", - "subnet": "서브넷", - "subnetDescription": "이 조직의 네트워크 구성에 대한 서브넷입니다.", - "authPage": "인증 페이지", - "authPageDescription": "조직에 대한 인증 페이지를 구성합니다.", - "authPageDomain": "인증 페이지 도메인", - "noDomainSet": "도메인 설정 없음", - "changeDomain": "도메인 변경", - "selectDomain": "도메인 선택", - "restartCertificate": "인증서 재시작", - "editAuthPageDomain": "인증 페이지 도메인 편집", - "setAuthPageDomain": "인증 페이지 도메인 설정", - "failedToFetchCertificate": "인증서 가져오기 실패", - "failedToRestartCertificate": "인증서 재시작 실패", - "addDomainToEnableCustomAuthPages": "조직의 맞춤 인증 페이지를 활성화하려면 도메인을 추가하세요.", - "selectDomainForOrgAuthPage": "조직 인증 페이지에 대한 도메인을 선택하세요.", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "제공된 도메인", "domainPickerFreeProvidedDomain": "무료 제공된 도메인", "domainPickerVerified": "검증됨", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\"을(를) {domain}에 대해 유효하게 만들 수 없습니다.", "domainPickerSubdomainSanitized": "하위 도메인 정리됨", "domainPickerSubdomainCorrected": "\"{sub}\"이(가) \"{sanitized}\"로 수정되었습니다", - "orgAuthSignInTitle": "조직에 로그인", - "orgAuthChooseIdpDescription": "계속하려면 신원 공급자를 선택하세요.", - "orgAuthNoIdpConfigured": "이 조직은 구성된 신원 공급자가 없습니다. 대신 Pangolin 아이덴티티로 로그인할 수 있습니다.", - "orgAuthSignInWithPangolin": "Pangolin으로 로그인", - "subscriptionRequiredToUse": "이 기능을 사용하려면 구독이 필요합니다.", - "idpDisabled": "신원 공급자가 비활성화되었습니다.", - "orgAuthPageDisabled": "조직 인증 페이지가 비활성화되었습니다.", - "domainRestartedDescription": "도메인 인증이 성공적으로 재시작되었습니다.", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "파일 편집: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "파일 편집: docker-compose.yml", "emailVerificationRequired": "이메일 인증이 필요합니다. 이 단계를 완료하려면 {dashboardUrl}/auth/login 통해 다시 로그인하십시오. 그런 다음 여기로 돌아오세요.", - "twoFactorSetupRequired": "이중 인증 설정이 필요합니다. 이 단계를 완료하려면 {dashboardUrl}/auth/login 통해 다시 로그인하십시오. 그런 다음 여기로 돌아오세요." + "twoFactorSetupRequired": "이중 인증 설정이 필요합니다. 이 단계를 완료하려면 {dashboardUrl}/auth/login 통해 다시 로그인하십시오. 그런 다음 여기로 돌아오세요.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From 3385a92b0f5f547a317d8886576d1774b1a02312 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:20 -0700 Subject: [PATCH 07/28] New translations en-us.json (Dutch) --- messages/nl-NL.json | 443 ++++++++++++++++++++++---------------------- 1 file changed, 224 insertions(+), 219 deletions(-) diff --git a/messages/nl-NL.json b/messages/nl-NL.json index 12744579..c8047e5f 100644 --- a/messages/nl-NL.json +++ b/messages/nl-NL.json @@ -10,7 +10,7 @@ "setupErrorIdentifier": "Organisatie-ID is al in gebruik. Kies een andere.", "componentsErrorNoMemberCreate": "U bent momenteel geen lid van een organisatie. Maak een organisatie aan om aan de slag te gaan.", "componentsErrorNoMember": "U bent momenteel geen lid van een organisatie.", - "welcome": "Welkom bij Pangolin", + "welcome": "Welkom bij Pangolin!", "welcomeTo": "Welkom bij", "componentsCreateOrg": "Maak een Organisatie", "componentsMember": "Je bent lid van {count, plural, =0 {geen organisatie} one {één organisatie} other {# organisaties}}.", @@ -22,7 +22,7 @@ "inviteErrorUser": "Het spijt ons, maar de uitnodiging die u probeert te gebruiken is niet voor deze gebruiker.", "inviteLoginUser": "Controleer of je bent aangemeld als de juiste gebruiker.", "inviteErrorNoUser": "Het spijt ons, maar de uitnodiging die u probeert te gebruiken is niet voor een bestaande gebruiker.", - "inviteCreateUser": "U moet eerst een account aanmaken", + "inviteCreateUser": "U moet eerst een account aanmaken.", "goHome": "Ga naar huis", "inviteLogInOtherUser": "Log in als een andere gebruiker", "createAnAccount": "Account aanmaken", @@ -38,12 +38,12 @@ "name": "Naam", "online": "Online", "offline": "Offline", - "site": "Website", - "dataIn": "Gegevens in", - "dataOut": "Data Uit", + "site": "Referentie", + "dataIn": "Dataverbruik inkomend", + "dataOut": "Dataverbruik uitgaand", "connectionType": "Type verbinding", "tunnelType": "Tunnel type", - "local": "lokaal", + "local": "Lokaal", "edit": "Bewerken", "siteConfirmDelete": "Verwijderen van site bevestigen", "siteDelete": "Site verwijderen", @@ -55,7 +55,7 @@ "siteCreate": "Site maken", "siteCreateDescription2": "Volg de onderstaande stappen om een nieuwe site aan te maken en te verbinden", "siteCreateDescription": "Maak een nieuwe site aan om verbinding te maken met uw bronnen", - "close": "Afsluiten", + "close": "Sluiten", "siteErrorCreate": "Fout bij maken site", "siteErrorCreateKeyPair": "Key pair of site standaard niet gevonden", "siteErrorCreateDefaults": "Standaardinstellingen niet gevonden", @@ -90,21 +90,21 @@ "siteGeneralDescription": "Algemene instellingen voor deze site configureren", "siteSettingDescription": "Configureer de instellingen op uw site", "siteSetting": "{siteName} instellingen", - "siteNewtTunnel": "Nieuwstunnel (Aanbevolen)", + "siteNewtTunnel": "Newttunnel (Aanbevolen)", "siteNewtTunnelDescription": "Gemakkelijkste manier om een ingangspunt in uw netwerk te maken. Geen extra opzet.", "siteWg": "Basis WireGuard", "siteWgDescription": "Gebruik een WireGuard client om een tunnel te bouwen. Handmatige NAT installatie vereist.", - "siteWgDescriptionSaas": "Gebruik elke WireGuard-client om een tunnel op te zetten. Handmatige NAT-instelling vereist. WERKT ALLEEN OP SELF HOSTED NODES", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Alleen lokale bronnen. Geen tunneling.", - "siteLocalDescriptionSaas": "Alleen lokale bronnen. Geen tunneling. WERKT ALLEEN OP SELF HOSTED NODES", - "siteSeeAll": "Alle werkruimtes bekijken", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteSeeAll": "Alle sites bekijken", "siteTunnelDescription": "Bepaal hoe u verbinding wilt maken met uw site", "siteNewtCredentials": "Nieuwste aanmeldgegevens", "siteNewtCredentialsDescription": "Dit is hoe Newt zich zal verifiëren met de server", "siteCredentialsSave": "Uw referenties opslaan", "siteCredentialsSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een beveiligde plek.", "siteInfo": "Site informatie", - "status": "status", + "status": "Status", "shareTitle": "Beheer deellinks", "shareDescription": "Maak deelbare links aan om tijdelijke of permanente toegang tot uw bronnen te verlenen", "shareSearch": "Zoek share links...", @@ -146,20 +146,20 @@ "never": "Nooit", "shareErrorSelectResource": "Selecteer een bron", "resourceTitle": "Bronnen beheren", - "resourceDescription": "Veilige proxy's voor uw privé applicaties maken", + "resourceDescription": "Veilige proxy's voor uw privéapplicaties maken", "resourcesSearch": "Zoek bronnen...", "resourceAdd": "Bron toevoegen", "resourceErrorDelte": "Fout bij verwijderen document", "authentication": "Authenticatie", "protected": "Beschermd", - "notProtected": "Niet beschermd", + "notProtected": "Niet beveiligd", "resourceMessageRemove": "Eenmaal verwijderd, zal het bestand niet langer toegankelijk zijn. Alle doelen die gekoppeld zijn aan het hulpbron, zullen ook verwijderd worden.", "resourceMessageConfirm": "Om te bevestigen, typ de naam van de bron hieronder.", "resourceQuestionRemove": "Weet u zeker dat u de resource {selectedResource} uit de organisatie wilt verwijderen?", "resourceHTTP": "HTTPS bron", "resourceHTTPDescription": "Proxy verzoeken aan uw app via HTTPS via een subdomein of basisdomein.", - "resourceRaw": "Ruwe TCP/UDP bron", - "resourceRawDescription": "Proxy verzoeken naar je app via TCP/UDP met behulp van een poortnummer.", + "resourceRaw": "TCP/UDP bron", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Bron maken", "resourceCreateDescription": "Volg de onderstaande stappen om een nieuwe bron te maken", "resourceSeeAll": "Alle bronnen bekijken", @@ -168,9 +168,9 @@ "siteSelect": "Selecteer site", "siteSearch": "Zoek site", "siteNotFound": "Geen site gevonden.", - "selectCountry": "Selecteer land", - "searchCountries": "Zoek landen...", - "noCountryFound": "Geen land gevonden.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Deze site zal connectiviteit met het doelwit bieden.", "resourceType": "Type bron", "resourceTypeDescription": "Bepaal hoe u toegang wilt krijgen tot uw bron", @@ -186,7 +186,7 @@ "protocolSelect": "Selecteer een protocol", "resourcePortNumber": "Nummer van poort", "resourcePortNumberDescription": "Het externe poortnummer naar proxyverzoeken.", - "cancel": "annuleren", + "cancel": "Annuleren", "resourceConfig": "Configuratie tekstbouwstenen", "resourceConfigDescription": "Kopieer en plak deze configuratie-snippets om je TCP/UDP-bron in te stellen", "resourceAddEntrypoints": "Traefik: Entrypoints toevoegen", @@ -215,7 +215,7 @@ "saveGeneralSettings": "Algemene instellingen opslaan", "saveSettings": "Instellingen opslaan", "orgDangerZone": "Gevaarlijke zone", - "orgDangerZoneDescription": "Als u deze instantie verwijdert, is er geen weg terug. Wees het alstublieft zeker.", + "orgDangerZoneDescription": "Deze instantie verwijderen is onomkeerbaar. Bevestig alstublieft dat u wilt doorgaan.", "orgDelete": "Verwijder organisatie", "orgDeleteConfirm": "Bevestig Verwijderen Organisatie", "orgMessageRemove": "Deze actie is onomkeerbaar en zal alle bijbehorende gegevens verwijderen.", @@ -268,7 +268,7 @@ "apiKeysGeneralSettingsDescription": "Bepaal wat deze API-sleutel kan doen", "apiKeysList": "Uw API-sleutel", "apiKeysSave": "Uw API-sleutel opslaan", - "apiKeysSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een veilige plek.", + "apiKeysSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een beveiligde plek.", "apiKeysInfo": "Uw API-sleutel is:", "apiKeysConfirmCopy": "Ik heb de API-sleutel gekopieerd", "generate": "Genereren", @@ -504,7 +504,7 @@ "targetStickySessionsDescription": "Behoud verbindingen op hetzelfde backend doel voor hun hele sessie.", "methodSelect": "Selecteer methode", "targetSubmit": "Doelwit toevoegen", - "targetNoOne": "Geen doelwitten. Voeg een doel toe via het formulier.", + "targetNoOne": "Geen doel toegevoegd. Voeg deze toe via dit formulier.", "targetNoOneDescription": "Het toevoegen van meer dan één doel hierboven zal de load balancering mogelijk maken.", "targetsSubmit": "Doelstellingen opslaan", "proxyAdditional": "Extra Proxy-instellingen", @@ -575,7 +575,7 @@ "domainsErrorFetchDescription": "Er is een fout opgetreden bij het ophalen van de domeinen", "none": "geen", "unknown": "onbekend", - "resources": "Hulpmiddelen", + "resources": "Bronnen", "resourcesDescription": "Bronnen zijn proxies voor applicaties die op uw privénetwerk worden uitgevoerd. Maak een bron aan voor elke HTTP/HTTPS of onbewerkte TCP/UDP-service op uw privénetwerk. Elke bron moet verbonden zijn met een site om private, beveiligde verbinding mogelijk te maken via een versleutelde WireGuard tunnel.", "resourcesWireGuardConnect": "Beveiligde verbinding met WireGuard versleuteling", "resourcesMultipleAuthenticationMethods": "Meerdere verificatiemethoden configureren", @@ -601,7 +601,7 @@ "newtId": "Newt-ID", "newtSecretKey": "Nieuwe geheime sleutel", "architecture": "Architectuur", - "sites": "Werkruimtes", + "sites": "Sites", "siteWgAnyClients": "Gebruik een willekeurige WireGuard client om verbinding te maken. Je moet je interne bronnen aanspreken met behulp van de peer IP.", "siteWgCompatibleAllClients": "Compatibel met alle WireGuard clients", "siteWgManualConfigurationRequired": "Handmatige configuratie vereist", @@ -730,22 +730,22 @@ "idpQuestionRemove": "Weet u zeker dat u de identiteitsprovider {name} permanent wilt verwijderen?", "idpMessageRemove": "Dit zal de identiteitsprovider en alle bijbehorende configuraties verwijderen. Gebruikers die via deze provider authenticeren, kunnen niet langer inloggen.", "idpMessageConfirm": "Om dit te bevestigen, typt u de naam van onderstaande identiteitsprovider.", - "idpConfirmDelete": "Bevestig verwijderen Identity Provider", - "idpDelete": "Identity Provider verwijderen", - "idp": "Identiteit aanbieders", - "idpSearch": "Identiteitsaanbieders zoeken...", - "idpAdd": "Identity Provider toevoegen", - "idpClientIdRequired": "Client-ID is vereist.", - "idpClientSecretRequired": "Clientgeheim is vereist.", - "idpErrorAuthUrlInvalid": "Authenticatie-URL moet een geldige URL zijn.", - "idpErrorTokenUrlInvalid": "Token-URL moet een geldige URL zijn.", + "idpConfirmDelete": "Bevestig verwijderen identiteit provider", + "idpDelete": "Identiteit provider verwijderen", + "idp": "Identiteitsproviders", + "idpSearch": "Identiteitsproviders zoeken...", + "idpAdd": "Identiteit provider toevoegen", + "idpClientIdRequired": "Client ID is vereist.", + "idpClientSecretRequired": "Client geheim is vereist.", + "idpErrorAuthUrlInvalid": "Authenticatie URL moet een geldige URL zijn.", + "idpErrorTokenUrlInvalid": "Token URL moet een geldige URL zijn.", "idpPathRequired": "ID-pad is vereist.", "idpScopeRequired": "Toepassingsgebieden zijn vereist.", - "idpOidcDescription": "Een OpenID Connect identity provider configureren", - "idpCreatedDescription": "Identity provider succesvol aangemaakt", - "idpCreate": "Identity Provider aanmaken", - "idpCreateDescription": "Een nieuwe identiteitsprovider voor gebruikersauthenticatie configureren", - "idpSeeAll": "Zie alle identiteitsaanbieders", + "idpOidcDescription": "Een OpenID Connect identiteitsprovider configureren", + "idpCreatedDescription": "Identiteitsprovider succesvol aangemaakt", + "idpCreate": "Identiteitsprovider aanmaken", + "idpCreateDescription": "Een nieuwe identiteitsprovider voor authenticatie configureren", + "idpSeeAll": "Zie alle Identiteitsproviders", "idpSettingsDescription": "Configureer de basisinformatie voor uw identiteitsprovider", "idpDisplayName": "Een weergavenaam voor deze identiteitsprovider", "idpAutoProvisionUsers": "Auto Provisie Gebruikers", @@ -755,10 +755,10 @@ "idpTypeDescription": "Selecteer het type identiteitsprovider dat u wilt configureren", "idpOidcConfigure": "OAuth2/OIDC configuratie", "idpOidcConfigureDescription": "Configureer de eindpunten van de OAuth2/OIDC provider en referenties", - "idpClientId": "Klant ID", - "idpClientIdDescription": "De OAuth2-client-ID van uw identiteitsprovider", - "idpClientSecret": "Clientgeheim", - "idpClientSecretDescription": "Het OAuth2-clientgeheim van je identiteitsprovider", + "idpClientId": "Client ID", + "idpClientIdDescription": "De OAuth2 client ID van uw identiteitsprovider", + "idpClientSecret": "Client Secret", + "idpClientSecretDescription": "Het OAuth2 Client Secret van je identiteitsprovider", "idpAuthUrl": "URL autorisatie", "idpAuthUrlDescription": "De URL voor autorisatie OAuth2", "idpTokenUrl": "URL token", @@ -804,7 +804,7 @@ "defaultMappingsOrgDescription": "Deze expressie moet de org-ID teruggeven of waar om de gebruiker toegang te geven tot de organisatie.", "defaultMappingsSubmit": "Standaard toewijzingen opslaan", "orgPoliciesEdit": "Organisatie beleid bewerken", - "org": "Rekening", + "org": "Organisatie", "orgSelect": "Selecteer organisatie", "orgSearch": "Zoek in org", "orgNotFound": "Geen org gevonden.", @@ -925,7 +925,7 @@ "inviteErrorExpired": "De uitnodiging is mogelijk verlopen", "inviteErrorRevoked": "De uitnodiging is mogelijk ingetrokken", "inviteErrorTypo": "Er kan een typefout zijn in de uitnodigingslink", - "pangolinSetup": "Instellen - Pangolin", + "pangolinSetup": "Setup - Pangolin", "orgNameRequired": "Organisatienaam is vereist", "orgIdRequired": "Organisatie-ID is vereist", "orgErrorCreate": "Fout opgetreden tijdens het aanmaken org", @@ -977,10 +977,10 @@ "supportKeyEnterDescription": "Ontmoet je eigen huisdier Pangolin!", "githubUsername": "GitHub-gebruikersnaam", "supportKeyInput": "Supporter Sleutel", - "supportKeyBuy": "Koop Supportersleutel", + "supportKeyBuy": "Koop supportersleutel", "logoutError": "Fout bij uitloggen", "signingAs": "Ingelogd als", - "serverAdmin": "Server Beheerder", + "serverAdmin": "Server beheer", "managedSelfhosted": "Beheerde Self-Hosted", "otpEnable": "Twee-factor inschakelen", "otpDisable": "Tweestapsverificatie uitschakelen", @@ -995,12 +995,12 @@ "actionGetUser": "Gebruiker ophalen", "actionGetOrgUser": "Krijg organisatie-gebruiker", "actionListOrgDomains": "Lijst organisatie domeinen", - "actionCreateSite": "Site aanmaken", + "actionCreateSite": "Site maken", "actionDeleteSite": "Site verwijderen", "actionGetSite": "Site ophalen", "actionListSites": "Sites weergeven", "actionApplyBlueprint": "Blauwdruk toepassen", - "setupToken": "Instel Token", + "setupToken": "Setup Token", "setupTokenDescription": "Voer het setup-token in vanaf de serverconsole.", "setupTokenRequired": "Setup-token is vereist", "actionUpdateSite": "Site bijwerken", @@ -1129,7 +1129,7 @@ "sidebarOverview": "Overzicht.", "sidebarHome": "Startpagina", "sidebarSites": "Werkruimtes", - "sidebarResources": "Hulpmiddelen", + "sidebarResources": "Bronnen", "sidebarAccessControl": "Toegangs controle", "sidebarUsers": "Gebruikers", "sidebarInvitations": "Uitnodigingen", @@ -1256,50 +1256,50 @@ "domainPickerOrganizationDomains": "Organisatiedomeinen", "domainPickerProvidedDomains": "Aangeboden domeinen", "domainPickerSubdomain": "Subdomein: {subdomain}", - "domainPickerNamespace": "Naamruimte: {namespace}", + "domainPickerNamespace": "Namespace: {namespace}", "domainPickerShowMore": "Meer weergeven", - "regionSelectorTitle": "Selecteer Regio", - "regionSelectorInfo": "Het selecteren van een regio helpt ons om betere prestaties te leveren voor uw locatie. U hoeft niet in dezelfde regio als uw server te zijn.", - "regionSelectorPlaceholder": "Kies een regio", - "regionSelectorComingSoon": "Komt binnenkort", - "billingLoadingSubscription": "Abonnement laden...", - "billingFreeTier": "Gratis Niveau", - "billingWarningOverLimit": "Waarschuwing: U hebt een of meer gebruikslimieten overschreden. Uw sites maken geen verbinding totdat u uw abonnement aanpast of uw gebruik aanpast.", - "billingUsageLimitsOverview": "Overzicht gebruikslimieten", - "billingMonitorUsage": "Houd uw gebruik in de gaten ten opzichte van de ingestelde limieten. Als u verhoogde limieten nodig heeft, neem dan contact met ons op support@fossorial.io.", - "billingDataUsage": "Gegevensgebruik", - "billingOnlineTime": "Site Online Tijd", - "billingUsers": "Actieve Gebruikers", - "billingDomains": "Actieve Domeinen", - "billingRemoteExitNodes": "Actieve Zelfgehoste Nodes", - "billingNoLimitConfigured": "Geen limiet ingesteld", - "billingEstimatedPeriod": "Geschatte Facturatie Periode", - "billingIncludedUsage": "Opgenomen Gebruik", - "billingIncludedUsageDescription": "Gebruik inbegrepen in uw huidige abonnementsplan", - "billingFreeTierIncludedUsage": "Gratis niveau gebruikstoelagen", - "billingIncluded": "inbegrepen", - "billingEstimatedTotal": "Geschat Totaal:", - "billingNotes": "Notities", - "billingEstimateNote": "Dit is een schatting gebaseerd op uw huidige gebruik.", - "billingActualChargesMayVary": "Facturering kan variëren.", - "billingBilledAtEnd": "U wordt aan het einde van de factureringsperiode gefactureerd.", - "billingModifySubscription": "Abonnementsaanpassing", - "billingStartSubscription": "Abonnement Starten", - "billingRecurringCharge": "Terugkerende Kosten", - "billingManageSubscriptionSettings": "Beheer uw abonnementsinstellingen en voorkeuren", - "billingNoActiveSubscription": "U heeft geen actief abonnement. Start uw abonnement om gebruikslimieten te verhogen.", - "billingFailedToLoadSubscription": "Fout bij laden van abonnement", - "billingFailedToLoadUsage": "Niet gelukt om gebruik te laden", - "billingFailedToGetCheckoutUrl": "Niet gelukt om checkout URL te krijgen", - "billingPleaseTryAgainLater": "Probeer het later opnieuw.", - "billingCheckoutError": "Checkout Fout", - "billingFailedToGetPortalUrl": "Niet gelukt om portal URL te krijgen", - "billingPortalError": "Portal Fout", - "billingDataUsageInfo": "U bent in rekening gebracht voor alle gegevens die via uw beveiligde tunnels via de cloud worden verzonden. Dit omvat zowel inkomende als uitgaande verkeer over al uw sites. Wanneer u uw limiet bereikt zullen uw sites de verbinding verbreken totdat u uw abonnement upgradet of het gebruik vermindert. Gegevens worden niet in rekening gebracht bij het gebruik van knooppunten.", - "billingOnlineTimeInfo": "U wordt in rekening gebracht op basis van hoe lang uw sites verbonden blijven met de cloud. Bijvoorbeeld 44,640 minuten is gelijk aan één site met 24/7 voor een volledige maand. Wanneer u uw limiet bereikt, zal de verbinding tussen uw sites worden verbroken totdat u een upgrade van uw abonnement uitvoert of het gebruik vermindert. Tijd wordt niet belast bij het gebruik van knooppunten.", - "billingUsersInfo": "U wordt gefactureerd voor elke gebruiker in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve gebruikersaccounts in uw organisatie.", - "billingDomainInfo": "U wordt gefactureerd voor elk domein in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve domeinaccounts in uw organisatie.", - "billingRemoteExitNodesInfo": "U wordt gefactureerd voor elke beheerde Node in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve beheerde Nodes in uw organisatie.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Domein niet gevonden", "domainNotFoundDescription": "Deze bron is uitgeschakeld omdat het domein niet langer in ons systeem bestaat. Stel een nieuw domein in voor deze bron.", "failed": "Mislukt", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS-wijzigingen kunnen enige tijd duren om over het internet te worden verspreid. Dit kan enkele minuten tot 48 uur duren, afhankelijk van je DNS-provider en TTL-instellingen.", "resourcePortRequired": "Poortnummer is vereist voor niet-HTTP-bronnen", "resourcePortNotAllowed": "Poortnummer mag niet worden ingesteld voor HTTP-bronnen", - "billingPricingCalculatorLink": "Prijs Calculator", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Ik ga akkoord met de", "termsOfService": "servicevoorwaarden", @@ -1412,41 +1412,41 @@ "addNewTarget": "Voeg nieuw doelwit toe", "targetsList": "Lijst met doelen", "targetErrorDuplicateTargetFound": "Dubbel doelwit gevonden", - "healthCheckHealthy": "Gezond", - "healthCheckUnhealthy": "Ongezond", - "healthCheckUnknown": "Onbekend", - "healthCheck": "Gezondheidscontrole", - "configureHealthCheck": "Configureer Gezondheidscontrole", - "configureHealthCheckDescription": "Stel gezondheid monitor voor {target} in", - "enableHealthChecks": "Inschakelen Gezondheidscontroles", - "enableHealthChecksDescription": "Controleer de gezondheid van dit doel. U kunt een ander eindpunt monitoren dan het doel indien vereist.", - "healthScheme": "Methode", - "healthSelectScheme": "Selecteer methode", - "healthCheckPath": "Pad", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", "healthHostname": "IP / Host", - "healthPort": "Poort", - "healthCheckPathDescription": "Het pad om de gezondheid status te controleren.", - "healthyIntervalSeconds": "Gezonde Interval", - "unhealthyIntervalSeconds": "Ongezonde Interval", - "IntervalSeconds": "Gezonde Interval", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Tijd is in seconden", - "retryAttempts": "Herhaal Pogingen", - "expectedResponseCodes": "Verwachte Reactiecodes", - "expectedResponseCodesDescription": "HTTP-statuscode die gezonde status aangeeft. Indien leeg wordt 200-300 als gezond beschouwd.", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Aangepaste headers", - "customHeadersDescription": "Kopregeleinde: Header-Naam: waarde", - "headersValidationError": "Headers moeten in het formaat zijn: Header-Naam: waarde.", - "saveHealthCheck": "Opslaan Gezondheidscontrole", - "healthCheckSaved": "Gezondheidscontrole Opgeslagen", - "healthCheckSavedDescription": "Gezondheidscontrole configuratie succesvol opgeslagen", - "healthCheckError": "Gezondheidscontrole Fout", - "healthCheckErrorDescription": "Er is een fout opgetreden bij het opslaan van de configuratie van de gezondheidscontrole.", - "healthCheckPathRequired": "Gezondheidscontrole pad is vereist", - "healthCheckMethodRequired": "HTTP methode is vereist", - "healthCheckIntervalMin": "Controle interval moet minimaal 5 seconden zijn", - "healthCheckTimeoutMin": "Timeout moet minimaal 1 seconde zijn", - "healthCheckRetryMin": "Herhaal pogingen moet minimaal 1 zijn", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP-methode", "selectHttpMethod": "Selecteer HTTP-methode", "domainPickerSubdomainLabel": "Subdomein", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Voer een subdomein in om te zoeken en te selecteren uit beschikbare gratis domeinen.", "domainPickerFreeDomains": "Gratis Domeinen", "domainPickerSearchForAvailableDomains": "Zoek naar beschikbare domeinen", - "domainPickerNotWorkSelfHosted": "Opmerking: Gratis aangeboden domeinen zijn momenteel niet beschikbaar voor zelf-gehoste instanties.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Domein", "resourceEditDomain": "Domein bewerken", "siteName": "Site Naam", @@ -1543,72 +1543,72 @@ "autoLoginError": "Auto Login Fout", "autoLoginErrorNoRedirectUrl": "Geen redirect URL ontvangen van de identity provider.", "autoLoginErrorGeneratingUrl": "Genereren van authenticatie-URL mislukt.", - "remoteExitNodeManageRemoteExitNodes": "Beheer Zelf-Gehoste", - "remoteExitNodeDescription": "Beheer knooppunten om uw netwerkverbinding uit te breiden", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Knooppunten zoeken...", - "remoteExitNodeAdd": "Voeg node toe", - "remoteExitNodeErrorDelete": "Fout bij verwijderen node", - "remoteExitNodeQuestionRemove": "Weet u zeker dat u het node {selectedNode} uit de organisatie wilt verwijderen?", - "remoteExitNodeMessageRemove": "Eenmaal verwijderd, zal het knooppunt niet langer toegankelijk zijn.", - "remoteExitNodeMessageConfirm": "Om te bevestigen, typ de naam van het knooppunt hieronder.", - "remoteExitNodeConfirmDelete": "Bevestig verwijderen node", - "remoteExitNodeDelete": "Knoop verwijderen", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Maak node", - "description": "Maak een nieuwe node aan om uw netwerkverbinding uit te breiden", - "viewAllButton": "Alle nodes weergeven", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Creatie Strategie", - "description": "Kies dit om uw node handmatig te configureren of nieuwe referenties te genereren.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Adopteer Node", - "description": "Kies dit als u al de referenties voor deze node heeft" + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Genereer Sleutels", - "description": "Kies dit als u nieuwe sleutels voor het knooppunt wilt genereren" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Adopteer Bestaande Node", - "description": "Voer de referenties in van het bestaande knooppunt dat u wilt adopteren", - "nodeIdLabel": "Knooppunt ID", - "nodeIdDescription": "De ID van het knooppunt dat u wilt adopteren", - "secretLabel": "Geheim", - "secretDescription": "De geheime sleutel van de bestaande node", - "submitButton": "Knooppunt adopteren" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Gegeneerde Inloggegevens", - "description": "Gebruik deze gegenereerde inloggegevens om uw node te configureren", - "nodeIdTitle": "Knooppunt ID", - "secretTitle": "Geheim", - "saveCredentialsTitle": "Voeg Inloggegevens toe aan Config", - "saveCredentialsDescription": "Voeg deze inloggegevens toe aan uw zelf-gehoste Pangolin-node configuratiebestand om de verbinding te voltooien.", - "submitButton": "Maak node" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "Node ID en Secret zijn verplicht bij het overnemen van een bestaand knooppunt" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Niet gelukt om standaarden te laden", - "defaultsNotLoaded": "Standaarden niet geladen", - "createFailed": "Fout bij het maken van node" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Node succesvol aangemaakt" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Knooppunt selectie", - "remoteExitNodeSelectionDescription": "Selecteer een node om het verkeer door te leiden voor deze lokale site", - "remoteExitNodeRequired": "Een node moet worden geselecteerd voor lokale sites", - "noRemoteExitNodesAvailable": "Geen knooppunten beschikbaar", - "noRemoteExitNodesAvailableDescription": "Er zijn geen knooppunten beschikbaar voor deze organisatie. Maak eerst een knooppunt aan om lokale sites te gebruiken.", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", "exitNode": "Exit Node", - "country": "Land", - "rulesMatchCountry": "Momenteel gebaseerd op bron IP", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Beheerde Self-Hosted", "description": "betrouwbaardere en slecht onderhouden Pangolin server met extra klokken en klokkenluiders", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Internationaal Domein Gedetecteerd", "willbestoredas": "Zal worden opgeslagen als:", - "roleMappingDescription": "Bepaal hoe rollen worden toegewezen aan gebruikers wanneer ze inloggen wanneer Auto Provision is ingeschakeld.", - "selectRole": "Selecteer een rol", - "roleMappingExpression": "Expressie", - "selectRolePlaceholder": "Kies een rol", - "selectRoleDescription": "Selecteer een rol om toe te wijzen aan alle gebruikers van deze identiteitsprovider", - "roleMappingExpressionDescription": "Voer een JMESPath expressie in om rolinformatie van de ID-token te extraheren", - "idpTenantIdRequired": "Tenant ID is vereist", - "invalidValue": "Ongeldige waarde", - "idpTypeLabel": "Identiteit provider type", - "roleMappingExpressionPlaceholder": "bijvoorbeeld bevat (groepen, 'admin') && 'Admin' ½ 'Member'", - "idpGoogleConfiguration": "Google Configuratie", - "idpGoogleConfigurationDescription": "Configureer uw Google OAuth2-referenties", - "idpGoogleClientIdDescription": "Uw Google OAuth2-client-ID", - "idpGoogleClientSecretDescription": "Uw Google OAuth2 Clientgeheim", - "idpAzureConfiguration": "Azure Entra ID configuratie", - "idpAzureConfigurationDescription": "Configureer uw Azure Entra ID OAuth2 referenties", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "jouw-tenant-id", - "idpAzureTenantIdDescription": "Uw Azure tenant ID (gevonden in Azure Active Directory overzicht)", - "idpAzureClientIdDescription": "Uw Azure App registratie Client ID", - "idpAzureClientSecretDescription": "Uw Azure App registratie Client Secret", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuratie", - "idpAzureConfigurationTitle": "Azure Entra ID configuratie", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Uw Azure App registratie Client ID", - "idpAzureClientSecretDescription2": "Uw Azure App registratie Client Secret", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Subnet", - "subnetDescription": "Het subnet van de netwerkconfiguratie van deze organisatie.", - "authPage": "Authenticatie pagina", - "authPageDescription": "De autorisatiepagina voor uw organisatie configureren", - "authPageDomain": "Authenticatie pagina domein", - "noDomainSet": "Geen domein ingesteld", - "changeDomain": "Domein wijzigen", - "selectDomain": "Domein selecteren", - "restartCertificate": "Certificaat opnieuw starten", - "editAuthPageDomain": "Authenticatiepagina domein bewerken", - "setAuthPageDomain": "Authenticatiepagina domein instellen", - "failedToFetchCertificate": "Certificaat ophalen mislukt", - "failedToRestartCertificate": "Kon certificaat niet opnieuw opstarten", - "addDomainToEnableCustomAuthPages": "Voeg een domein toe om aangepaste authenticatiepagina's voor uw organisatie in te schakelen", - "selectDomainForOrgAuthPage": "Selecteer een domein voor de authenticatiepagina van de organisatie", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Opgegeven domein", "domainPickerFreeProvidedDomain": "Gratis verstrekt domein", "domainPickerVerified": "Geverifieerd", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" kon niet geldig worden gemaakt voor {domain}.", "domainPickerSubdomainSanitized": "Subdomein gesaniseerd", "domainPickerSubdomainCorrected": "\"{sub}\" was gecorrigeerd op \"{sanitized}\"", - "orgAuthSignInTitle": "Meld je aan bij je organisatie", - "orgAuthChooseIdpDescription": "Kies uw identiteitsprovider om door te gaan", - "orgAuthNoIdpConfigured": "Deze organisatie heeft geen identiteitsproviders geconfigureerd. Je kunt in plaats daarvan inloggen met je Pangolin-identiteit.", - "orgAuthSignInWithPangolin": "Log in met Pangolin", - "subscriptionRequiredToUse": "Een abonnement is vereist om deze functie te gebruiken.", - "idpDisabled": "Identiteitsaanbieders zijn uitgeschakeld.", - "orgAuthPageDisabled": "Pagina voor organisatie-authenticatie is uitgeschakeld.", - "domainRestartedDescription": "Domeinverificatie met succes opnieuw gestart", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Bestand bewerken: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Bestand bewerken: docker-compose.yml", "emailVerificationRequired": "E-mail verificatie is vereist. Log opnieuw in via {dashboardUrl}/auth/login voltooide deze stap. Kom daarna hier terug.", - "twoFactorSetupRequired": "Tweestapsverificatie instellen is vereist. Log opnieuw in via {dashboardUrl}/auth/login voltooide deze stap. Kom daarna hier terug." + "twoFactorSetupRequired": "Tweestapsverificatie instellen is vereist. Log opnieuw in via {dashboardUrl}/auth/login voltooide deze stap. Kom daarna hier terug.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From e4787924e71b01f37bb97e130c2b9cac75707c2d Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:21 -0700 Subject: [PATCH 08/28] New translations en-us.json (Polish) --- messages/pl-PL.json | 359 ++++++++++++++++++++++---------------------- 1 file changed, 182 insertions(+), 177 deletions(-) diff --git a/messages/pl-PL.json b/messages/pl-PL.json index ffe77bb8..90d188b4 100644 --- a/messages/pl-PL.json +++ b/messages/pl-PL.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Łatwiejszy sposób na stworzenie punktu wejścia w sieci. Nie ma dodatkowej konfiguracji.", "siteWg": "Podstawowy WireGuard", "siteWgDescription": "Użyj dowolnego klienta WireGuard do utworzenia tunelu. Wymagana jest ręczna konfiguracja NAT.", - "siteWgDescriptionSaas": "Użyj dowolnego klienta WireGuard do utworzenia tunelu. Wymagana ręczna konfiguracja NAT. DZIAŁA TYLKO NA SAMODZIELNIE HOSTOWANYCH WĘZŁACH", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Tylko lokalne zasoby. Brak tunelu.", - "siteLocalDescriptionSaas": "Tylko zasoby lokalne. Brak tunelowania. DZIAŁA TYLKO NA SAMODZIELNIE HOSTOWANYCH WĘZŁACH", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Zobacz wszystkie witryny", "siteTunnelDescription": "Określ jak chcesz połączyć się ze swoją stroną", "siteNewtCredentials": "Aktualne dane logowania", @@ -159,7 +159,7 @@ "resourceHTTP": "Zasób HTTPS", "resourceHTTPDescription": "Proxy do Twojej aplikacji przez HTTPS, przy użyciu poddomeny lub domeny bazowej.", "resourceRaw": "Surowy zasób TCP/UDP", - "resourceRawDescription": "Proxy do aplikacji przez TCP/UDP przy użyciu numeru portu.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Utwórz zasób", "resourceCreateDescription": "Wykonaj poniższe kroki, aby utworzyć nowy zasób", "resourceSeeAll": "Zobacz wszystkie zasoby", @@ -168,9 +168,9 @@ "siteSelect": "Wybierz witrynę", "siteSearch": "Szukaj witryny", "siteNotFound": "Nie znaleziono witryny.", - "selectCountry": "Wybierz kraj", - "searchCountries": "Szukaj krajów...", - "noCountryFound": "Nie znaleziono kraju.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Ta strona zapewni połączenie z celem.", "resourceType": "Typ zasobu", "resourceTypeDescription": "Określ jak chcesz uzyskać dostęp do swojego zasobu", @@ -1156,7 +1156,7 @@ "containerLabels": "Etykiety", "containerLabelsCount": "{count, plural, one {# etykieta} few {# etykiety} many {# etykiet} other {# etykiet}}", "containerLabelsTitle": "Etykiety kontenera", - "containerLabelEmpty": "", + "containerLabelEmpty": "", "containerPorts": "Porty", "containerPortsMore": "+{count} więcej", "containerActions": "Akcje", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Subdomena: {subdomain}", "domainPickerNamespace": "Przestrzeń nazw: {namespace}", "domainPickerShowMore": "Pokaż więcej", - "regionSelectorTitle": "Wybierz region", - "regionSelectorInfo": "Wybór regionu pomaga nam zapewnić lepszą wydajność dla Twojej lokalizacji. Nie musisz być w tym samym regionie co Twój serwer.", - "regionSelectorPlaceholder": "Wybierz region", - "regionSelectorComingSoon": "Wkrótce dostępne", - "billingLoadingSubscription": "Ładowanie subskrypcji...", - "billingFreeTier": "Darmowy pakiet", - "billingWarningOverLimit": "Ostrzeżenie: Przekroczyłeś jeden lub więcej limitów użytkowania. Twoje witryny nie połączą się, dopóki nie zmienisz subskrypcji lub nie dostosujesz użytkowania.", - "billingUsageLimitsOverview": "Przegląd Limitów Użytkowania", - "billingMonitorUsage": "Monitoruj swoje wykorzystanie w porównaniu do skonfigurowanych limitów. Jeśli potrzebujesz zwiększenia limitów, skontaktuj się z nami pod adresem support@fossorial.io.", - "billingDataUsage": "Użycie danych", - "billingOnlineTime": "Czas Online Strony", - "billingUsers": "Aktywni użytkownicy", - "billingDomains": "Aktywne domeny", - "billingRemoteExitNodes": "Aktywne samodzielnie-hostowane węzły", - "billingNoLimitConfigured": "Nie skonfigurowano limitu", - "billingEstimatedPeriod": "Szacowany Okres Rozliczeniowy", - "billingIncludedUsage": "Zawarte użycie", - "billingIncludedUsageDescription": "Użycie zawarte w obecnym planie subskrypcji", - "billingFreeTierIncludedUsage": "Limity użycia dla darmowego pakietu", - "billingIncluded": "zawarte", - "billingEstimatedTotal": "Szacowana Całkowita:", - "billingNotes": "Notatki", - "billingEstimateNote": "To jest szacunkowe, oparte na Twoim obecnym użyciu.", - "billingActualChargesMayVary": "Rzeczywiste opłaty mogą się różnić.", - "billingBilledAtEnd": "Zostaniesz obciążony na koniec okresu rozliczeniowego.", - "billingModifySubscription": "Modyfikuj Subskrypcję", - "billingStartSubscription": "Rozpocznij Subskrypcję", - "billingRecurringCharge": "Opłata Cyklowa", - "billingManageSubscriptionSettings": "Zarządzaj ustawieniami i preferencjami subskrypcji", - "billingNoActiveSubscription": "Nie masz aktywnej subskrypcji. Rozpocznij subskrypcję, aby zwiększyć limity użytkowania.", - "billingFailedToLoadSubscription": "Nie udało się załadować subskrypcji", - "billingFailedToLoadUsage": "Nie udało się załadować użycia", - "billingFailedToGetCheckoutUrl": "Nie udało się uzyskać adresu URL zakupu", - "billingPleaseTryAgainLater": "Spróbuj ponownie później.", - "billingCheckoutError": "Błąd przy kasie", - "billingFailedToGetPortalUrl": "Nie udało się uzyskać adresu URL portalu", - "billingPortalError": "Błąd Portalu", - "billingDataUsageInfo": "Jesteś obciążony za wszystkie dane przesyłane przez bezpieczne tunele, gdy jesteś podłączony do chmury. Obejmuje to zarówno ruch przychodzący, jak i wychodzący we wszystkich Twoich witrynach. Gdy osiągniesz swój limit, twoje strony zostaną rozłączone, dopóki nie zaktualizujesz planu lub nie ograniczysz użycia. Dane nie będą naliczane przy użyciu węzłów.", - "billingOnlineTimeInfo": "Opłata zależy od tego, jak długo twoje strony pozostają połączone z chmurą. Na przykład 44,640 minut oznacza jedną stronę działającą 24/7 przez cały miesiąc. Kiedy osiągniesz swój limit, twoje strony zostaną rozłączone, dopóki nie zaktualizujesz planu lub nie zmniejsz jego wykorzystania. Czas nie będzie naliczany przy użyciu węzłów.", - "billingUsersInfo": "Jesteś obciążany za każdego użytkownika w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych kont użytkowników w twojej organizacji.", - "billingDomainInfo": "Jesteś obciążany za każdą domenę w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych kont domen w twojej organizacji.", - "billingRemoteExitNodesInfo": "Jesteś obciążany za każdy zarządzany węzeł w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych zarządzanych węzłów w twojej organizacji.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Nie znaleziono domeny", "domainNotFoundDescription": "Zasób jest wyłączony, ponieważ domena nie istnieje już w naszym systemie. Proszę ustawić nową domenę dla tego zasobu.", "failed": "Niepowodzenie", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Zmiany DNS mogą zająć trochę czasu na rozpropagowanie się w Internecie. Może to potrwać od kilku minut do 48 godzin, w zależności od dostawcy DNS i ustawień TTL.", "resourcePortRequired": "Numer portu jest wymagany dla zasobów non-HTTP", "resourcePortNotAllowed": "Numer portu nie powinien być ustawiony dla zasobów HTTP", - "billingPricingCalculatorLink": "Kalkulator Cen", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Zgadzam się z", "termsOfService": "warunkami usługi", @@ -1412,41 +1412,41 @@ "addNewTarget": "Dodaj nowy cel", "targetsList": "Lista celów", "targetErrorDuplicateTargetFound": "Znaleziono duplikat celu", - "healthCheckHealthy": "Zdrowy", - "healthCheckUnhealthy": "Niezdrowy", - "healthCheckUnknown": "Nieznany", - "healthCheck": "Kontrola Zdrowia", - "configureHealthCheck": "Skonfiguruj Kontrolę Zdrowia", - "configureHealthCheckDescription": "Skonfiguruj monitorowanie zdrowia dla {target}", - "enableHealthChecks": "Włącz Kontrole Zdrowia", - "enableHealthChecksDescription": "Monitoruj zdrowie tego celu. Możesz monitorować inny punkt końcowy niż docelowy w razie potrzeby.", - "healthScheme": "Metoda", - "healthSelectScheme": "Wybierz metodę", - "healthCheckPath": "Ścieżka", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", "healthHostname": "IP / Host", "healthPort": "Port", - "healthCheckPathDescription": "Ścieżka do sprawdzania stanu zdrowia.", - "healthyIntervalSeconds": "Interwał Zdrowy", - "unhealthyIntervalSeconds": "Interwał Niezdrowy", - "IntervalSeconds": "Interwał Zdrowy", - "timeoutSeconds": "Limit Czasu", - "timeIsInSeconds": "Czas w sekundach", - "retryAttempts": "Próby Ponowienia", - "expectedResponseCodes": "Oczekiwane Kody Odpowiedzi", - "expectedResponseCodesDescription": "Kod statusu HTTP, który wskazuje zdrowy status. Jeśli pozostanie pusty, uznaje się 200-300 za zdrowy.", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Niestandardowe nagłówki", - "customHeadersDescription": "Nagłówki oddzielone: Nazwa nagłówka: wartość", - "headersValidationError": "Nagłówki muszą być w formacie: Nazwa nagłówka: wartość.", - "saveHealthCheck": "Zapisz Kontrolę Zdrowia", - "healthCheckSaved": "Kontrola Zdrowia Zapisana", - "healthCheckSavedDescription": "Konfiguracja kontroli zdrowia została zapisana pomyślnie", - "healthCheckError": "Błąd Kontroli Zdrowia", - "healthCheckErrorDescription": "Wystąpił błąd podczas zapisywania konfiguracji kontroli zdrowia", - "healthCheckPathRequired": "Ścieżka kontroli zdrowia jest wymagana", - "healthCheckMethodRequired": "Metoda HTTP jest wymagana", - "healthCheckIntervalMin": "Interwał sprawdzania musi wynosić co najmniej 5 sekund", - "healthCheckTimeoutMin": "Limit czasu musi wynosić co najmniej 1 sekundę", - "healthCheckRetryMin": "Liczba prób ponowienia musi wynosić co najmniej 1", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "Metoda HTTP", "selectHttpMethod": "Wybierz metodę HTTP", "domainPickerSubdomainLabel": "Poddomena", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Wprowadź poddomenę, aby wyszukać i wybrać z dostępnych darmowych domen.", "domainPickerFreeDomains": "Darmowe domeny", "domainPickerSearchForAvailableDomains": "Szukaj dostępnych domen", - "domainPickerNotWorkSelfHosted": "Uwaga: Darmowe domeny nie są obecnie dostępne dla instancji samodzielnie-hostowanych.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Domena", "resourceEditDomain": "Edytuj domenę", "siteName": "Nazwa strony", @@ -1543,72 +1543,72 @@ "autoLoginError": "Błąd automatycznego logowania", "autoLoginErrorNoRedirectUrl": "Nie otrzymano URL przekierowania od dostawcy tożsamości.", "autoLoginErrorGeneratingUrl": "Nie udało się wygenerować URL uwierzytelniania.", - "remoteExitNodeManageRemoteExitNodes": "Zarządzaj Samodzielnie-Hostingowane", - "remoteExitNodeDescription": "Zarządzaj węzłami w celu rozszerzenia połączenia z siecią", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Szukaj węzłów...", - "remoteExitNodeAdd": "Dodaj węzeł", - "remoteExitNodeErrorDelete": "Błąd podczas usuwania węzła", - "remoteExitNodeQuestionRemove": "Czy na pewno chcesz usunąć węzeł {selectedNode} z organizacji?", - "remoteExitNodeMessageRemove": "Po usunięciu, węzeł nie będzie już dostępny.", - "remoteExitNodeMessageConfirm": "Aby potwierdzić, wpisz nazwę węzła poniżej.", - "remoteExitNodeConfirmDelete": "Potwierdź usunięcie węzła", - "remoteExitNodeDelete": "Usuń węzeł", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Utwórz węzeł", - "description": "Utwórz nowy węzeł, aby rozszerzyć połączenie z siecią", - "viewAllButton": "Zobacz wszystkie węzły", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Strategia Tworzenia", - "description": "Wybierz to, aby ręcznie skonfigurować węzeł lub wygenerować nowe poświadczenia.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Zaadoptuj Węzeł", - "description": "Wybierz to, jeśli masz już dane logowania dla węzła." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Generuj Klucze", - "description": "Wybierz to, jeśli chcesz wygenerować nowe klucze dla węzła" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Zaadoptuj Istniejący Węzeł", - "description": "Wprowadź dane logowania istniejącego węzła, który chcesz przyjąć", - "nodeIdLabel": "ID węzła", - "nodeIdDescription": "ID istniejącego węzła, który chcesz przyjąć", - "secretLabel": "Sekret", - "secretDescription": "Sekretny klucz istniejącego węzła", - "submitButton": "Przyjmij węzeł" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Wygenerowane Poświadczenia", - "description": "Użyj tych danych logowania, aby skonfigurować węzeł", - "nodeIdTitle": "ID węzła", - "secretTitle": "Sekret", - "saveCredentialsTitle": "Dodaj Poświadczenia do Konfiguracji", - "saveCredentialsDescription": "Dodaj te poświadczenia do pliku konfiguracyjnego swojego samodzielnie-hostowanego węzła Pangolin, aby zakończyć połączenie.", - "submitButton": "Utwórz węzeł" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "Identyfikator węzła i sekret są wymagane podczas przyjmowania istniejącego węzła" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Nie udało się załadować domyślnych ustawień", - "defaultsNotLoaded": "Domyślne ustawienia nie zostały załadowane", - "createFailed": "Nie udało się utworzyć węzła" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Węzeł utworzony pomyślnie" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Wybór węzła", - "remoteExitNodeSelectionDescription": "Wybierz węzeł do przekierowania ruchu dla tej lokalnej witryny", - "remoteExitNodeRequired": "Węzeł musi być wybrany dla lokalnych witryn", - "noRemoteExitNodesAvailable": "Brak dostępnych węzłów", - "noRemoteExitNodesAvailableDescription": "Węzły nie są dostępne dla tej organizacji. Utwórz węzeł, aby używać lokalnych witryn.", - "exitNode": "Węzeł Wyjściowy", - "country": "Kraj", - "rulesMatchCountry": "Obecnie bazuje na adresie IP źródła", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Zarządzane Samodzielnie-Hostingowane", "description": "Większa niezawodność i niska konserwacja serwera Pangolin z dodatkowymi dzwonkami i sygnałami", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Wykryto międzynarodową domenę", "willbestoredas": "Będą przechowywane jako:", - "roleMappingDescription": "Określ jak role są przypisywane do użytkowników podczas logowania się, gdy automatyczne świadczenie jest włączone.", - "selectRole": "Wybierz rolę", - "roleMappingExpression": "Wyrażenie", - "selectRolePlaceholder": "Wybierz rolę", - "selectRoleDescription": "Wybierz rolę do przypisania wszystkim użytkownikom od tego dostawcy tożsamości", - "roleMappingExpressionDescription": "Wprowadź wyrażenie JMESŚcieżki, aby wyodrębnić informacje o roli z tokenu ID", - "idpTenantIdRequired": "ID lokatora jest wymagane", - "invalidValue": "Nieprawidłowa wartość", - "idpTypeLabel": "Typ dostawcy tożsamości", - "roleMappingExpressionPlaceholder": "np. zawiera(grupy, 'admin') && 'Admin' || 'Członek'", - "idpGoogleConfiguration": "Konfiguracja Google", - "idpGoogleConfigurationDescription": "Skonfiguruj swoje poświadczenia Google OAuth2", - "idpGoogleClientIdDescription": "Twój identyfikator klienta Google OAuth2", - "idpGoogleClientSecretDescription": "Twój klucz klienta Google OAuth2", - "idpAzureConfiguration": "Konfiguracja Azure Entra ID", - "idpAzureConfigurationDescription": "Skonfiguruj swoje dane logowania OAuth2 Azure Entra", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "twoj-lokator", - "idpAzureTenantIdDescription": "Twój identyfikator dzierżawcy Azure (znaleziony w Podglądzie Azure Active Directory", - "idpAzureClientIdDescription": "Twój identyfikator klienta rejestracji aplikacji Azure", - "idpAzureClientSecretDescription": "Klucz tajny Twojego klienta rejestracji aplikacji Azure", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Konfiguracja Google", - "idpAzureConfigurationTitle": "Konfiguracja Azure Entra ID", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Twój identyfikator klienta rejestracji aplikacji Azure", - "idpAzureClientSecretDescription2": "Klucz tajny Twojego klienta rejestracji aplikacji Azure", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Dostawca Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Podsieć", - "subnetDescription": "Podsieć dla konfiguracji sieci tej organizacji.", - "authPage": "Strona uwierzytelniania", - "authPageDescription": "Skonfiguruj stronę uwierzytelniania dla swojej organizacji", - "authPageDomain": "Domena strony uwierzytelniania", - "noDomainSet": "Nie ustawiono domeny", - "changeDomain": "Zmień domenę", - "selectDomain": "Wybierz domenę", - "restartCertificate": "Uruchom ponownie certyfikat", - "editAuthPageDomain": "Edytuj domenę strony uwierzytelniania", - "setAuthPageDomain": "Ustaw domenę strony uwierzytelniania", - "failedToFetchCertificate": "Nie udało się pobrać certyfikatu", - "failedToRestartCertificate": "Nie udało się ponownie uruchomić certyfikatu", - "addDomainToEnableCustomAuthPages": "Dodaj domenę, aby włączyć niestandardowe strony uwierzytelniania dla Twojej organizacji", - "selectDomainForOrgAuthPage": "Wybierz domenę dla strony uwierzytelniania organizacji", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Dostarczona domena", "domainPickerFreeProvidedDomain": "Darmowa oferowana domena", "domainPickerVerified": "Zweryfikowano", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" nie może być poprawne dla {domain}.", "domainPickerSubdomainSanitized": "Poddomena oczyszczona", "domainPickerSubdomainCorrected": "\"{sub}\" został skorygowany do \"{sanitized}\"", - "orgAuthSignInTitle": "Zaloguj się do swojej organizacji", - "orgAuthChooseIdpDescription": "Wybierz swojego dostawcę tożsamości, aby kontynuować", - "orgAuthNoIdpConfigured": "Ta organizacja nie ma skonfigurowanych żadnych dostawców tożsamości. Zamiast tego możesz zalogować się za pomocą swojej tożsamości Pangolin.", - "orgAuthSignInWithPangolin": "Zaloguj się używając Pangolin", - "subscriptionRequiredToUse": "Do korzystania z tej funkcji wymagana jest subskrypcja.", - "idpDisabled": "Dostawcy tożsamości są wyłączeni", - "orgAuthPageDisabled": "Strona autoryzacji organizacji jest wyłączona.", - "domainRestartedDescription": "Weryfikacja domeny zrestartowana pomyślnie", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Edytuj plik: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Edytuj plik: docker-compose.yml", "emailVerificationRequired": "Weryfikacja adresu e-mail jest wymagana. Zaloguj się ponownie przez {dashboardUrl}/auth/login zakończył ten krok. Następnie wróć tutaj.", - "twoFactorSetupRequired": "Konfiguracja uwierzytelniania dwuskładnikowego jest wymagana. Zaloguj się ponownie przez {dashboardUrl}/auth/login dokończ ten krok. Następnie wróć tutaj." + "twoFactorSetupRequired": "Konfiguracja uwierzytelniania dwuskładnikowego jest wymagana. Zaloguj się ponownie przez {dashboardUrl}/auth/login dokończ ten krok. Następnie wróć tutaj.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From ab7ac9cb6086e19ad338d00d66332d4f3ef5be8d Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:22 -0700 Subject: [PATCH 09/28] New translations en-us.json (Portuguese) --- messages/pt-PT.json | 631 ++++++++++++++++++++++---------------------- 1 file changed, 318 insertions(+), 313 deletions(-) diff --git a/messages/pt-PT.json b/messages/pt-PT.json index 151ee73f..3c5ae253 100644 --- a/messages/pt-PT.json +++ b/messages/pt-PT.json @@ -8,25 +8,25 @@ "orgId": "ID da organização", "setupIdentifierMessage": "Este é o identificador exclusivo para sua organização. Isso é separado do nome de exibição.", "setupErrorIdentifier": "O ID da organização já existe. Por favor, escolha um diferente.", - "componentsErrorNoMemberCreate": "Não é atualmente um membro de nenhuma organização. Crie uma organização para começar.", - "componentsErrorNoMember": "Não é atualmente um membro de nenhuma organização.", + "componentsErrorNoMemberCreate": "Você não é atualmente um membro de nenhuma organização. Crie uma organização para começar.", + "componentsErrorNoMember": "Você não é atualmente um membro de nenhuma organização.", "welcome": "Bem-vindo ao Pangolin", "welcomeTo": "Bem-vindo ao", "componentsCreateOrg": "Criar uma organização", - "componentsMember": "É membro de {count, plural, =0 {nenhuma organização} one {uma organização} other {# organizações}}.", + "componentsMember": "Você é membro de {count, plural, =0 {nenhuma organização} one {uma organização} other {# organizações}}.", "componentsInvalidKey": "Chaves de licença inválidas ou expiradas detectadas. Siga os termos da licença para continuar usando todos os recursos.", - "dismiss": "Rejeitar", + "dismiss": "Descartar", "componentsLicenseViolation": "Violação de Licença: Este servidor está usando sites {usedSites} que excedem o limite licenciado de sites {maxSites} . Siga os termos da licença para continuar usando todos os recursos.", "componentsSupporterMessage": "Obrigado por apoiar o Pangolin como um {tier}!", - "inviteErrorNotValid": "Desculpe, mas parece que o convite que está a tentar aceder não foi aceito ou não é mais válido.", - "inviteErrorUser": "Lamentamos, mas parece que o convite que está a tentar aceder não é para este utilizador.", - "inviteLoginUser": "Verifique se você está logado como o utilizador correto.", - "inviteErrorNoUser": "Desculpe, mas parece que o convite que está a tentar aceder não é para um utilizador que existe.", + "inviteErrorNotValid": "Desculpe, mas parece que o convite que você está tentando acessar não foi aceito ou não é mais válido.", + "inviteErrorUser": "Lamentamos, mas parece que o convite que você está tentando acessar não é para este usuário.", + "inviteLoginUser": "Verifique se você está logado como o usuário correto.", + "inviteErrorNoUser": "Desculpe, mas parece que o convite que você está tentando acessar não é para um usuário que existe.", "inviteCreateUser": "Por favor, crie uma conta primeiro.", - "goHome": "Voltar ao inicio", - "inviteLogInOtherUser": "Fazer login como um utilizador diferente", + "goHome": "Ir para casa", + "inviteLogInOtherUser": "Fazer login como um usuário diferente", "createAnAccount": "Crie uma conta", - "inviteNotAccepted": "Convite não aceite", + "inviteNotAccepted": "Convite não aceito", "authCreateAccount": "Crie uma conta para começar", "authNoAccount": "Não possui uma conta?", "email": "e-mail", @@ -34,23 +34,23 @@ "confirmPassword": "Confirmar senha", "createAccount": "Criar conta", "viewSettings": "Visualizar configurações", - "delete": "apagar", + "delete": "excluir", "name": "Nome:", "online": "Disponível", "offline": "Desconectado", "site": "site", - "dataIn": "Dados de entrada", + "dataIn": "Dados em", "dataOut": "Dados de saída", "connectionType": "Tipo de conexão", "tunnelType": "Tipo de túnel", "local": "Localização", "edit": "Alterar", - "siteConfirmDelete": "Confirmar que pretende apagar o site", + "siteConfirmDelete": "Confirmar exclusão do site", "siteDelete": "Excluir site", "siteMessageRemove": "Uma vez removido, o site não estará mais acessível. Todos os recursos e alvos associados ao site também serão removidos.", "siteMessageConfirm": "Para confirmar, por favor, digite o nome do site abaixo.", "siteQuestionRemove": "Você tem certeza que deseja remover o site {selectedSite} da organização?", - "siteManageSites": "Gerir sites", + "siteManageSites": "Gerenciar sites", "siteDescription": "Permitir conectividade à sua rede através de túneis seguros", "siteCreate": "Criar site", "siteCreateDescription2": "Siga os passos abaixo para criar e conectar um novo site", @@ -79,10 +79,10 @@ "operatingSystem": "Sistema operacional", "commands": "Comandos", "recommended": "Recomendados", - "siteNewtDescription": "Para a melhor experiência do utilizador, utilize Novo. Ele usa o WireGuard sob o capuz e permite que você aborde seus recursos privados através dos endereços LAN em sua rede privada do painel do Pangolin.", + "siteNewtDescription": "Para a melhor experiência do usuário, utilize Novo. Ele usa o WireGuard sob o capuz e permite que você aborde seus recursos privados através dos endereços LAN em sua rede privada do painel do Pangolin.", "siteRunsInDocker": "Executa no Docker", "siteRunsInShell": "Executa na shell no macOS, Linux e Windows", - "siteErrorDelete": "Erro ao apagar site", + "siteErrorDelete": "Erro ao excluir site", "siteErrorUpdate": "Falha ao atualizar site", "siteErrorUpdateDescription": "Ocorreu um erro ao atualizar o site.", "siteUpdated": "Site atualizado", @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "A maneira mais fácil de criar um ponto de entrada na sua rede. Nenhuma configuração extra.", "siteWg": "WireGuard Básico", "siteWgDescription": "Use qualquer cliente do WireGuard para estabelecer um túnel. Configuração manual NAT é necessária.", - "siteWgDescriptionSaas": "Use qualquer cliente WireGuard para estabelecer um túnel. Configuração manual NAT necessária. SOMENTE FUNCIONA EM NODES AUTO-HOSPEDADOS", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Recursos locais apenas. Sem túneis.", - "siteLocalDescriptionSaas": "Apenas recursos locais. Sem tunelamento. SOMENTE FUNCIONA EM NODES AUTO-HOSPEDADOS", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Ver todos os sites", "siteTunnelDescription": "Determine como você deseja se conectar ao seu site", "siteNewtCredentials": "Credenciais Novas", @@ -105,12 +105,12 @@ "siteCredentialsSaveDescription": "Você só será capaz de ver esta vez. Certifique-se de copiá-lo para um lugar seguro.", "siteInfo": "Informações do Site", "status": "SItuação", - "shareTitle": "Gerir links partilhados", + "shareTitle": "Gerenciar links de compartilhamento", "shareDescription": "Criar links compartilháveis para conceder acesso temporário ou permanente aos seus recursos", "shareSearch": "Pesquisar links de compartilhamento...", "shareCreate": "Criar Link de Compartilhamento", - "shareErrorDelete": "Falha ao apagar o link", - "shareErrorDeleteMessage": "Ocorreu um erro ao apagar o link", + "shareErrorDelete": "Falha ao excluir o link", + "shareErrorDeleteMessage": "Ocorreu um erro ao excluir o link", "shareDeleted": "Link excluído", "shareDeletedDescription": "O link foi eliminado", "shareTokenDescription": "Seu token de acesso pode ser passado de duas maneiras: como um parâmetro de consulta ou nos cabeçalhos da solicitação. Estes devem ser passados do cliente em todas as solicitações para acesso autenticado.", @@ -127,13 +127,13 @@ "shareErrorFetchResourceDescription": "Ocorreu um erro ao obter os recursos", "shareErrorCreate": "Falha ao criar link de compartilhamento", "shareErrorCreateDescription": "Ocorreu um erro ao criar o link de compartilhamento", - "shareCreateDescription": "Qualquer um com este link pode aceder o recurso", + "shareCreateDescription": "Qualquer um com este link pode acessar o recurso", "shareTitleOptional": "Título (opcional)", "expireIn": "Expira em", "neverExpire": "Nunca expirar", - "shareExpireDescription": "Tempo de expiração é quanto tempo o link será utilizável e oferecerá acesso ao recurso. Após este tempo, o link não funcionará mais, e os utilizadores que usaram este link perderão acesso ao recurso.", + "shareExpireDescription": "Tempo de expiração é quanto tempo o link será utilizável e oferecerá acesso ao recurso. Após este tempo, o link não funcionará mais, e os usuários que usaram este link perderão acesso ao recurso.", "shareSeeOnce": "Você só poderá ver este link uma vez. Certifique-se de copiá-lo.", - "shareAccessHint": "Qualquer um com este link pode aceder o recurso. Compartilhe com cuidado.", + "shareAccessHint": "Qualquer um com este link pode acessar o recurso. Compartilhe com cuidado.", "shareTokenUsage": "Ver Uso do Token de Acesso", "createLink": "Criar Link", "resourcesNotFound": "Nenhum recurso encontrado", @@ -145,11 +145,11 @@ "expires": "Expira", "never": "nunca", "shareErrorSelectResource": "Por favor, selecione um recurso", - "resourceTitle": "Gerir Recursos", + "resourceTitle": "Gerenciar Recursos", "resourceDescription": "Crie proxies seguros para seus aplicativos privados", "resourcesSearch": "Procurar recursos...", "resourceAdd": "Adicionar Recurso", - "resourceErrorDelte": "Erro ao apagar recurso", + "resourceErrorDelte": "Erro ao excluir recurso", "authentication": "Autenticação", "protected": "Protegido", "notProtected": "Não Protegido", @@ -159,7 +159,7 @@ "resourceHTTP": "Recurso HTTPS", "resourceHTTPDescription": "O proxy solicita ao seu aplicativo via HTTPS usando um subdomínio ou domínio base.", "resourceRaw": "Recurso TCP/UDP bruto", - "resourceRawDescription": "O proxy solicita ao seu aplicativo sobre TCP/UDP usando um número de porta.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Criar Recurso", "resourceCreateDescription": "Siga os passos abaixo para criar um novo recurso", "resourceSeeAll": "Ver todos os recursos", @@ -168,12 +168,12 @@ "siteSelect": "Selecionar site", "siteSearch": "Procurar no site", "siteNotFound": "Nenhum site encontrado.", - "selectCountry": "Selecionar país", - "searchCountries": "Buscar países...", - "noCountryFound": "Nenhum país encontrado.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Este site fornecerá conectividade ao destino.", "resourceType": "Tipo de Recurso", - "resourceTypeDescription": "Determine como você deseja aceder seu recurso", + "resourceTypeDescription": "Determine como você deseja acessar seu recurso", "resourceHTTPSSettings": "Configurações de HTTPS", "resourceHTTPSSettingsDescription": "Configure como seu recurso será acessado por HTTPS", "domainType": "Tipo de domínio", @@ -195,7 +195,7 @@ "resourceBack": "Voltar aos recursos", "resourceGoTo": "Ir para o Recurso", "resourceDelete": "Excluir Recurso", - "resourceDeleteConfirm": "Confirmar que pretende apagar o recurso", + "resourceDeleteConfirm": "Confirmar exclusão de recurso", "visibility": "Visibilidade", "enabled": "Ativado", "disabled": "Desabilitado", @@ -211,14 +211,14 @@ "passToAuth": "Passar para Autenticação", "orgSettingsDescription": "Configurar as configurações gerais da sua organização", "orgGeneralSettings": "Configurações da organização", - "orgGeneralSettingsDescription": "Gerir os detalhes e a configuração da sua organização", - "saveGeneralSettings": "Guardar configurações gerais", - "saveSettings": "Guardar Configurações", + "orgGeneralSettingsDescription": "Gerencie os detalhes e a configuração da sua organização", + "saveGeneralSettings": "Salvar configurações gerais", + "saveSettings": "Salvar Configurações", "orgDangerZone": "Zona de Perigo", "orgDangerZoneDescription": "Uma vez que você exclui esta organização, não há volta. Por favor, tenha certeza.", "orgDelete": "Excluir Organização", - "orgDeleteConfirm": "Confirmar que pretende apagar a organização", - "orgMessageRemove": "Esta ação é irreversível e apagará todos os dados associados.", + "orgDeleteConfirm": "Confirmar exclusão da organização", + "orgMessageRemove": "Esta ação é irreversível e excluirá todos os dados associados.", "orgMessageConfirm": "Para confirmar, digite o nome da organização abaixo.", "orgQuestionRemove": "Tem certeza que deseja remover a organização {selectedOrg}?", "orgUpdated": "Organização atualizada", @@ -227,29 +227,29 @@ "orgErrorUpdateMessage": "Ocorreu um erro ao atualizar a organização.", "orgErrorFetch": "Falha ao buscar organizações", "orgErrorFetchMessage": "Ocorreu um erro ao listar suas organizações", - "orgErrorDelete": "Falha ao apagar organização", - "orgErrorDeleteMessage": "Ocorreu um erro ao apagar a organização.", + "orgErrorDelete": "Falha ao excluir organização", + "orgErrorDeleteMessage": "Ocorreu um erro ao excluir a organização.", "orgDeleted": "Organização excluída", "orgDeletedMessage": "A organização e seus dados foram excluídos.", "orgMissing": "ID da Organização Ausente", "orgMissingMessage": "Não é possível regenerar o convite sem um ID de organização.", - "accessUsersManage": "Gerir Utilizadores", - "accessUsersDescription": "Convidar utilizadores e adicioná-los a funções para gerir o acesso à sua organização", - "accessUsersSearch": "Procurar utilizadores...", + "accessUsersManage": "Gerenciar Usuários", + "accessUsersDescription": "Convidar usuários e adicioná-los a funções para gerenciar o acesso à sua organização", + "accessUsersSearch": "Procurar usuários...", "accessUserCreate": "Criar Usuário", - "accessUserRemove": "Remover utilizador", + "accessUserRemove": "Remover usuário", "username": "Usuário:", "identityProvider": "Provedor de Identidade", "role": "Funções", "nameRequired": "O nome é obrigatório", - "accessRolesManage": "Gerir Funções", - "accessRolesDescription": "Configurar funções para gerir o acesso à sua organização", + "accessRolesManage": "Gerenciar Funções", + "accessRolesDescription": "Configurar funções para gerenciar o acesso à sua organização", "accessRolesSearch": "Pesquisar funções...", "accessRolesAdd": "Adicionar função", "accessRoleDelete": "Excluir Papel", "description": "Descrição:", "inviteTitle": "Convites Abertos", - "inviteDescription": "Gerir seus convites para outros utilizadores", + "inviteDescription": "Gerencie seus convites para outros usuários", "inviteSearch": "Procurar convites...", "minutes": "minutos", "hours": "horas", @@ -267,7 +267,7 @@ "apiKeysGeneralSettings": "Permissões", "apiKeysGeneralSettingsDescription": "Determine o que esta chave API pode fazer", "apiKeysList": "Sua Chave API", - "apiKeysSave": "Guardar Sua Chave API", + "apiKeysSave": "Salvar Sua Chave API", "apiKeysSaveDescription": "Você só poderá ver isto uma vez. Certifique-se de copiá-la para um local seguro.", "apiKeysInfo": "Sua chave API é:", "apiKeysConfirmCopy": "Eu copiei a chave API", @@ -280,33 +280,33 @@ "apiKeysPermissionsUpdatedDescription": "As permissões foram atualizadas.", "apiKeysPermissionsGeneralSettings": "Permissões", "apiKeysPermissionsGeneralSettingsDescription": "Determine o que esta chave API pode fazer", - "apiKeysPermissionsSave": "Guardar Permissões", + "apiKeysPermissionsSave": "Salvar Permissões", "apiKeysPermissionsTitle": "Permissões", "apiKeys": "Chaves API", "searchApiKeys": "Pesquisar chaves API...", "apiKeysAdd": "Gerar Chave API", - "apiKeysErrorDelete": "Erro ao apagar chave API", - "apiKeysErrorDeleteMessage": "Erro ao apagar chave API", + "apiKeysErrorDelete": "Erro ao excluir chave API", + "apiKeysErrorDeleteMessage": "Erro ao excluir chave API", "apiKeysQuestionRemove": "Tem certeza que deseja remover a chave API {selectedApiKey} da organização?", "apiKeysMessageRemove": "Uma vez removida, a chave API não poderá mais ser utilizada.", "apiKeysMessageConfirm": "Para confirmar, por favor digite o nome da chave API abaixo.", "apiKeysDeleteConfirm": "Confirmar Exclusão da Chave API", "apiKeysDelete": "Excluir Chave API", - "apiKeysManage": "Gerir Chaves API", + "apiKeysManage": "Gerenciar Chaves API", "apiKeysDescription": "As chaves API são usadas para autenticar com a API de integração", "apiKeysSettings": "Configurações de {apiKeyName}", - "userTitle": "Gerir Todos os Utilizadores", - "userDescription": "Visualizar e gerir todos os utilizadores no sistema", + "userTitle": "Gerenciar Todos os Usuários", + "userDescription": "Visualizar e gerenciar todos os usuários no sistema", "userAbount": "Sobre a Gestão de Usuário", - "userAbountDescription": "Esta tabela exibe todos os objetos root do utilizador. Cada utilizador pode pertencer a várias organizações. Remover um utilizador de uma organização não exclui seu objeto de utilizador raiz - ele permanecerá no sistema. Para remover completamente um utilizador do sistema, você deve apagar seu objeto raiz usando a ação de apagar nesta tabela.", - "userServer": "Utilizadores do Servidor", - "userSearch": "Pesquisar utilizadores do servidor...", - "userErrorDelete": "Erro ao apagar utilizador", + "userAbountDescription": "Esta tabela exibe todos os objetos root do usuário. Cada usuário pode pertencer a várias organizações. Remover um usuário de uma organização não exclui seu objeto de usuário raiz - ele permanecerá no sistema. Para remover completamente um usuário do sistema, você deve excluir seu objeto raiz usando a ação de excluir nesta tabela.", + "userServer": "Usuários do Servidor", + "userSearch": "Pesquisar usuários do servidor...", + "userErrorDelete": "Erro ao excluir usuário", "userDeleteConfirm": "Confirmar Exclusão do Usuário", - "userDeleteServer": "Excluir utilizador do servidor", - "userMessageRemove": "O utilizador será removido de todas as organizações e será completamente removido do servidor.", - "userMessageConfirm": "Para confirmar, por favor digite o nome do utilizador abaixo.", - "userQuestionRemove": "Tem certeza que deseja apagar o {selectedUser} permanentemente do servidor?", + "userDeleteServer": "Excluir usuário do servidor", + "userMessageRemove": "O usuário será removido de todas as organizações e será completamente removido do servidor.", + "userMessageConfirm": "Para confirmar, por favor digite o nome do usuário abaixo.", + "userQuestionRemove": "Tem certeza que deseja excluir o {selectedUser} permanentemente do servidor?", "licenseKey": "Chave de Licença", "valid": "Válido", "numberOfSites": "Número de sites", @@ -317,8 +317,8 @@ "licenseTermsAgree": "Você deve concordar com os termos da licença", "licenseErrorKeyLoad": "Falha ao carregar chaves de licença", "licenseErrorKeyLoadDescription": "Ocorreu um erro ao carregar a chave da licença.", - "licenseErrorKeyDelete": "Falha ao apagar chave de licença", - "licenseErrorKeyDeleteDescription": "Ocorreu um erro ao apagar a chave de licença.", + "licenseErrorKeyDelete": "Falha ao excluir chave de licença", + "licenseErrorKeyDeleteDescription": "Ocorreu um erro ao excluir a chave de licença.", "licenseKeyDeleted": "Chave da licença excluída", "licenseKeyDeletedDescription": "A chave da licença foi excluída.", "licenseErrorKeyActivate": "Falha ao ativar a chave de licença", @@ -339,13 +339,13 @@ "fossorialLicense": "Ver Termos e Condições de Assinatura e Licença Fossorial", "licenseMessageRemove": "Isto irá remover a chave da licença e todas as permissões associadas concedidas por ela.", "licenseMessageConfirm": "Para confirmar, por favor, digite a chave de licença abaixo.", - "licenseQuestionRemove": "Tem certeza que deseja apagar a chave de licença {selectedKey}?", + "licenseQuestionRemove": "Tem certeza que deseja excluir a chave de licença {selectedKey}?", "licenseKeyDelete": "Excluir Chave de Licença", - "licenseKeyDeleteConfirm": "Confirmar que pretende apagar a chave de licença", - "licenseTitle": "Gerir Status da Licença", - "licenseTitleDescription": "Visualizar e gerir chaves de licença no sistema", + "licenseKeyDeleteConfirm": "Confirmar exclusão da chave de licença", + "licenseTitle": "Gerenciar Status da Licença", + "licenseTitleDescription": "Visualizar e gerenciar chaves de licença no sistema", "licenseHost": "Licença do host", - "licenseHostDescription": "Gerir a chave de licença principal do host.", + "licenseHostDescription": "Gerenciar a chave de licença principal do host.", "licensedNot": "Não Licenciado", "hostId": "ID do host", "licenseReckeckAll": "Verifique novamente todas as chaves", @@ -373,37 +373,37 @@ "inviteRemoved": "Convite removido", "inviteRemovedDescription": "O convite para {email} foi removido.", "inviteQuestionRemove": "Tem certeza de que deseja remover o convite {email}?", - "inviteMessageRemove": "Uma vez removido, este convite não será mais válido. Você sempre pode convidar o utilizador novamente mais tarde.", + "inviteMessageRemove": "Uma vez removido, este convite não será mais válido. Você sempre pode convidar o usuário novamente mais tarde.", "inviteMessageConfirm": "Para confirmar, digite o endereço de e-mail do convite abaixo.", "inviteQuestionRegenerate": "Tem certeza que deseja regenerar o convite{email, plural, ='' {}, other { para #}}? Isso irá revogar o convite anterior.", "inviteRemoveConfirm": "Confirmar Remoção do Convite", "inviteRegenerated": "Convite Regenerado", "inviteSent": "Um novo convite foi enviado para {email}.", - "inviteSentEmail": "Enviar notificação por e-mail ao utilizador", + "inviteSentEmail": "Enviar notificação por e-mail ao usuário", "inviteGenerate": "Um novo convite foi gerado para {email}.", "inviteDuplicateError": "Convite Duplicado", - "inviteDuplicateErrorDescription": "Já existe um convite para este utilizador.", + "inviteDuplicateErrorDescription": "Já existe um convite para este usuário.", "inviteRateLimitError": "Limite de Taxa Excedido", - "inviteRateLimitErrorDescription": "Excedeu o limite de 3 regenerações por hora. Por favor, tente novamente mais tarde.", + "inviteRateLimitErrorDescription": "Você excedeu o limite de 3 regenerações por hora. Por favor, tente novamente mais tarde.", "inviteRegenerateError": "Falha ao Regenerar Convite", "inviteRegenerateErrorDescription": "Ocorreu um erro ao regenerar o convite.", "inviteValidityPeriod": "Período de Validade", "inviteValidityPeriodSelect": "Selecione o período de validade", - "inviteRegenerateMessage": "O convite foi regenerado. O utilizador deve aceder o link abaixo para aceitar o convite.", + "inviteRegenerateMessage": "O convite foi regenerado. O usuário deve acessar o link abaixo para aceitar o convite.", "inviteRegenerateButton": "Regenerar", "expiresAt": "Expira em", "accessRoleUnknown": "Função Desconhecida", "placeholder": "Espaço reservado", - "userErrorOrgRemove": "Falha ao remover utilizador", - "userErrorOrgRemoveDescription": "Ocorreu um erro ao remover o utilizador.", + "userErrorOrgRemove": "Falha ao remover usuário", + "userErrorOrgRemoveDescription": "Ocorreu um erro ao remover o usuário.", "userOrgRemoved": "Usuário removido", - "userOrgRemovedDescription": "O utilizador {email} foi removido da organização.", + "userOrgRemovedDescription": "O usuário {email} foi removido da organização.", "userQuestionOrgRemove": "Tem certeza que deseja remover {email} da organização?", - "userMessageOrgRemove": "Uma vez removido, este utilizador não terá mais acesso à organização. Você sempre pode reconvidá-lo depois, mas eles precisarão aceitar o convite novamente.", - "userMessageOrgConfirm": "Para confirmar, digite o nome do utilizador abaixo.", + "userMessageOrgRemove": "Uma vez removido, este usuário não terá mais acesso à organização. Você sempre pode reconvidá-lo depois, mas eles precisarão aceitar o convite novamente.", + "userMessageOrgConfirm": "Para confirmar, digite o nome do usuário abaixo.", "userRemoveOrgConfirm": "Confirmar Remoção do Usuário", "userRemoveOrg": "Remover Usuário da Organização", - "users": "Utilizadores", + "users": "Usuários", "accessRoleMember": "Membro", "accessRoleOwner": "Proprietário", "userConfirmed": "Confirmado", @@ -411,7 +411,7 @@ "emailInvalid": "Endereço de email inválido", "inviteValidityDuration": "Por favor, selecione uma duração", "accessRoleSelectPlease": "Por favor, selecione uma função", - "usernameRequired": "Nome de utilizador é obrigatório", + "usernameRequired": "Nome de usuário é obrigatório", "idpSelectPlease": "Por favor, selecione um provedor de identidade", "idpGenericOidc": "Provedor genérico OAuth2/OIDC.", "accessRoleErrorFetch": "Falha ao buscar funções", @@ -419,51 +419,51 @@ "idpErrorFetch": "Falha ao buscar provedores de identidade", "idpErrorFetchDescription": "Ocorreu um erro ao buscar provedores de identidade", "userErrorExists": "Usuário já existe", - "userErrorExistsDescription": "Este utilizador já é membro da organização.", - "inviteError": "Falha ao convidar utilizador", - "inviteErrorDescription": "Ocorreu um erro ao convidar o utilizador", + "userErrorExistsDescription": "Este usuário já é membro da organização.", + "inviteError": "Falha ao convidar usuário", + "inviteErrorDescription": "Ocorreu um erro ao convidar o usuário", "userInvited": "Usuário convidado", - "userInvitedDescription": "O utilizador foi convidado com sucesso.", - "userErrorCreate": "Falha ao criar utilizador", - "userErrorCreateDescription": "Ocorreu um erro ao criar o utilizador", + "userInvitedDescription": "O usuário foi convidado com sucesso.", + "userErrorCreate": "Falha ao criar usuário", + "userErrorCreateDescription": "Ocorreu um erro ao criar o usuário", "userCreated": "Usuário criado", - "userCreatedDescription": "O utilizador foi criado com sucesso.", + "userCreatedDescription": "O usuário foi criado com sucesso.", "userTypeInternal": "Usuário Interno", - "userTypeInternalDescription": "Convidar um utilizador para se juntar à sua organização diretamente.", + "userTypeInternalDescription": "Convidar um usuário para se juntar à sua organização diretamente.", "userTypeExternal": "Usuário Externo", - "userTypeExternalDescription": "Criar um utilizador com um provedor de identidade externo.", - "accessUserCreateDescription": "Siga os passos abaixo para criar um novo utilizador", - "userSeeAll": "Ver Todos os Utilizadores", + "userTypeExternalDescription": "Criar um usuário com um provedor de identidade externo.", + "accessUserCreateDescription": "Siga os passos abaixo para criar um novo usuário", + "userSeeAll": "Ver Todos os Usuários", "userTypeTitle": "Tipo de Usuário", - "userTypeDescription": "Determine como você deseja criar o utilizador", + "userTypeDescription": "Determine como você deseja criar o usuário", "userSettings": "Informações do Usuário", - "userSettingsDescription": "Insira os detalhes para o novo utilizador", - "inviteEmailSent": "Enviar e-mail de convite para o utilizador", + "userSettingsDescription": "Insira os detalhes para o novo usuário", + "inviteEmailSent": "Enviar e-mail de convite para o usuário", "inviteValid": "Válido Por", "selectDuration": "Selecionar duração", "accessRoleSelect": "Selecionar função", - "inviteEmailSentDescription": "Um e-mail foi enviado ao utilizador com o link de acesso abaixo. Eles devem aceder ao link para aceitar o convite.", - "inviteSentDescription": "O utilizador foi convidado. Eles devem aceder ao link abaixo para aceitar o convite.", + "inviteEmailSentDescription": "Um e-mail foi enviado ao usuário com o link de acesso abaixo. Eles devem acessar o link para aceitar o convite.", + "inviteSentDescription": "O usuário foi convidado. Eles devem acessar o link abaixo para aceitar o convite.", "inviteExpiresIn": "O convite expirará em {days, plural, one {# dia} other {# dias}}.", "idpTitle": "Informações Gerais", - "idpSelect": "Selecione o provedor de identidade para o utilizador externo", - "idpNotConfigured": "Nenhum provedor de identidade está configurado. Configure um provedor de identidade antes de criar utilizadores externos.", - "usernameUniq": "Isto deve corresponder ao nome de utilizador único que existe no provedor de identidade selecionado.", + "idpSelect": "Selecione o provedor de identidade para o usuário externo", + "idpNotConfigured": "Nenhum provedor de identidade está configurado. Configure um provedor de identidade antes de criar usuários externos.", + "usernameUniq": "Isto deve corresponder ao nome de usuário único que existe no provedor de identidade selecionado.", "emailOptional": "E-mail (Opcional)", "nameOptional": "Nome (Opcional)", - "accessControls": "Controlos de Acesso", - "userDescription2": "Gerir as configurações deste utilizador", - "accessRoleErrorAdd": "Falha ao adicionar utilizador à função", - "accessRoleErrorAddDescription": "Ocorreu um erro ao adicionar utilizador à função.", + "accessControls": "Controles de Acesso", + "userDescription2": "Gerenciar as configurações deste usuário", + "accessRoleErrorAdd": "Falha ao adicionar usuário à função", + "accessRoleErrorAddDescription": "Ocorreu um erro ao adicionar usuário à função.", "userSaved": "Usuário salvo", - "userSavedDescription": "O utilizador foi atualizado.", + "userSavedDescription": "O usuário foi atualizado.", "autoProvisioned": "Auto provisionado", - "autoProvisionedDescription": "Permitir que este utilizador seja gerido automaticamente pelo provedor de identidade", - "accessControlsDescription": "Gerir o que este utilizador pode aceder e fazer na organização", - "accessControlsSubmit": "Guardar Controlos de Acesso", + "autoProvisionedDescription": "Permitir que este usuário seja gerenciado automaticamente pelo provedor de identidade", + "accessControlsDescription": "Gerencie o que este usuário pode acessar e fazer na organização", + "accessControlsSubmit": "Salvar Controles de Acesso", "roles": "Funções", - "accessUsersRoles": "Gerir Utilizadores e Funções", - "accessUsersRolesDescription": "Convide utilizadores e adicione-os a funções para gerir o acesso à sua organização", + "accessUsersRoles": "Gerenciar Usuários e Funções", + "accessUsersRolesDescription": "Convide usuários e adicione-os a funções para gerenciar o acesso à sua organização", "key": "Chave", "createdAt": "Criado Em", "proxyErrorInvalidHeader": "Valor do cabeçalho Host personalizado inválido. Use o formato de nome de domínio ou salve vazio para remover o cabeçalho Host personalizado.", @@ -497,7 +497,7 @@ "targetTlsSettingsAdvanced": "Configurações TLS Avançadas", "targetTlsSni": "Nome do Servidor TLS (SNI)", "targetTlsSniDescription": "O Nome do Servidor TLS para usar para SNI. Deixe vazio para usar o padrão.", - "targetTlsSubmit": "Guardar Configurações", + "targetTlsSubmit": "Salvar Configurações", "targets": "Configuração de Alvos", "targetsDescription": "Configure alvos para rotear tráfego para seus serviços de backend", "targetStickySessions": "Ativar Sessões Persistentes", @@ -506,12 +506,12 @@ "targetSubmit": "Adicionar Alvo", "targetNoOne": "Sem alvos. Adicione um alvo usando o formulário.", "targetNoOneDescription": "Adicionar mais de um alvo acima habilitará o balanceamento de carga.", - "targetsSubmit": "Guardar Alvos", + "targetsSubmit": "Salvar Alvos", "proxyAdditional": "Configurações Adicionais de Proxy", "proxyAdditionalDescription": "Configure como seu recurso lida com configurações de proxy", "proxyCustomHeader": "Cabeçalho Host Personalizado", "proxyCustomHeaderDescription": "O cabeçalho host para definir ao fazer proxy de requisições. Deixe vazio para usar o padrão.", - "proxyAdditionalSubmit": "Guardar Configurações de Proxy", + "proxyAdditionalSubmit": "Salvar Configurações de Proxy", "subnetMaskErrorInvalid": "Máscara de subnet inválida. Deve estar entre 0 e 32.", "ipAddressErrorInvalidFormat": "Formato de endereço IP inválido", "ipAddressErrorInvalidOctet": "Octeto de endereço IP inválido", @@ -564,7 +564,7 @@ "ruleSubmit": "Adicionar Regra", "rulesNoOne": "Sem regras. Adicione uma regra usando o formulário.", "rulesOrder": "As regras são avaliadas por prioridade em ordem ascendente.", - "rulesSubmit": "Guardar Regras", + "rulesSubmit": "Salvar Regras", "resourceErrorCreate": "Erro ao criar recurso", "resourceErrorCreateDescription": "Ocorreu um erro ao criar o recurso", "resourceErrorCreateMessage": "Erro ao criar recurso:", @@ -579,7 +579,7 @@ "resourcesDescription": "Recursos são proxies para aplicações executando em sua rede privada. Crie um recurso para qualquer serviço HTTP/HTTPS ou TCP/UDP bruto em sua rede privada. Cada recurso deve estar conectado a um site para habilitar conectividade privada e segura através de um túnel WireGuard criptografado.", "resourcesWireGuardConnect": "Conectividade segura com criptografia WireGuard", "resourcesMultipleAuthenticationMethods": "Configure múltiplos métodos de autenticação", - "resourcesUsersRolesAccess": "Controle de acesso baseado em utilizadores e funções", + "resourcesUsersRolesAccess": "Controle de acesso baseado em usuários e funções", "resourcesErrorUpdate": "Falha ao alternar recurso", "resourcesErrorUpdateDescription": "Ocorreu um erro ao atualizar o recurso", "access": "Acesso", @@ -609,7 +609,7 @@ "pangolinSettings": "Configurações - Pangolin", "accessRoleYour": "Sua função:", "accessRoleSelect2": "Selecionar uma função", - "accessUserSelect": "Selecionar um utilizador", + "accessUserSelect": "Selecionar um usuário", "otpEmailEnter": "Digite um e-mail", "otpEmailEnterDescription": "Pressione enter para adicionar um e-mail após digitá-lo no campo de entrada.", "otpEmailErrorInvalid": "Endereço de e-mail inválido. O caractere curinga (*) deve ser a parte local inteira.", @@ -619,8 +619,8 @@ "otpEmailTitleDescription": "Requer autenticação baseada em e-mail para acesso ao recurso", "otpEmailWhitelist": "Lista de E-mails Permitidos", "otpEmailWhitelistList": "E-mails na Lista Permitida", - "otpEmailWhitelistListDescription": "Apenas utilizadores com estes endereços de e-mail poderão aceder este recurso. Eles serão solicitados a inserir uma senha única enviada para seu e-mail. Caracteres curinga (*@example.com) podem ser usados para permitir qualquer endereço de e-mail de um domínio.", - "otpEmailWhitelistSave": "Guardar Lista Permitida", + "otpEmailWhitelistListDescription": "Apenas usuários com estes endereços de e-mail poderão acessar este recurso. Eles serão solicitados a inserir uma senha única enviada para seu e-mail. Caracteres curinga (*@example.com) podem ser usados para permitir qualquer endereço de e-mail de um domínio.", + "otpEmailWhitelistSave": "Salvar Lista Permitida", "passwordAdd": "Adicionar Senha", "passwordRemove": "Remover Senha", "pincodeAdd": "Adicionar Código PIN", @@ -660,14 +660,14 @@ "resourcePincodeSetupDescription": "O código PIN do recurso foi definido com sucesso", "resourcePincodeSetupTitle": "Definir Código PIN", "resourcePincodeSetupTitleDescription": "Defina um código PIN para proteger este recurso", - "resourceRoleDescription": "Administradores sempre podem aceder este recurso.", - "resourceUsersRoles": "Utilizadores e Funções", - "resourceUsersRolesDescription": "Configure quais utilizadores e funções podem visitar este recurso", - "resourceUsersRolesSubmit": "Guardar Utilizadores e Funções", + "resourceRoleDescription": "Administradores sempre podem acessar este recurso.", + "resourceUsersRoles": "Usuários e Funções", + "resourceUsersRolesDescription": "Configure quais usuários e funções podem visitar este recurso", + "resourceUsersRolesSubmit": "Salvar Usuários e Funções", "resourceWhitelistSave": "Salvo com sucesso", "resourceWhitelistSaveDescription": "As configurações da lista permitida foram salvas", "ssoUse": "Usar SSO da Plataforma", - "ssoUseDescription": "Os utilizadores existentes só precisarão fazer login uma vez para todos os recursos que tiverem isso habilitado.", + "ssoUseDescription": "Os usuários existentes só precisarão fazer login uma vez para todos os recursos que tiverem isso habilitado.", "proxyErrorInvalidPort": "Número da porta inválido", "subdomainErrorInvalid": "Subdomínio inválido", "domainErrorFetch": "Erro ao buscar domínios", @@ -693,7 +693,7 @@ "siteDestination": "Site de Destino", "searchSites": "Pesquisar sites", "accessRoleCreate": "Criar Função", - "accessRoleCreateDescription": "Crie uma nova função para agrupar utilizadores e gerir suas permissões.", + "accessRoleCreateDescription": "Crie uma nova função para agrupar usuários e gerenciar suas permissões.", "accessRoleCreateSubmit": "Criar Função", "accessRoleCreated": "Função criada", "accessRoleCreatedDescription": "A função foi criada com sucesso.", @@ -703,13 +703,13 @@ "accessRoleErrorRemove": "Falha ao remover função", "accessRoleErrorRemoveDescription": "Ocorreu um erro ao remover a função.", "accessRoleName": "Nome da Função", - "accessRoleQuestionRemove": "Você está prestes a apagar a função {name}. Você não pode desfazer esta ação.", + "accessRoleQuestionRemove": "Você está prestes a excluir a função {name}. Você não pode desfazer esta ação.", "accessRoleRemove": "Remover Função", "accessRoleRemoveDescription": "Remover uma função da organização", "accessRoleRemoveSubmit": "Remover Função", "accessRoleRemoved": "Função removida", "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 excluir esta função, selecione uma nova função para transferir os membros existentes.", "manage": "Gerir", "sitesNotFound": "Nenhum site encontrado.", "pangolinServerAdmin": "Administrador do Servidor - Pangolin", @@ -919,8 +919,8 @@ "idpErrorNotFound": "IdP não encontrado", "inviteInvalid": "Convite Inválido", "inviteInvalidDescription": "O link do convite é inválido.", - "inviteErrorWrongUser": "O convite não é para este utilizador", - "inviteErrorUserNotExists": "O utilizador não existe. Por favor, crie uma conta primeiro.", + "inviteErrorWrongUser": "O convite não é para este usuário", + "inviteErrorUserNotExists": "O usuário não existe. Por favor, crie uma conta primeiro.", "inviteErrorLoginRequired": "Você deve estar logado para aceitar um convite", "inviteErrorExpired": "O convite pode ter expirado", "inviteErrorRevoked": "O convite pode ter sido revogado", @@ -935,7 +935,7 @@ "home": "Início", "accessControl": "Controle de Acesso", "settings": "Configurações", - "usersAll": "Todos os Utilizadores", + "usersAll": "Todos os Usuários", "license": "Licença", "pangolinDashboard": "Painel - Pangolin", "noResults": "Nenhum resultado encontrado.", @@ -988,8 +988,8 @@ "licenseTierProfessionalRequired": "Edição Profissional Necessária", "licenseTierProfessionalRequiredDescription": "Esta funcionalidade só está disponível na Edição Profissional.", "actionGetOrg": "Obter Organização", - "updateOrgUser": "Atualizar utilizador Org", - "createOrgUser": "Criar utilizador Org", + "updateOrgUser": "Atualizar usuário Org", + "createOrgUser": "Criar usuário Org", "actionUpdateOrg": "Atualizar Organização", "actionUpdateUser": "Atualizar Usuário", "actionGetUser": "Obter Usuário", @@ -1136,8 +1136,8 @@ "sidebarRoles": "Papéis", "sidebarShareableLinks": "Links compartilháveis", "sidebarApiKeys": "Chaves API", - "sidebarSettings": "Configurações", - "sidebarAllUsers": "Todos os utilizadores", + "sidebarSettings": "Confirgurações", + "sidebarAllUsers": "Todos os usuários", "sidebarIdentityProviders": "Provedores de identidade", "sidebarLicense": "Tipo:", "sidebarClients": "Clientes (Beta)", @@ -1190,7 +1190,7 @@ "loading": "Carregando", "restart": "Reiniciar", "domains": "Domínios", - "domainsDescription": "Gerir domínios para sua organização", + "domainsDescription": "Gerencie domínios para sua organização", "domainsSearch": "Pesquisar domínios...", "domainAdd": "Adicionar Domínio", "domainAddDescription": "Registre um novo domínio com sua organização", @@ -1218,7 +1218,7 @@ "pending": "Pendente", "sidebarBilling": "Faturamento", "billing": "Faturamento", - "orgBillingDescription": "Gerir suas informações de faturação e assinaturas", + "orgBillingDescription": "Gerencie suas informações de faturamento e assinaturas", "github": "GitHub", "pangolinHosted": "Hospedagem Pangolin", "fossorial": "Fossorial", @@ -1233,7 +1233,7 @@ "completeSetup": "Configuração Completa", "accountSetupSuccess": "Configuração da conta concluída! Bem-vindo ao Pangolin!", "documentation": "Documentação", - "saveAllSettings": "Guardar Todas as Configurações", + "saveAllSettings": "Salvar Todas as Configurações", "settingsUpdated": "Configurações atualizadas", "settingsUpdatedDescription": "Todas as configurações foram atualizadas com sucesso", "settingsErrorUpdate": "Falha ao atualizar configurações", @@ -1258,55 +1258,55 @@ "domainPickerSubdomain": "Subdomínio: {subdomain}", "domainPickerNamespace": "Namespace: {namespace}", "domainPickerShowMore": "Mostrar Mais", - "regionSelectorTitle": "Selecionar Região", - "regionSelectorInfo": "Selecionar uma região nos ajuda a fornecer melhor desempenho para sua localização. Você não precisa estar na mesma região que seu servidor.", - "regionSelectorPlaceholder": "Escolher uma região", - "regionSelectorComingSoon": "Em breve", - "billingLoadingSubscription": "Carregando assinatura...", - "billingFreeTier": "Plano Gratuito", - "billingWarningOverLimit": "Aviso: Você ultrapassou um ou mais limites de uso. Seus sites não se conectarão até você modificar sua assinatura ou ajustar seu uso.", - "billingUsageLimitsOverview": "Visão Geral dos Limites de Uso", - "billingMonitorUsage": "Monitore seu uso em relação aos limites configurados. Se precisar aumentar esses limites, entre em contato conosco support@fossorial.io.", - "billingDataUsage": "Uso de Dados", - "billingOnlineTime": "Tempo Online do Site", - "billingUsers": "Usuários Ativos", - "billingDomains": "Domínios Ativos", - "billingRemoteExitNodes": "Nodos Auto-Hospedados Ativos", - "billingNoLimitConfigured": "Nenhum limite configurado", - "billingEstimatedPeriod": "Período Estimado de Cobrança", - "billingIncludedUsage": "Uso Incluído", - "billingIncludedUsageDescription": "Uso incluído no seu plano de assinatura atual", - "billingFreeTierIncludedUsage": "Limites de uso do plano gratuito", - "billingIncluded": "incluído", - "billingEstimatedTotal": "Total Estimado:", - "billingNotes": "Notas", - "billingEstimateNote": "Esta é uma estimativa baseada no seu uso atual.", - "billingActualChargesMayVary": "As cobranças reais podem variar.", - "billingBilledAtEnd": "Sua cobrança será feita ao final do período de cobrança.", - "billingModifySubscription": "Modificar Assinatura", - "billingStartSubscription": "Iniciar Assinatura", - "billingRecurringCharge": "Cobrança Recorrente", - "billingManageSubscriptionSettings": "Gerenciar as configurações e preferências da sua assinatura", - "billingNoActiveSubscription": "Você não tem uma assinatura ativa. Inicie sua assinatura para aumentar os limites de uso.", - "billingFailedToLoadSubscription": "Falha ao carregar assinatura", - "billingFailedToLoadUsage": "Falha ao carregar uso", - "billingFailedToGetCheckoutUrl": "Falha ao obter URL de checkout", - "billingPleaseTryAgainLater": "Por favor, tente novamente mais tarde.", - "billingCheckoutError": "Erro de Checkout", - "billingFailedToGetPortalUrl": "Falha ao obter URL do portal", - "billingPortalError": "Erro do Portal", - "billingDataUsageInfo": "Você é cobrado por todos os dados transferidos através de seus túneis seguros quando conectado à nuvem. Isso inclui o tráfego de entrada e saída em todos os seus sites. Quando você atingir o seu limite, seus sites desconectarão até que você atualize seu plano ou reduza o uso. Os dados não serão cobrados ao usar os nós.", - "billingOnlineTimeInfo": "Cobrança de acordo com o tempo em que seus sites permanecem conectados à nuvem. Por exemplo, 44,640 minutos é igual a um site que roda 24/7 para um mês inteiro. Quando você atinge o seu limite, seus sites desconectarão até que você faça o upgrade do seu plano ou reduza o uso. O tempo não é cobrado ao usar nós.", - "billingUsersInfo": "Você será cobrado por cada usuário em sua organização. A cobrança é calculada diariamente com base no número de contas de usuário ativas em sua organização.", - "billingDomainInfo": "Você será cobrado por cada domínio em sua organização. A cobrança é calculada diariamente com base no número de contas de domínio ativas em sua organização.", - "billingRemoteExitNodesInfo": "Você será cobrado por cada Nodo gerenciado em sua organização. A cobrança é calculada diariamente com base no número de Nodos gerenciados ativos em sua organização.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Domínio Não Encontrado", "domainNotFoundDescription": "Este recurso está desativado porque o domínio não existe mais em nosso sistema. Defina um novo domínio para este recurso.", "failed": "Falhou", "createNewOrgDescription": "Crie uma nova organização", "organization": "Organização", "port": "Porta", - "securityKeyManage": "Gerir chaves de segurança", + "securityKeyManage": "Gerenciar chaves de segurança", "securityKeyDescription": "Adicionar ou remover chaves de segurança para autenticação sem senha", "securityKeyRegister": "Registrar nova chave de segurança", "securityKeyList": "Suas chaves de segurança", @@ -1357,13 +1357,13 @@ "createDomainARecords": "Registros A", "createDomainRecordNumber": "Registrar {number}", "createDomainTxtRecords": "Registros TXT", - "createDomainSaveTheseRecords": "Guardar Esses Registros", + "createDomainSaveTheseRecords": "Salvar Esses Registros", "createDomainSaveTheseRecordsDescription": "Certifique-se de salvar esses registros DNS, pois você não os verá novamente.", "createDomainDnsPropagation": "Propagação DNS", "createDomainDnsPropagationDescription": "Alterações no DNS podem levar algum tempo para se propagar pela internet. Pode levar de alguns minutos a 48 horas, dependendo do seu provedor de DNS e das configurações de TTL.", "resourcePortRequired": "Número da porta é obrigatório para recursos não-HTTP", "resourcePortNotAllowed": "Número da porta não deve ser definido para recursos HTTP", - "billingPricingCalculatorLink": "Calculadora de Preços", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Concordo com", "termsOfService": "os termos de serviço", @@ -1412,41 +1412,41 @@ "addNewTarget": "Adicionar Novo Alvo", "targetsList": "Lista de Alvos", "targetErrorDuplicateTargetFound": "Alvo duplicado encontrado", - "healthCheckHealthy": "Saudável", - "healthCheckUnhealthy": "Não Saudável", - "healthCheckUnknown": "Desconhecido", - "healthCheck": "Verificação de Saúde", - "configureHealthCheck": "Configurar Verificação de Saúde", - "configureHealthCheckDescription": "Configure a monitorização de saúde para {target}", - "enableHealthChecks": "Ativar Verificações de Saúde", - "enableHealthChecksDescription": "Monitore a saúde deste alvo. Você pode monitorar um ponto de extremidade diferente do alvo, se necessário.", - "healthScheme": "Método", - "healthSelectScheme": "Selecione o Método", - "healthCheckPath": "Caminho", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", "healthHostname": "IP / Host", - "healthPort": "Porta", - "healthCheckPathDescription": "O caminho para verificar o estado de saúde.", - "healthyIntervalSeconds": "Intervalo Saudável", - "unhealthyIntervalSeconds": "Intervalo Não Saudável", - "IntervalSeconds": "Intervalo Saudável", - "timeoutSeconds": "Tempo Limite", - "timeIsInSeconds": "O tempo está em segundos", - "retryAttempts": "Tentativas de Repetição", - "expectedResponseCodes": "Códigos de Resposta Esperados", - "expectedResponseCodesDescription": "Código de status HTTP que indica estado saudável. Se deixado em branco, 200-300 é considerado saudável.", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Cabeçalhos Personalizados", - "customHeadersDescription": "Separados por cabeçalhos da nova linha: Nome do Cabeçalho: valor", - "headersValidationError": "Cabeçalhos devem estar no formato: Nome do Cabeçalho: valor.", - "saveHealthCheck": "Salvar Verificação de Saúde", - "healthCheckSaved": "Verificação de Saúde Salva", - "healthCheckSavedDescription": "Configuração de verificação de saúde salva com sucesso", - "healthCheckError": "Erro de Verificação de Saúde", - "healthCheckErrorDescription": "Ocorreu um erro ao salvar a configuração de verificação de saúde", - "healthCheckPathRequired": "O caminho de verificação de saúde é obrigatório", - "healthCheckMethodRequired": "O método HTTP é obrigatório", - "healthCheckIntervalMin": "O intervalo de verificação deve ser de pelo menos 5 segundos", - "healthCheckTimeoutMin": "O tempo limite deve ser de pelo menos 1 segundo", - "healthCheckRetryMin": "As tentativas de repetição devem ser pelo menos 1", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "Método HTTP", "selectHttpMethod": "Selecionar método HTTP", "domainPickerSubdomainLabel": "Subdomínio", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Digite um subdomínio para buscar e selecionar entre os domínios gratuitos disponíveis.", "domainPickerFreeDomains": "Domínios Gratuitos", "domainPickerSearchForAvailableDomains": "Pesquise por domínios disponíveis", - "domainPickerNotWorkSelfHosted": "Nota: Domínios gratuitos fornecidos não estão disponíveis para instâncias auto-hospedadas no momento.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Domínio", "resourceEditDomain": "Editar Domínio", "siteName": "Nome do Site", @@ -1481,7 +1481,7 @@ "editInternalResourceDialogSitePort": "Porta do Site", "editInternalResourceDialogTargetConfiguration": "Configuração do Alvo", "editInternalResourceDialogCancel": "Cancelar", - "editInternalResourceDialogSaveResource": "Guardar Recurso", + "editInternalResourceDialogSaveResource": "Salvar Recurso", "editInternalResourceDialogSuccess": "Sucesso", "editInternalResourceDialogInternalResourceUpdatedSuccessfully": "Recurso interno atualizado com sucesso", "editInternalResourceDialogError": "Erro", @@ -1508,7 +1508,7 @@ "createInternalResourceDialogTcp": "TCP", "createInternalResourceDialogUdp": "UDP", "createInternalResourceDialogSitePort": "Porta do Site", - "createInternalResourceDialogSitePortDescription": "Use esta porta para aceder o recurso no site quando conectado com um cliente.", + "createInternalResourceDialogSitePortDescription": "Use esta porta para acessar o recurso no site quando conectado com um cliente.", "createInternalResourceDialogTargetConfiguration": "Configuração do Alvo", "createInternalResourceDialogDestinationIPDescription": "O IP ou endereço do hostname do recurso na rede do site.", "createInternalResourceDialogDestinationPortDescription": "A porta no IP de destino onde o recurso está acessível.", @@ -1532,7 +1532,7 @@ "siteAddress": "Endereço do Site", "siteAddressDescription": "Especificar o endereço IP do host para que os clientes se conectem. Este é o endereço interno do site na rede Pangolin para os clientes endereçarem. Deve estar dentro da sub-rede da Organização.", "autoLoginExternalIdp": "Login Automático com IDP Externo", - "autoLoginExternalIdpDescription": "Redirecionar imediatamente o utilizador para o IDP externo para autenticação.", + "autoLoginExternalIdpDescription": "Redirecionar imediatamente o usuário para o IDP externo para autenticação.", "selectIdp": "Selecionar IDP", "selectIdpPlaceholder": "Escolher um IDP...", "selectIdpRequired": "Por favor, selecione um IDP quando o login automático estiver ativado.", @@ -1543,72 +1543,72 @@ "autoLoginError": "Erro de Login Automático", "autoLoginErrorNoRedirectUrl": "Nenhum URL de redirecionamento recebido do provedor de identidade.", "autoLoginErrorGeneratingUrl": "Falha ao gerar URL de autenticação.", - "remoteExitNodeManageRemoteExitNodes": "Gerenciar Auto-Hospedados", - "remoteExitNodeDescription": "Gerencie os nós para estender sua conectividade de rede", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Buscar nós...", - "remoteExitNodeAdd": "Adicionar node", - "remoteExitNodeErrorDelete": "Erro ao excluir nó", - "remoteExitNodeQuestionRemove": "Tem certeza que deseja remover o nó {selectedNode} da organização?", - "remoteExitNodeMessageRemove": "Uma vez removido, o nó não estará mais acessível.", - "remoteExitNodeMessageConfirm": "Para confirmar, por favor, digite o nome do nó abaixo.", - "remoteExitNodeConfirmDelete": "Confirmar exclusão do nó", - "remoteExitNodeDelete": "Excluir nó", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Criar nó", - "description": "Crie um novo nó para estender sua conectividade de rede", - "viewAllButton": "Ver Todos os Nós", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Estratégia de Criação", - "description": "Escolha isto para configurar o seu nó manualmente ou gerar novas credenciais.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Adotar Nodo", - "description": "Escolha isto se você já tem credenciais para o nó." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Gerar Chaves", - "description": "Escolha esta opção se você quer gerar novas chaves para o nó" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Adotar Nodo Existente", - "description": "Digite as credenciais do nó existente que deseja adoptar", - "nodeIdLabel": "Nó ID", - "nodeIdDescription": "O ID do nó existente que você deseja adoptar", - "secretLabel": "Chave Secreta", - "secretDescription": "A chave secreta do nó existente", - "submitButton": "Nó Adotado" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Credenciais Geradas", - "description": "Use estas credenciais geradas para configurar o seu nó", - "nodeIdTitle": "Nó ID", - "secretTitle": "Chave Secreta", - "saveCredentialsTitle": "Adicionar Credenciais à Configuração", - "saveCredentialsDescription": "Adicione essas credenciais ao arquivo de configuração do seu nodo de Pangolin auto-hospedado para completar a conexão.", - "submitButton": "Criar nó" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "ID do nó e Segredo são necessários ao adotar um nó existente" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Falha ao carregar padrões", - "defaultsNotLoaded": "Padrões não carregados", - "createFailed": "Falha ao criar nó" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Nó criado com sucesso" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Seleção de nó", - "remoteExitNodeSelectionDescription": "Selecione um nó para encaminhar o tráfego para este site local", - "remoteExitNodeRequired": "Um nó deve ser seleccionado para sites locais", - "noRemoteExitNodesAvailable": "Nenhum nó disponível", - "noRemoteExitNodesAvailableDescription": "Nenhum nó está disponível para esta organização. Crie um nó primeiro para usar sites locais.", - "exitNode": "Nodo de Saída", - "country": "País", - "rulesMatchCountry": "Atualmente baseado no IP de origem", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Gerenciado Auto-Hospedado", "description": "Servidor Pangolin auto-hospedado mais confiável e com baixa manutenção com sinos extras e assobiamentos", @@ -1625,7 +1625,7 @@ }, "benefitLessMaintenance": { "title": "Menos manutenção", - "description": "Sem migrações, backups ou infraestrutura extra para gerir. Lidamos com isso na nuvem." + "description": "Sem migrações, backups ou infraestrutura extra para gerenciar. Lidamos com isso na nuvem." }, "benefitCloudFailover": { "title": "Falha na nuvem", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Domínio Internacional Detectado", "willbestoredas": "Será armazenado como:", - "roleMappingDescription": "Determinar como as funções são atribuídas aos usuários quando eles fazem login quando Auto Provisão está habilitada.", - "selectRole": "Selecione uma função", - "roleMappingExpression": "Expressão", - "selectRolePlaceholder": "Escolha uma função", - "selectRoleDescription": "Selecione uma função para atribuir a todos os usuários deste provedor de identidade", - "roleMappingExpressionDescription": "Insira uma expressão JMESPath para extrair informações da função do token de ID", - "idpTenantIdRequired": "ID do inquilino é necessária", - "invalidValue": "Valor Inválido", - "idpTypeLabel": "Tipo de provedor de identidade", - "roleMappingExpressionPlaceholder": "ex.: Contem (grupos, 'administrador') && 'Administrador' 「'Membro'", - "idpGoogleConfiguration": "Configuração do Google", - "idpGoogleConfigurationDescription": "Configurar suas credenciais do Google OAuth2", - "idpGoogleClientIdDescription": "Seu ID de Cliente OAuth2 do Google", - "idpGoogleClientSecretDescription": "Seu Segredo de Cliente OAuth2 do Google", - "idpAzureConfiguration": "Configuração de ID do Azure Entra", - "idpAzureConfigurationDescription": "Configure as suas credenciais do Azure Entra ID OAuth2", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "seu-tenente-id", - "idpAzureTenantIdDescription": "Seu ID do tenant Azure (encontrado na visão geral do diretório ativo Azure)", - "idpAzureClientIdDescription": "Seu ID de Cliente de Registro do App Azure", - "idpAzureClientSecretDescription": "Seu segredo de cliente de registro de aplicativos Azure", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Configuração do Google", - "idpAzureConfigurationTitle": "Configuração de ID do Azure Entra", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Seu ID de Cliente de Registro do App Azure", - "idpAzureClientSecretDescription2": "Seu segredo de cliente de registro de aplicativos Azure", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Provedor Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Sub-rede", - "subnetDescription": "A sub-rede para a configuração de rede dessa organização.", - "authPage": "Página de Autenticação", - "authPageDescription": "Configurar a página de autenticação para sua organização", - "authPageDomain": "Domínio de Página Autenticação", - "noDomainSet": "Nenhum domínio definido", - "changeDomain": "Alterar domínio", - "selectDomain": "Selecionar domínio", - "restartCertificate": "Reiniciar Certificado", - "editAuthPageDomain": "Editar Página de Autenticação", - "setAuthPageDomain": "Definir domínio da página de autenticação", - "failedToFetchCertificate": "Falha ao buscar o certificado", - "failedToRestartCertificate": "Falha ao reiniciar o certificado", - "addDomainToEnableCustomAuthPages": "Adicione um domínio para habilitar páginas de autenticação personalizadas para sua organização", - "selectDomainForOrgAuthPage": "Selecione um domínio para a página de autenticação da organização", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Domínio fornecido", "domainPickerFreeProvidedDomain": "Domínio fornecido grátis", "domainPickerVerified": "Verificada", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" não pôde ser válido para {domain}.", "domainPickerSubdomainSanitized": "Subdomínio banalizado", "domainPickerSubdomainCorrected": "\"{sub}\" foi corrigido para \"{sanitized}\"", - "orgAuthSignInTitle": "Entrar na sua organização", - "orgAuthChooseIdpDescription": "Escolha o seu provedor de identidade para continuar", - "orgAuthNoIdpConfigured": "Esta organização não tem nenhum provedor de identidade configurado. Você pode entrar com a identidade do seu Pangolin.", - "orgAuthSignInWithPangolin": "Entrar com o Pangolin", - "subscriptionRequiredToUse": "Uma assinatura é necessária para usar esse recurso.", - "idpDisabled": "Provedores de identidade estão desabilitados.", - "orgAuthPageDisabled": "A página de autenticação da organização está desativada.", - "domainRestartedDescription": "Verificação de domínio reiniciado com sucesso", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Editar arquivo: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Editar arquivo: docker-compose.yml", "emailVerificationRequired": "Verificação de e-mail é necessária. Por favor, faça login novamente via {dashboardUrl}/auth/login conclui esta etapa. Em seguida, volte aqui.", - "twoFactorSetupRequired": "Configuração de autenticação de dois fatores é necessária. Por favor, entre novamente via {dashboardUrl}/auth/login conclua este passo. Em seguida, volte aqui." + "twoFactorSetupRequired": "Configuração de autenticação de dois fatores é necessária. Por favor, entre novamente via {dashboardUrl}/auth/login conclua este passo. Em seguida, volte aqui.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From 38c3c49778c200d8555d0d176f0b1fd2a59d0d2e Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:23 -0700 Subject: [PATCH 10/28] New translations en-us.json (Russian) --- messages/ru-RU.json | 363 ++++++++++++++++++++++---------------------- 1 file changed, 184 insertions(+), 179 deletions(-) diff --git a/messages/ru-RU.json b/messages/ru-RU.json index 290d0215..a2508d47 100644 --- a/messages/ru-RU.json +++ b/messages/ru-RU.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Простейший способ создать точку входа в вашу сеть. Дополнительная настройка не требуется.", "siteWg": "Базовый WireGuard", "siteWgDescription": "Используйте любой клиент WireGuard для открытия туннеля. Требуется ручная настройка NAT.", - "siteWgDescriptionSaas": "Используйте любой клиент WireGuard для создания туннеля. Требуется ручная настройка NAT. РАБОТАЕТ ТОЛЬКО НА САМОСТОЯТЕЛЬНО РАЗМЕЩЕННЫХ УЗЛАХ", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Только локальные ресурсы. Без туннелирования.", - "siteLocalDescriptionSaas": "Только локальные ресурсы. Без туннелирования. РАБОТАЕТ ТОЛЬКО НА САМОСТОЯТЕЛЬНО РАЗМЕЩЕННЫХ УЗЛАХ", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Просмотреть все сайты", "siteTunnelDescription": "Выберите способ подключения к вашему сайту", "siteNewtCredentials": "Учётные данные Newt", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS-ресурс", "resourceHTTPDescription": "Проксирование запросов к вашему приложению через HTTPS с использованием поддомена или базового домена.", "resourceRaw": "Сырой TCP/UDP-ресурс", - "resourceRawDescription": "Проксирование запросов к вашему приложению через TCP/UDP с использованием по номеру порта.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Создание ресурса", "resourceCreateDescription": "Следуйте инструкциям ниже для создания нового ресурса", "resourceSeeAll": "Посмотреть все ресурсы", @@ -168,9 +168,9 @@ "siteSelect": "Выберите сайт", "siteSearch": "Поиск сайта", "siteNotFound": "Сайт не найден.", - "selectCountry": "Выберите страну", - "searchCountries": "Поиск стран...", - "noCountryFound": "Страна не найдена.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Этот сайт предоставит подключение к цели.", "resourceType": "Тип ресурса", "resourceTypeDescription": "Определите, как вы хотите получать доступ к вашему ресурсу", @@ -239,7 +239,7 @@ "accessUserCreate": "Создать пользователя", "accessUserRemove": "Удалить пользователя", "username": "Имя пользователя", - "identityProvider": "Поставщик удостоверений", + "identityProvider": "Identity Provider", "role": "Роль", "nameRequired": "Имя обязательно", "accessRolesManage": "Управление ролями", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Поддомен: {subdomain}", "domainPickerNamespace": "Пространство имен: {namespace}", "domainPickerShowMore": "Показать еще", - "regionSelectorTitle": "Выберите регион", - "regionSelectorInfo": "Выбор региона помогает нам обеспечить лучшее качество обслуживания для вашего расположения. Вам необязательно находиться в том же регионе, что и ваш сервер.", - "regionSelectorPlaceholder": "Выбор региона", - "regionSelectorComingSoon": "Скоро будет", - "billingLoadingSubscription": "Загрузка подписки...", - "billingFreeTier": "Бесплатный уровень", - "billingWarningOverLimit": "Предупреждение: Вы превысили одну или несколько границ использования. Ваши сайты не подключатся, пока вы не измените подписку или не скорректируете использование.", - "billingUsageLimitsOverview": "Обзор лимитов использования", - "billingMonitorUsage": "Контролируйте использование в соответствии с установленными лимитами. Если вам требуется увеличение лимитов, пожалуйста, свяжитесь с нами support@fossorial.io.", - "billingDataUsage": "Использование данных", - "billingOnlineTime": "Время работы сайта", - "billingUsers": "Активные пользователи", - "billingDomains": "Активные домены", - "billingRemoteExitNodes": "Активные самоуправляемые узлы", - "billingNoLimitConfigured": "Лимит не установлен", - "billingEstimatedPeriod": "Предполагаемый период выставления счетов", - "billingIncludedUsage": "Включенное использование", - "billingIncludedUsageDescription": "Использование, включенное в ваш текущий план подписки", - "billingFreeTierIncludedUsage": "Бесплатное использование ограничений", - "billingIncluded": "включено", - "billingEstimatedTotal": "Предполагаемая сумма:", - "billingNotes": "Заметки", - "billingEstimateNote": "Это приблизительная оценка на основании вашего текущего использования.", - "billingActualChargesMayVary": "Фактические начисления могут отличаться.", - "billingBilledAtEnd": "С вас будет выставлен счет в конце периода выставления счетов.", - "billingModifySubscription": "Изменить подписку", - "billingStartSubscription": "Начать подписку", - "billingRecurringCharge": "Периодический взнос", - "billingManageSubscriptionSettings": "Управляйте настройками и предпочтениями вашей подписки", - "billingNoActiveSubscription": "У вас нет активной подписки. Начните подписку, чтобы увеличить лимиты использования.", - "billingFailedToLoadSubscription": "Не удалось загрузить подписку", - "billingFailedToLoadUsage": "Не удалось загрузить использование", - "billingFailedToGetCheckoutUrl": "Не удалось получить URL-адрес для оплаты", - "billingPleaseTryAgainLater": "Пожалуйста, повторите попытку позже.", - "billingCheckoutError": "Ошибка при оформлении заказа", - "billingFailedToGetPortalUrl": "Не удалось получить URL-адрес портала", - "billingPortalError": "Ошибка портала", - "billingDataUsageInfo": "Вы несете ответственность за все данные, переданные через безопасные туннели при подключении к облаку. Это включает как входящий, так и исходящий трафик на всех ваших сайтах. При достижении лимита ваши сайты будут отключаться до тех пор, пока вы не обновите план или не уменьшите его использование. При использовании узлов не взимается плата.", - "billingOnlineTimeInfo": "Вы тарифицируете на то, как долго ваши сайты будут подключены к облаку. Например, 44 640 минут равны одному сайту, работающему круглосуточно за весь месяц. Когда вы достигните лимита, ваши сайты будут отключаться до тех пор, пока вы не обновите тарифный план или не сократите нагрузку. При использовании узлов не тарифицируется.", - "billingUsersInfo": "С вас взимается плата за каждого пользователя в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных учетных записей пользователей в вашей организации.", - "billingDomainInfo": "С вас взимается плата за каждый домен в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных учетных записей доменов в вашей организации.", - "billingRemoteExitNodesInfo": "С вас взимается плата за каждый управляемый узел в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных управляемых узлов в вашей организации.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Домен не найден", "domainNotFoundDescription": "Этот ресурс отключен, так как домен больше не существует в нашей системе. Пожалуйста, установите новый домен для этого ресурса.", "failed": "Ошибка", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Изменения DNS могут занять некоторое время для распространения через интернет. Это может занять от нескольких минут до 48 часов в зависимости от вашего DNS провайдера и настроек TTL.", "resourcePortRequired": "Номер порта необходим для не-HTTP ресурсов", "resourcePortNotAllowed": "Номер порта не должен быть установлен для HTTP ресурсов", - "billingPricingCalculatorLink": "Калькулятор расценок", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Я согласен с", "termsOfService": "условия использования", @@ -1412,41 +1412,41 @@ "addNewTarget": "Добавить новую цель", "targetsList": "Список целей", "targetErrorDuplicateTargetFound": "Обнаружена дублирующаяся цель", - "healthCheckHealthy": "Здоровый", - "healthCheckUnhealthy": "Нездоровый", - "healthCheckUnknown": "Неизвестно", - "healthCheck": "Проверка здоровья", - "configureHealthCheck": "Настроить проверку здоровья", - "configureHealthCheckDescription": "Настройте мониторинг состояния для {target}", - "enableHealthChecks": "Включить проверки здоровья", - "enableHealthChecksDescription": "Мониторинг здоровья этой цели. При необходимости можно контролировать другую конечную точку.", - "healthScheme": "Метод", - "healthSelectScheme": "Выберите метод", - "healthCheckPath": "Путь", - "healthHostname": "IP / хост", - "healthPort": "Порт", - "healthCheckPathDescription": "Путь к проверке состояния здоровья.", - "healthyIntervalSeconds": "Интервал здоровых состояний", - "unhealthyIntervalSeconds": "Интервал нездоровых состояний", - "IntervalSeconds": "Интервал здоровых состояний", - "timeoutSeconds": "Тайм-аут", - "timeIsInSeconds": "Время указано в секундах", - "retryAttempts": "Количество попыток повторного запроса", - "expectedResponseCodes": "Ожидаемые коды ответов", - "expectedResponseCodesDescription": "HTTP-код состояния, указывающий на здоровое состояние. Если оставить пустым, 200-300 считается здоровым.", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", + "healthHostname": "IP / Host", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Пользовательские заголовки", - "customHeadersDescription": "Заголовки новой строки, разделённые: название заголовка: значение", - "headersValidationError": "Заголовки должны быть в формате: Название заголовка: значение.", - "saveHealthCheck": "Сохранить проверку здоровья", - "healthCheckSaved": "Проверка здоровья сохранена", - "healthCheckSavedDescription": "Конфигурация проверки состояния успешно сохранена", - "healthCheckError": "Ошибка проверки состояния", - "healthCheckErrorDescription": "Произошла ошибка при сохранении конфигурации проверки состояния", - "healthCheckPathRequired": "Требуется путь проверки состояния", - "healthCheckMethodRequired": "Требуется метод HTTP", - "healthCheckIntervalMin": "Интервал проверки должен составлять не менее 5 секунд", - "healthCheckTimeoutMin": "Тайм-аут должен составлять не менее 1 секунды", - "healthCheckRetryMin": "Количество попыток должно быть не менее 1", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP метод", "selectHttpMethod": "Выберите HTTP метод", "domainPickerSubdomainLabel": "Поддомен", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Введите поддомен для поиска и выбора из доступных свободных доменов.", "domainPickerFreeDomains": "Свободные домены", "domainPickerSearchForAvailableDomains": "Поиск доступных доменов", - "domainPickerNotWorkSelfHosted": "Примечание: бесплатные предоставляемые домены в данный момент недоступны для самоуправляемых экземпляров.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Домен", "resourceEditDomain": "Редактировать домен", "siteName": "Имя сайта", @@ -1543,72 +1543,72 @@ "autoLoginError": "Ошибка автоматического входа", "autoLoginErrorNoRedirectUrl": "URL-адрес перенаправления не получен от провайдера удостоверения.", "autoLoginErrorGeneratingUrl": "Не удалось сгенерировать URL-адрес аутентификации.", - "remoteExitNodeManageRemoteExitNodes": "Управление самоуправляемым", - "remoteExitNodeDescription": "Управляйте узлами для расширения сетевого подключения", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Поиск узлов...", - "remoteExitNodeAdd": "Добавить узел", - "remoteExitNodeErrorDelete": "Ошибка удаления узла", - "remoteExitNodeQuestionRemove": "Вы уверены, что хотите удалить узел {selectedNode} из организации?", - "remoteExitNodeMessageRemove": "После удаления узел больше не будет доступен.", - "remoteExitNodeMessageConfirm": "Для подтверждения введите имя узла ниже.", - "remoteExitNodeConfirmDelete": "Подтвердите удаление узла", - "remoteExitNodeDelete": "Удалить узел", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Создать узел", - "description": "Создайте новый узел, чтобы расширить сетевое подключение", - "viewAllButton": "Все узлы", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Стратегия создания", - "description": "Выберите эту опцию для настройки вашего узла или создания новых учетных данных.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Принять узел", - "description": "Выберите это, если у вас уже есть учетные данные для узла." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Сгенерировать ключи", - "description": "Выберите это, если вы хотите создать новые ключи для узла" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Принять существующий узел", - "description": "Введите учетные данные существующего узла, который вы хотите принять", - "nodeIdLabel": "ID узла", - "nodeIdDescription": "ID существующего узла, который вы хотите принять", - "secretLabel": "Секретный ключ", - "secretDescription": "Секретный ключ существующего узла", - "submitButton": "Принять узел" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Сгенерированные учетные данные", - "description": "Используйте эти учётные данные для настройки вашего узла", - "nodeIdTitle": "ID узла", - "secretTitle": "Секретный ключ", - "saveCredentialsTitle": "Добавить учетные данные в конфигурацию", - "saveCredentialsDescription": "Добавьте эти учетные данные в файл конфигурации вашего самоуправляемого узла Pangolin, чтобы завершить подключение.", - "submitButton": "Создать узел" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "ID узла и секрет требуются при установке существующего узла" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Не удалось загрузить параметры по умолчанию", - "defaultsNotLoaded": "Параметры по умолчанию не загружены", - "createFailed": "Не удалось создать узел" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Узел успешно создан" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Выбор узла", - "remoteExitNodeSelectionDescription": "Выберите узел для маршрутизации трафика для этого локального сайта", - "remoteExitNodeRequired": "Узел должен быть выбран для локальных сайтов", - "noRemoteExitNodesAvailable": "Нет доступных узлов", - "noRemoteExitNodesAvailableDescription": "Для этой организации узлы не доступны. Сначала создайте узел, чтобы использовать локальные сайты.", - "exitNode": "Узел выхода", - "country": "Страна", - "rulesMatchCountry": "В настоящее время основано на исходном IP", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Управляемый с самовывоза", "description": "Более надежный и низко обслуживаемый сервер Pangolin с дополнительными колокольнями и свистками", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Обнаружен международный домен", "willbestoredas": "Будет храниться как:", - "roleMappingDescription": "Определите, как роли, назначаемые пользователям, когда они войдут в систему автоматического профиля.", - "selectRole": "Выберите роль", - "roleMappingExpression": "Выражение", - "selectRolePlaceholder": "Выберите роль", - "selectRoleDescription": "Выберите роль, чтобы назначить всем пользователям этого поставщика идентификации", - "roleMappingExpressionDescription": "Введите выражение JMESPath, чтобы извлечь информацию о роли из ID токена", - "idpTenantIdRequired": "Требуется ID владельца", - "invalidValue": "Неверное значение", - "idpTypeLabel": "Тип поставщика удостоверений", - "roleMappingExpressionPlaceholder": "например, contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Конфигурация Google", - "idpGoogleConfigurationDescription": "Настройка учетных данных Google OAuth2", - "idpGoogleClientIdDescription": "Ваш Google OAuth2 ID клиента", - "idpGoogleClientSecretDescription": "Ваш Google OAuth2 Секрет", - "idpAzureConfiguration": "Конфигурация Azure Entra ID", - "idpAzureConfigurationDescription": "Настройте учетные данные Azure Entra ID OAuth2", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "ваш тенант-id", - "idpAzureTenantIdDescription": "Идентификатор арендатора Azure (найден в обзоре Active Directory Azure)", - "idpAzureClientIdDescription": "Ваш идентификатор клиента Azure App", - "idpAzureClientSecretDescription": "Секрет регистрации клиента Azure App", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Конфигурация Google", - "idpAzureConfigurationTitle": "Конфигурация Azure Entra ID", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Ваш идентификатор клиента Azure App", - "idpAzureClientSecretDescription2": "Секрет регистрации клиента Azure App", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC провайдер", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Подсеть", - "subnetDescription": "Подсеть для конфигурации сети этой организации.", - "authPage": "Страница авторизации", - "authPageDescription": "Настройка страницы авторизации для вашей организации", - "authPageDomain": "Домен страницы авторизации", - "noDomainSet": "Домен не установлен", - "changeDomain": "Изменить домен", - "selectDomain": "Выберите домен", - "restartCertificate": "Перезапустить сертификат", - "editAuthPageDomain": "Редактировать домен страницы авторизации", - "setAuthPageDomain": "Установить домен страницы авторизации", - "failedToFetchCertificate": "Не удалось получить сертификат", - "failedToRestartCertificate": "Не удалось перезапустить сертификат", - "addDomainToEnableCustomAuthPages": "Добавьте домен для включения пользовательских страниц аутентификации для вашей организации", - "selectDomainForOrgAuthPage": "Выберите домен для страницы аутентификации организации", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Домен предоставлен", "domainPickerFreeProvidedDomain": "Бесплатный домен", "domainPickerVerified": "Подтверждено", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" не может быть действительным для {domain}.", "domainPickerSubdomainSanitized": "Субдомен очищен", "domainPickerSubdomainCorrected": "\"{sub}\" был исправлен на \"{sanitized}\"", - "orgAuthSignInTitle": "Войдите в свою организацию", - "orgAuthChooseIdpDescription": "Выберите своего поставщика удостоверений личности для продолжения", - "orgAuthNoIdpConfigured": "Эта организация не имеет настроенных поставщиков идентификационных данных. Вместо этого вы можете войти в свой Pangolin.", - "orgAuthSignInWithPangolin": "Войти через Pangolin", - "subscriptionRequiredToUse": "Для использования этой функции требуется подписка.", - "idpDisabled": "Провайдеры идентификации отключены.", - "orgAuthPageDisabled": "Страница авторизации организации отключена.", - "domainRestartedDescription": "Проверка домена успешно перезапущена", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Редактировать файл: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Редактировать файл: docker-compose.yml", "emailVerificationRequired": "Требуется подтверждение адреса электронной почты. Пожалуйста, войдите снова через {dashboardUrl}/auth/login завершить этот шаг. Затем вернитесь сюда.", - "twoFactorSetupRequired": "Требуется настройка двухфакторной аутентификации. Пожалуйста, войдите снова через {dashboardUrl}/auth/login завершить этот шаг. Затем вернитесь сюда." + "twoFactorSetupRequired": "Требуется настройка двухфакторной аутентификации. Пожалуйста, войдите снова через {dashboardUrl}/auth/login завершить этот шаг. Затем вернитесь сюда.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From 71ba98075777e0742de67f4c51412f36ee6a37f0 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:24 -0700 Subject: [PATCH 11/28] New translations en-us.json (Turkish) --- messages/tr-TR.json | 369 ++++++++++++++++++++++---------------------- 1 file changed, 187 insertions(+), 182 deletions(-) diff --git a/messages/tr-TR.json b/messages/tr-TR.json index 33c37327..62991e05 100644 --- a/messages/tr-TR.json +++ b/messages/tr-TR.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Ağınıza giriş noktası oluşturmanın en kolay yolu. Ekstra kurulum gerekmez.", "siteWg": "Temel WireGuard", "siteWgDescription": "Bir tünel oluşturmak için herhangi bir WireGuard istemcisi kullanın. Manuel NAT kurulumu gereklidir.", - "siteWgDescriptionSaas": "Bir tünel oluşturmak için herhangi bir WireGuard istemcisi kullanın. Manuel NAT kurulumu gereklidir. YALNIZCA SELF HOSTED DÜĞÜMLERDE ÇALIŞIR", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Yalnızca yerel kaynaklar. Tünelleme yok.", - "siteLocalDescriptionSaas": "Yalnızca yerel kaynaklar. Tünel yok. YALNIZCA SELF HOSTED DÜĞÜMLERDE ÇALIŞIR", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Tüm Siteleri Gör", "siteTunnelDescription": "Sitenize nasıl bağlanmak istediğinizi belirleyin", "siteNewtCredentials": "Newt Kimlik Bilgileri", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS Kaynağı", "resourceHTTPDescription": "Bir alt alan adı veya temel alan adı kullanarak uygulamanıza HTTPS üzerinden vekil istek gönderin.", "resourceRaw": "Ham TCP/UDP Kaynağı", - "resourceRawDescription": "Uygulamanıza TCP/UDP üzerinden port numarası ile vekil istek gönderin.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Kaynak Oluştur", "resourceCreateDescription": "Yeni bir kaynak oluşturmak için aşağıdaki adımları izleyin", "resourceSeeAll": "Tüm Kaynakları Gör", @@ -168,9 +168,9 @@ "siteSelect": "Site seç", "siteSearch": "Site ara", "siteNotFound": "Herhangi bir site bulunamadı.", - "selectCountry": "Ülke Seç", - "searchCountries": "Ülkeleri ara...", - "noCountryFound": "Ülke bulunamadı.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Bu site hedefe bağlantı sağlayacaktır.", "resourceType": "Kaynak Türü", "resourceTypeDescription": "Kaynağınıza nasıl erişmek istediğinizi belirleyin", @@ -817,7 +817,7 @@ "redirectUrl": "Yönlendirme URL'si", "redirectUrlAbout": "Yönlendirme URL'si Hakkında", "redirectUrlAboutDescription": "Bu, kimlik doğrulamasından sonra kullanıcıların yönlendirileceği URL'dir. Bu URL'yi kimlik sağlayıcınızın ayarlarında yapılandırmanız gerekir.", - "pangolinAuth": "Yetkilendirme - Pangolin", + "pangolinAuth": "Auth - Pangolin", "verificationCodeLengthRequirements": "Doğrulama kodunuz 8 karakter olmalıdır.", "errorOccurred": "Bir hata oluştu", "emailErrorVerify": "E-posta doğrulanamadı: ", @@ -1242,7 +1242,7 @@ "sidebarExpand": "Genişlet", "newtUpdateAvailable": "Güncelleme Mevcut", "newtUpdateAvailableInfo": "Newt'in yeni bir versiyonu mevcut. En iyi deneyim için lütfen en son sürüme güncelleyin.", - "domainPickerEnterDomain": "Alan Adı", + "domainPickerEnterDomain": "Domain", "domainPickerPlaceholder": "myapp.example.com", "domainPickerDescription": "Mevcut seçenekleri görmek için kaynağın tam etki alanını girin.", "domainPickerDescriptionSaas": "Mevcut seçenekleri görmek için tam etki alanı, alt etki alanı veya sadece bir isim girin", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Alt Alan: {subdomain}", "domainPickerNamespace": "Ad Alanı: {namespace}", "domainPickerShowMore": "Daha Fazla Göster", - "regionSelectorTitle": "Bölge Seç", - "regionSelectorInfo": "Bir bölge seçmek, konumunuz için daha iyi performans sağlamamıza yardımcı olur. Sunucunuzla aynı bölgede olmanıza gerek yoktur.", - "regionSelectorPlaceholder": "Bölge Seçin", - "regionSelectorComingSoon": "Yakında Geliyor", - "billingLoadingSubscription": "Abonelik yükleniyor...", - "billingFreeTier": "Ücretsiz Dilim", - "billingWarningOverLimit": "Uyarı: Bir veya daha fazla kullanım limitini aştınız. Aboneliğinizi değiştirmediğiniz veya kullanımı ayarlamadığınız sürece siteleriniz bağlanmayacaktır.", - "billingUsageLimitsOverview": "Kullanım Limitleri Genel Görünümü", - "billingMonitorUsage": "Kullanımınızı yapılandırılmış limitlerle karşılaştırın. Limitlerin artırılmasına ihtiyacınız varsa, lütfen support@fossorial.io adresinden bizimle iletişime geçin.", - "billingDataUsage": "Veri Kullanımı", - "billingOnlineTime": "Site Çevrimiçi Süresi", - "billingUsers": "Aktif Kullanıcılar", - "billingDomains": "Aktif Alanlar", - "billingRemoteExitNodes": "Aktif Öz-Host Düğümleri", - "billingNoLimitConfigured": "Hiçbir limit yapılandırılmadı", - "billingEstimatedPeriod": "Tahmini Fatura Dönemi", - "billingIncludedUsage": "Dahil Kullanım", - "billingIncludedUsageDescription": "Mevcut abonelik planınıza bağlı kullanım", - "billingFreeTierIncludedUsage": "Ücretsiz dilim kullanım hakları", - "billingIncluded": "dahil", - "billingEstimatedTotal": "Tahmini Toplam:", - "billingNotes": "Notlar", - "billingEstimateNote": "Bu, mevcut kullanımınıza dayalı bir tahmindir.", - "billingActualChargesMayVary": "Asıl ücretler farklılık gösterebilir.", - "billingBilledAtEnd": "Fatura döneminin sonunda fatura düzenlenecektir.", - "billingModifySubscription": "Aboneliği Düzenle", - "billingStartSubscription": "Aboneliği Başlat", - "billingRecurringCharge": "Yinelenen Ücret", - "billingManageSubscriptionSettings": "Abonelik ayarlarınızı ve tercihlerinizi yönetin", - "billingNoActiveSubscription": "Aktif bir aboneliğiniz yok. Kullanım limitlerini artırmak için aboneliğinizi başlatın.", - "billingFailedToLoadSubscription": "Abonelik yüklenemedi", - "billingFailedToLoadUsage": "Kullanım yüklenemedi", - "billingFailedToGetCheckoutUrl": "Ödeme URL'si alınamadı", - "billingPleaseTryAgainLater": "Lütfen daha sonra tekrar deneyin.", - "billingCheckoutError": "Ödeme Hatası", - "billingFailedToGetPortalUrl": "Portal URL'si alınamadı", - "billingPortalError": "Portal Hatası", - "billingDataUsageInfo": "Buluta bağlandığınızda, güvenli tünellerinizden aktarılan tüm verilerden ücret alınırsınız. Bu, tüm sitelerinizdeki gelen ve giden trafiği içerir. Limitinize ulaştığınızda, planınızı yükseltmeli veya kullanımı azaltmalısınız, aksi takdirde siteleriniz bağlantıyı keser. Düğümler kullanırken verilerden ücret alınmaz.", - "billingOnlineTimeInfo": "Sitelerinizin buluta ne kadar süre bağlı kaldığına göre ücretlendirilirsiniz. Örneğin, 44,640 dakika, bir sitenin 24/7 boyunca tam bir ay boyunca çalışması anlamına gelir. Limitinize ulaştığınızda, planınızı yükseltmeyip kullanımı azaltmazsanız siteleriniz bağlantıyı keser. Düğümler kullanırken zamandan ücret alınmaz.", - "billingUsersInfo": "Kuruluşunuzdaki her kullanıcı için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif kullanıcı hesaplarının sayısına göre günlük olarak hesaplanır.", - "billingDomainInfo": "Kuruluşunuzdaki her alan adı için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif alan adları hesaplarının sayısına göre günlük olarak hesaplanır.", - "billingRemoteExitNodesInfo": "Kuruluşunuzdaki her yönetilen Düğüm için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif yönetilen Düğümler sayısına göre günlük olarak hesaplanır.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Alan Adı Bulunamadı", "domainNotFoundDescription": "Bu kaynak devre dışıdır çünkü alan adı sistemimizde artık mevcut değil. Bu kaynak için yeni bir alan adı belirleyin.", "failed": "Başarısız", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS değişikliklerinin internet genelinde yayılması zaman alabilir. DNS sağlayıcınız ve TTL ayarlarına bağlı olarak bu birkaç dakika ile 48 saat arasında değişebilir.", "resourcePortRequired": "HTTP dışı kaynaklar için bağlantı noktası numarası gereklidir", "resourcePortNotAllowed": "HTTP kaynakları için bağlantı noktası numarası ayarlanmamalı", - "billingPricingCalculatorLink": "Fiyat Hesaplayıcı", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Kabul ediyorum", "termsOfService": "hizmet şartları", @@ -1412,41 +1412,41 @@ "addNewTarget": "Yeni Hedef Ekle", "targetsList": "Hedefler Listesi", "targetErrorDuplicateTargetFound": "Yinelenen hedef bulundu", - "healthCheckHealthy": "Sağlıklı", - "healthCheckUnhealthy": "Sağlıksız", - "healthCheckUnknown": "Bilinmiyor", - "healthCheck": "Sağlık Kontrolü", - "configureHealthCheck": "Sağlık Kontrolünü Yapılandır", - "configureHealthCheckDescription": "{hedef} için sağlık izleme kurun", - "enableHealthChecks": "Sağlık Kontrollerini Etkinleştir", - "enableHealthChecksDescription": "Bu hedefin sağlığını izleyin. Gerekirse hedef dışındaki bir son noktayı izleyebilirsiniz.", - "healthScheme": "Yöntem", - "healthSelectScheme": "Yöntem Seç", - "healthCheckPath": "Yol", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", "healthHostname": "IP / Host", "healthPort": "Port", - "healthCheckPathDescription": "Sağlık durumunu kontrol etmek için yol.", - "healthyIntervalSeconds": "Sağlıklı Aralık", - "unhealthyIntervalSeconds": "Sağlıksız Aralık", - "IntervalSeconds": "Sağlıklı Aralık", - "timeoutSeconds": "Zaman Aşımı", - "timeIsInSeconds": "Zaman saniye cinsindendir", - "retryAttempts": "Tekrar Deneme Girişimleri", - "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.", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Özel Başlıklar", - "customHeadersDescription": "Başlıklar yeni satırla ayrılmış: Başlık-Adı: değer", - "headersValidationError": "Başlıklar şu formatta olmalıdır: Başlık-Adı: değer.", - "saveHealthCheck": "Sağlık Kontrolünü Kaydet", - "healthCheckSaved": "Sağlık Kontrolü Kaydedildi", - "healthCheckSavedDescription": "Sağlık kontrol yapılandırması başarıyla kaydedildi", - "healthCheckError": "Sağlık Kontrol Hatası", - "healthCheckErrorDescription": "Sağlık kontrol yapılandırması kaydedilirken bir hata oluştu", - "healthCheckPathRequired": "Sağlık kontrol yolu gereklidir", - "healthCheckMethodRequired": "HTTP yöntemi gereklidir", - "healthCheckIntervalMin": "Kontrol aralığı en az 5 saniye olmalıdır", - "healthCheckTimeoutMin": "Zaman aşımı en az 1 saniye olmalıdır", - "healthCheckRetryMin": "Tekrar deneme girişimleri en az 1 olmalıdır", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP Yöntemi", "selectHttpMethod": "HTTP yöntemini seçin", "domainPickerSubdomainLabel": "Alt Alan Adı", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Mevcut ücretsiz alan adları arasından aramak ve seçmek için bir alt alan adı girin.", "domainPickerFreeDomains": "Ücretsiz Alan Adları", "domainPickerSearchForAvailableDomains": "Mevcut alan adlarını ara", - "domainPickerNotWorkSelfHosted": "Not: Ücretsiz sağlanan alan adları şu anda öz-host edilmiş örnekler için kullanılabilir değildir.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Alan Adı", "resourceEditDomain": "Alan Adını Düzenle", "siteName": "Site Adı", @@ -1543,72 +1543,72 @@ "autoLoginError": "Otomatik Giriş Hatası", "autoLoginErrorNoRedirectUrl": "Kimlik sağlayıcıdan yönlendirme URL'si alınamadı.", "autoLoginErrorGeneratingUrl": "Kimlik doğrulama URL'si oluşturulamadı.", - "remoteExitNodeManageRemoteExitNodes": "Öz-Host Yönetim", - "remoteExitNodeDescription": "Ağ bağlantınızı genişletmek için düğümleri yönetin", - "remoteExitNodes": "Düğümler", - "searchRemoteExitNodes": "Düğüm ara...", - "remoteExitNodeAdd": "Düğüm Ekle", - "remoteExitNodeErrorDelete": "Düğüm silinirken hata oluştu", - "remoteExitNodeQuestionRemove": "{selectedNode} düğümünü organizasyondan kaldırmak istediğinizden emin misiniz?", - "remoteExitNodeMessageRemove": "Kaldırıldığında, düğüm artık erişilebilir olmayacaktır.", - "remoteExitNodeMessageConfirm": "Onaylamak için lütfen aşağıya düğümün adını yazın.", - "remoteExitNodeConfirmDelete": "Düğüm Silmeyi Onayla", - "remoteExitNodeDelete": "Düğümü Sil", - "sidebarRemoteExitNodes": "Düğümler", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", + "remoteExitNodes": "Nodes", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", + "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Düğüm Oluştur", - "description": "Ağ bağlantınızı genişletmek için yeni bir düğüm oluşturun", - "viewAllButton": "Tüm Düğümleri Gör", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Oluşturma Stratejisi", - "description": "Düğümünüzü manuel olarak yapılandırmak veya yeni kimlik bilgileri oluşturmak için bunu seçin.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Düğüm Benimse", - "description": "Zaten düğüm için kimlik bilgilerine sahipseniz bunu seçin." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Anahtarları Oluştur", - "description": "Düğüm için yeni anahtarlar oluşturmak istiyorsanız bunu seçin" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Mevcut Düğümü Benimse", - "description": "Adayacağınız mevcut düğümün kimlik bilgilerini girin", - "nodeIdLabel": "Düğüm ID", - "nodeIdDescription": "Adayacağınız mevcut düğümün ID'si", - "secretLabel": "Gizli", - "secretDescription": "Mevcut düğümün gizli anahtarı", - "submitButton": "Düğümü Benimse" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Oluşturulan Kimlik Bilgileri", - "description": "Düğümünüzü yapılandırmak için oluşturulan bu kimlik bilgilerini kullanın", - "nodeIdTitle": "Düğüm ID", - "secretTitle": "Gizli", - "saveCredentialsTitle": "Kimlik Bilgilerini Yapılandırmaya Ekle", - "saveCredentialsDescription": "Bağlantıyı tamamlamak için bu kimlik bilgilerini öz-host Pangolin düğüm yapılandırma dosyanıza ekleyin.", - "submitButton": "Düğüm Oluştur" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "Mevcut bir düğümü benimserken Düğüm ID ve Gizli anahtar gereklidir" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Varsayılanlar yüklenemedi", - "defaultsNotLoaded": "Varsayılanlar yüklenmedi", - "createFailed": "Düğüm oluşturulamadı" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Düğüm başarıyla oluşturuldu" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Düğüm Seçimi", - "remoteExitNodeSelectionDescription": "Yerel site için trafiği yönlendirecek düğümü seçin", - "remoteExitNodeRequired": "Yerel siteler için bir düğüm seçilmelidir", - "noRemoteExitNodesAvailable": "Düğüm Bulunamadı", - "noRemoteExitNodesAvailableDescription": "Bu organizasyon için düğüm mevcut değil. Yerel siteleri kullanmak için önce bir düğüm oluşturun.", - "exitNode": "Çıkış Düğümü", - "country": "Ülke", - "rulesMatchCountry": "Şu anda kaynak IP'ye dayanarak", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Yönetilen Self-Hosted", "description": "Daha güvenilir ve düşük bakım gerektiren, ekstra özelliklere sahip kendi kendine barındırabileceğiniz Pangolin sunucusu", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Uluslararası Alan Adı Tespit Edildi", "willbestoredas": "Şu şekilde depolanacak:", - "roleMappingDescription": "Otomatik Sağlama etkinleştirildiğinde kullanıcıların oturum açarken rollerin nasıl atandığını belirleyin.", - "selectRole": "Bir Rol Seçin", - "roleMappingExpression": "İfade", - "selectRolePlaceholder": "Bir rol seçin", - "selectRoleDescription": "Bu kimlik sağlayıcısından tüm kullanıcılara atanacak bir rol seçin", - "roleMappingExpressionDescription": "Rol bilgilerini ID tokeninden çıkarmak için bir JMESPath ifadesi girin", - "idpTenantIdRequired": "Kiracı Kimliği gereklidir", - "invalidValue": "Geçersiz değer", - "idpTypeLabel": "Kimlik Sağlayıcı Türü", - "roleMappingExpressionPlaceholder": "örn., contains(gruplar, 'yönetici') && 'Yönetici' || 'Üye'", - "idpGoogleConfiguration": "Google Yapılandırması", - "idpGoogleConfigurationDescription": "Google OAuth2 kimlik bilgilerinizi yapılandırın", - "idpGoogleClientIdDescription": "Google OAuth2 İstemci Kimliğiniz", - "idpGoogleClientSecretDescription": "Google OAuth2 İstemci Sırrınız", - "idpAzureConfiguration": "Azure Entra ID Yapılandırması", - "idpAzureConfigurationDescription": "Azure Entra ID OAuth2 kimlik bilgilerinizi yapılandırın", - "idpTenantId": "Kiracı Kimliği", - "idpTenantIdPlaceholder": "kiraci-kimliginiz", - "idpAzureTenantIdDescription": "Azure kiracı kimliğiniz (Azure Active Directory genel bakışında bulunur)", - "idpAzureClientIdDescription": "Azure Uygulama Kaydı İstemci Kimliğiniz", - "idpAzureClientSecretDescription": "Azure Uygulama Kaydı İstemci Sırrınız", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", + "idpTenantId": "Tenant ID", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Yapılandırması", - "idpAzureConfigurationTitle": "Azure Entra ID Yapılandırması", - "idpTenantIdLabel": "Kiracı Kimliği", - "idpAzureClientIdDescription2": "Azure Uygulama Kaydı İstemci Kimliğiniz", - "idpAzureClientSecretDescription2": "Azure Uygulama Kaydı İstemci Sırrınız", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", + "idpTenantIdLabel": "Tenant ID", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC sağlayıcısı", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC sağlayıcısı", - "subnet": "Alt ağ", - "subnetDescription": "Bu organizasyonun ağ yapılandırması için alt ağ.", - "authPage": "Yetkilendirme Sayfası", - "authPageDescription": "Kuruluşunuz için yetkilendirme sayfasını yapılandırın", - "authPageDomain": "Yetkilendirme Sayfası Alanı", - "noDomainSet": "Alan belirlenmedi", - "changeDomain": "Alanı Değiştir", - "selectDomain": "Alan Seçin", - "restartCertificate": "Sertifikayı Yenile", - "editAuthPageDomain": "Yetkilendirme Sayfası Alanını Düzenle", - "setAuthPageDomain": "Yetkilendirme Sayfası Alanını Ayarla", - "failedToFetchCertificate": "Sertifika getirilemedi", - "failedToRestartCertificate": "Sertifika yeniden başlatılamadı", - "addDomainToEnableCustomAuthPages": "Kuruluşunuz için özel kimlik doğrulama sayfalarını etkinleştirmek için bir alan ekleyin", - "selectDomainForOrgAuthPage": "Kuruluşun kimlik doğrulama sayfası için bir alan seçin", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Sağlanan Alan Adı", "domainPickerFreeProvidedDomain": "Ücretsiz Sağlanan Alan Adı", "domainPickerVerified": "Doğrulandı", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" {domain} için geçerli yapılamadı.", "domainPickerSubdomainSanitized": "Alt alan adı temizlendi", "domainPickerSubdomainCorrected": "\"{sub}\" \"{sanitized}\" olarak düzeltildi", - "orgAuthSignInTitle": "Kuruluşunuza giriş yapın", - "orgAuthChooseIdpDescription": "Devam etmek için kimlik sağlayıcınızı seçin", - "orgAuthNoIdpConfigured": "Bu kuruluşta yapılandırılmış kimlik sağlayıcı yok. Bunun yerine Pangolin kimliğinizle giriş yapabilirsiniz.", - "orgAuthSignInWithPangolin": "Pangolin ile Giriş Yap", - "subscriptionRequiredToUse": "Bu özelliği kullanmak için abonelik gerekmektedir.", - "idpDisabled": "Kimlik sağlayıcılar devre dışı bırakılmıştır.", - "orgAuthPageDisabled": "Kuruluş kimlik doğrulama sayfası devre dışı bırakılmıştır.", - "domainRestartedDescription": "Alan doğrulaması başarıyla yeniden başlatıldı", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Dosyayı düzenle: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Dosyayı düzenle: docker-compose.yml", "emailVerificationRequired": "E-posta doğrulaması gereklidir. Bu adımı tamamlamak için lütfen tekrar {dashboardUrl}/auth/login üzerinden oturum açın. Sonra buraya geri dönün.", - "twoFactorSetupRequired": "İki faktörlü kimlik doğrulama ayarı gereklidir. Bu adımı tamamlamak için lütfen tekrar {dashboardUrl}/auth/login üzerinden oturum açın. Sonra buraya geri dönün." + "twoFactorSetupRequired": "İki faktörlü kimlik doğrulama ayarı gereklidir. Bu adımı tamamlamak için lütfen tekrar {dashboardUrl}/auth/login üzerinden oturum açın. Sonra buraya geri dönün.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From c8bddd42896c886f18595aa5d8a60324e1385081 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:25 -0700 Subject: [PATCH 12/28] New translations en-us.json (Chinese Simplified) --- messages/zh-CN.json | 367 ++++++++++++++++++++++---------------------- 1 file changed, 186 insertions(+), 181 deletions(-) diff --git a/messages/zh-CN.json b/messages/zh-CN.json index 5708f976..8314f092 100644 --- a/messages/zh-CN.json +++ b/messages/zh-CN.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "最简单的方式来连接到您的网络。不需要任何额外设置。", "siteWg": "基本 WireGuard", "siteWgDescription": "使用任何 WireGuard 客户端来建立隧道。需要手动配置 NAT。", - "siteWgDescriptionSaas": "使用任何WireGuard客户端建立隧道。需要手动配置NAT。仅适用于自托管节点。", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "仅限本地资源。不需要隧道。", - "siteLocalDescriptionSaas": "仅本地资源。无需隧道。仅适用于自托管节点。", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "查看所有站点", "siteTunnelDescription": "确定如何连接到您的网站", "siteNewtCredentials": "Newt 凭据", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS 资源", "resourceHTTPDescription": "使用子域或根域名通过 HTTPS 向您的应用程序提出代理请求。", "resourceRaw": "TCP/UDP 资源", - "resourceRawDescription": "使用 TCP/UDP 使用端口号向您的应用提出代理请求。", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "创建资源", "resourceCreateDescription": "按照下面的步骤创建新资源", "resourceSeeAll": "查看所有资源", @@ -168,9 +168,9 @@ "siteSelect": "选择站点", "siteSearch": "搜索站点", "siteNotFound": "未找到站点。", - "selectCountry": "选择国家", - "searchCountries": "搜索国家...", - "noCountryFound": "找不到国家。", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "此站点将为目标提供连接。", "resourceType": "资源类型", "resourceTypeDescription": "确定如何访问您的资源", @@ -598,7 +598,7 @@ "newtErrorFetchReleases": "无法获取版本信息: {err}", "newtErrorFetchLatest": "无法获取最新版信息: {err}", "newtEndpoint": "Newt 端点", - "newtId": "Newt ID", + "newtId": "Newt ID", "newtSecretKey": "Newt 私钥", "architecture": "架构", "sites": "站点", @@ -1156,7 +1156,7 @@ "containerLabels": "标签", "containerLabelsCount": "{count, plural, other {# 标签}}", "containerLabelsTitle": "容器标签", - "containerLabelEmpty": "<为空>", + "containerLabelEmpty": "", "containerPorts": "端口", "containerPortsMore": "+{count} 更多", "containerActions": "行动", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "子域:{subdomain}", "domainPickerNamespace": "命名空间:{namespace}", "domainPickerShowMore": "显示更多", - "regionSelectorTitle": "选择区域", - "regionSelectorInfo": "选择区域以帮助提升您所在地的性能。您不必与服务器在相同的区域。", - "regionSelectorPlaceholder": "选择一个区域", - "regionSelectorComingSoon": "即将推出", - "billingLoadingSubscription": "正在加载订阅...", - "billingFreeTier": "免费层", - "billingWarningOverLimit": "警告:您已超出一个或多个使用限制。在您修改订阅或调整使用情况之前,您的站点将无法连接。", - "billingUsageLimitsOverview": "使用限制概览", - "billingMonitorUsage": "监控您的使用情况以对比已配置的限制。如需提高限制请联系我们 support@fossorial.io。", - "billingDataUsage": "数据使用情况", - "billingOnlineTime": "站点在线时间", - "billingUsers": "活跃用户", - "billingDomains": "活跃域", - "billingRemoteExitNodes": "活跃自托管节点", - "billingNoLimitConfigured": "未配置限制", - "billingEstimatedPeriod": "估计结算周期", - "billingIncludedUsage": "包含的使用量", - "billingIncludedUsageDescription": "您当前订阅计划中包含的使用量", - "billingFreeTierIncludedUsage": "免费层使用额度", - "billingIncluded": "包含", - "billingEstimatedTotal": "预计总额:", - "billingNotes": "备注", - "billingEstimateNote": "这是根据您当前使用情况的估算。", - "billingActualChargesMayVary": "实际费用可能会有变化。", - "billingBilledAtEnd": "您将在结算周期结束时被计费。", - "billingModifySubscription": "修改订阅", - "billingStartSubscription": "开始订阅", - "billingRecurringCharge": "周期性收费", - "billingManageSubscriptionSettings": "管理您的订阅设置和偏好", - "billingNoActiveSubscription": "您没有活跃的订阅。开始订阅以增加使用限制。", - "billingFailedToLoadSubscription": "无法加载订阅", - "billingFailedToLoadUsage": "无法加载使用情况", - "billingFailedToGetCheckoutUrl": "无法获取结账网址", - "billingPleaseTryAgainLater": "请稍后再试。", - "billingCheckoutError": "结账错误", - "billingFailedToGetPortalUrl": "无法获取门户网址", - "billingPortalError": "门户错误", - "billingDataUsageInfo": "当连接到云端时,您将为通过安全隧道传输的所有数据收取费用。 这包括您所有站点的进出流量。 当您达到上限时,您的站点将断开连接,直到您升级计划或减少使用。使用节点时不收取数据。", - "billingOnlineTimeInfo": "您要根据您的网站连接到云端的时间长短收取费用。 例如,44,640分钟等于一个24/7全月运行的网站。 当您达到上限时,您的站点将断开连接,直到您升级计划或减少使用。使用节点时不收取费用。", - "billingUsersInfo": "根据您组织中的活跃用户数量收费。按日计算账单。", - "billingDomainInfo": "根据组织中活跃域的数量收费。按日计算账单。", - "billingRemoteExitNodesInfo": "根据您组织中已管理节点的数量收费。按日计算账单。", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "域未找到", "domainNotFoundDescription": "此资源已禁用,因为该域不再在我们的系统中存在。请为此资源设置一个新域。", "failed": "失败", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS 更改可能需要一些时间才能在互联网上传播。这可能需要从几分钟到 48 小时,具体取决于您的 DNS 提供商和 TTL 设置。", "resourcePortRequired": "非 HTTP 资源必须输入端口号", "resourcePortNotAllowed": "HTTP 资源不应设置端口号", - "billingPricingCalculatorLink": "价格计算器", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "我同意", "termsOfService": "服务条款", @@ -1390,7 +1390,7 @@ "clientOlmCredentials": "Olm 凭据", "clientOlmCredentialsDescription": "这是 Olm 服务器的身份验证方式", "olmEndpoint": "Olm 端点", - "olmId": "Olm ID", + "olmId": "Olm ID", "olmSecretKey": "Olm 私钥", "clientCredentialsSave": "保存您的凭据", "clientCredentialsSaveDescription": "该信息仅会显示一次,请确保将其复制到安全位置。", @@ -1412,41 +1412,41 @@ "addNewTarget": "添加新目标", "targetsList": "目标列表", "targetErrorDuplicateTargetFound": "找到重复的目标", - "healthCheckHealthy": "正常", - "healthCheckUnhealthy": "不正常", - "healthCheckUnknown": "未知", - "healthCheck": "健康检查", - "configureHealthCheck": "配置健康检查", - "configureHealthCheckDescription": "为 {target} 设置健康监控", - "enableHealthChecks": "启用健康检查", - "enableHealthChecksDescription": "监视此目标的健康状况。如果需要,您可以监视一个不同的终点。", - "healthScheme": "方法", - "healthSelectScheme": "选择方法", - "healthCheckPath": "路径", - "healthHostname": "IP / 主机", - "healthPort": "端口", - "healthCheckPathDescription": "用于检查健康状态的路径。", - "healthyIntervalSeconds": "正常间隔", - "unhealthyIntervalSeconds": "不正常间隔", - "IntervalSeconds": "正常间隔", - "timeoutSeconds": "超时", - "timeIsInSeconds": "时间以秒为单位", - "retryAttempts": "重试次数", - "expectedResponseCodes": "期望响应代码", - "expectedResponseCodesDescription": "HTTP 状态码表示健康状态。如留空,200-300 被视为健康。", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", + "healthHostname": "IP / Host", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "自定义标题", - "customHeadersDescription": "头部新行分隔:头部名称:值", - "headersValidationError": "头部必须是格式:头部名称:值。", - "saveHealthCheck": "保存健康检查", - "healthCheckSaved": "健康检查已保存", - "healthCheckSavedDescription": "健康检查配置已成功保存。", - "healthCheckError": "健康检查错误", - "healthCheckErrorDescription": "保存健康检查配置时出错", - "healthCheckPathRequired": "健康检查路径为必填项", - "healthCheckMethodRequired": "HTTP 方法为必填项", - "healthCheckIntervalMin": "检查间隔必须至少为 5 秒", - "healthCheckTimeoutMin": "超时必须至少为 1 秒", - "healthCheckRetryMin": "重试次数必须至少为 1 次", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP 方法", "selectHttpMethod": "选择 HTTP 方法", "domainPickerSubdomainLabel": "子域名", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "输入一个子域名以搜索并从可用免费域名中选择。", "domainPickerFreeDomains": "免费域名", "domainPickerSearchForAvailableDomains": "搜索可用域名", - "domainPickerNotWorkSelfHosted": "注意:自托管实例当前不提供免费的域名。", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "域名", "resourceEditDomain": "编辑域名", "siteName": "站点名称", @@ -1543,72 +1543,72 @@ "autoLoginError": "自动登录错误", "autoLoginErrorNoRedirectUrl": "未从身份提供商收到重定向URL。", "autoLoginErrorGeneratingUrl": "生成身份验证URL失败。", - "remoteExitNodeManageRemoteExitNodes": "管理自托管", - "remoteExitNodeDescription": "管理节点以扩展您的网络连接", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "搜索节点...", - "remoteExitNodeAdd": "添加节点", - "remoteExitNodeErrorDelete": "删除节点时出错", - "remoteExitNodeQuestionRemove": "您确定要从组织中删除 {selectedNode} 节点吗?", - "remoteExitNodeMessageRemove": "一旦删除,该节点将不再能够访问。", - "remoteExitNodeMessageConfirm": "要确认,请输入以下节点的名称。", - "remoteExitNodeConfirmDelete": "确认删除节点", - "remoteExitNodeDelete": "删除节点", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "创建节点", - "description": "创建一个新节点来扩展您的网络连接", - "viewAllButton": "查看所有节点", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "创建策略", - "description": "选择此选项以手动配置您的节点或生成新凭据。", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "采纳节点", - "description": "如果您已经拥有该节点的凭据,请选择此项。" + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "生成密钥", - "description": "如果您想为节点生成新密钥,请选择此选项" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "采纳现有节点", - "description": "输入您想要采用的现有节点的凭据", - "nodeIdLabel": "节点 ID", - "nodeIdDescription": "您想要采用的现有节点的 ID", - "secretLabel": "密钥", - "secretDescription": "现有节点的秘密密钥", - "submitButton": "采用节点" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "生成的凭据", - "description": "使用这些生成的凭据来配置您的节点", - "nodeIdTitle": "节点 ID", - "secretTitle": "密钥", - "saveCredentialsTitle": "将凭据添加到配置中", - "saveCredentialsDescription": "将这些凭据添加到您的自托管 Pangolin 节点配置文件中以完成连接。", - "submitButton": "创建节点" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "在通过现有节点时需要节点ID和密钥" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "无法加载默认值", - "defaultsNotLoaded": "默认值未加载", - "createFailed": "创建节点失败" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "节点创建成功" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "节点选择", - "remoteExitNodeSelectionDescription": "为此本地站点选择要路由流量的节点", - "remoteExitNodeRequired": "必须为本地站点选择节点", - "noRemoteExitNodesAvailable": "无可用节点", - "noRemoteExitNodesAvailableDescription": "此组织没有可用的节点。首先创建一个节点来使用本地站点。", - "exitNode": "出口节点", - "country": "国家", - "rulesMatchCountry": "当前基于源 IP", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "托管自托管", "description": "更可靠和低维护自我托管的 Pangolin 服务器,带有额外的铃声和告密器", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "检测到国际域", "willbestoredas": "储存为:", - "roleMappingDescription": "确定当用户启用自动配送时如何分配他们的角色。", - "selectRole": "选择角色", - "roleMappingExpression": "表达式", - "selectRolePlaceholder": "选择角色", - "selectRoleDescription": "选择一个角色,从此身份提供商分配给所有用户", - "roleMappingExpressionDescription": "输入一个 JMESPath 表达式来从 ID 令牌提取角色信息", - "idpTenantIdRequired": "租户ID是必需的", - "invalidValue": "无效的值", - "idpTypeLabel": "身份提供者类型", - "roleMappingExpressionPlaceholder": "例如: contains(group, 'admin' &'Admin' || 'Member'", - "idpGoogleConfiguration": "Google 配置", - "idpGoogleConfigurationDescription": "配置您的 Google OAuth2 凭据", - "idpGoogleClientIdDescription": "您的 Google OAuth2 客户端 ID", - "idpGoogleClientSecretDescription": "您的 Google OAuth2 客户端密钥", - "idpAzureConfiguration": "Azure Entra ID 配置", - "idpAzureConfigurationDescription": "配置您的 Azure Entra ID OAuth2 凭据", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "您的租户ID", - "idpAzureTenantIdDescription": "您的 Azure 租户ID (在 Azure Active Directory 概览中发现)", - "idpAzureClientIdDescription": "您的 Azure 应用程序注册客户端 ID", - "idpAzureClientSecretDescription": "您的 Azure 应用程序注册客户端密钥", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google 配置", - "idpAzureConfigurationTitle": "Azure Entra ID 配置", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "您的 Azure 应用程序注册客户端 ID", - "idpAzureClientSecretDescription2": "您的 Azure 应用程序注册客户端密钥", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC 提供商", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "子网", - "subnetDescription": "此组织网络配置的子网。", - "authPage": "认证页面", - "authPageDescription": "配置您的组织认证页面", - "authPageDomain": "认证页面域", - "noDomainSet": "没有域设置", - "changeDomain": "更改域", - "selectDomain": "选择域", - "restartCertificate": "重新启动证书", - "editAuthPageDomain": "编辑认证页面域", - "setAuthPageDomain": "设置认证页面域", - "failedToFetchCertificate": "获取证书失败", - "failedToRestartCertificate": "重新启动证书失败", - "addDomainToEnableCustomAuthPages": "为您的组织添加域名以启用自定义认证页面", - "selectDomainForOrgAuthPage": "选择组织认证页面的域", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "提供的域", "domainPickerFreeProvidedDomain": "免费提供的域", "domainPickerVerified": "已验证", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" 无法为 {domain} 变为有效。", "domainPickerSubdomainSanitized": "子域已净化", "domainPickerSubdomainCorrected": "\"{sub}\" 已被更正为 \"{sanitized}\"", - "orgAuthSignInTitle": "登录到您的组织", - "orgAuthChooseIdpDescription": "选择您的身份提供商以继续", - "orgAuthNoIdpConfigured": "此机构没有配置任何身份提供者。您可以使用您的 Pangolin 身份登录。", - "orgAuthSignInWithPangolin": "使用 Pangolin 登录", - "subscriptionRequiredToUse": "需要订阅才能使用此功能。", - "idpDisabled": "身份提供者已禁用。", - "orgAuthPageDisabled": "组织认证页面已禁用。", - "domainRestartedDescription": "域验证重新启动成功", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "编辑文件:config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "编辑文件:docker-compose.yml", "emailVerificationRequired": "需要电子邮件验证。 请通过 {dashboardUrl}/auth/login 再次登录以完成此步骤。 然后,回到这里。", - "twoFactorSetupRequired": "需要设置双因素身份验证。 请通过 {dashboardUrl}/auth/login 再次登录以完成此步骤。 然后,回到这里。" + "twoFactorSetupRequired": "需要设置双因素身份验证。 请通过 {dashboardUrl}/auth/login 再次登录以完成此步骤。 然后,回到这里。", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From cabaa2e6d6ea47a4c49666065b9b3477a0f8837b Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:26 -0700 Subject: [PATCH 13/28] New translations en-us.json (Norwegian Bokmal) --- messages/nb-NO.json | 351 ++++++++++++++++++++++---------------------- 1 file changed, 178 insertions(+), 173 deletions(-) diff --git a/messages/nb-NO.json b/messages/nb-NO.json index 686a6f4d..8d789949 100644 --- a/messages/nb-NO.json +++ b/messages/nb-NO.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Enkleste måte å opprette et inngangspunkt i nettverket ditt. Ingen ekstra oppsett.", "siteWg": "Grunnleggende WireGuard", "siteWgDescription": "Bruk hvilken som helst WireGuard-klient for å etablere en tunnel. Manuell NAT-oppsett kreves.", - "siteWgDescriptionSaas": "Bruk hvilken som helst WireGuard-klient for å etablere en tunnel. Manuell NAT-oppsett er nødvendig. FUNGERER KUN PÅ SELVHOSTEDE NODER", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Kun lokale ressurser. Ingen tunnelering.", - "siteLocalDescriptionSaas": "Kun lokale ressurser. Ingen tunneling. FUNGERER KUN PÅ SELVHOSTEDE NODER", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Se alle områder", "siteTunnelDescription": "Bestem hvordan du vil koble deg til ditt område", "siteNewtCredentials": "Newt påloggingsinformasjon", @@ -118,7 +118,7 @@ "usageExamples": "Brukseksempler", "tokenId": "Token-ID", "requestHeades": "Request Headers", - "queryParameter": "Forespørsel Params", + "queryParameter": "Query Parameter", "importantNote": "Viktig merknad", "shareImportantDescription": "Av sikkerhetsgrunner anbefales det å bruke headere fremfor query parametere der det er mulig, da query parametere kan logges i serverlogger eller nettleserhistorikk.", "token": "Token", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS-ressurs", "resourceHTTPDescription": "Proxy-forespørsler til appen din over HTTPS ved bruk av et underdomene eller grunndomene.", "resourceRaw": "Rå TCP/UDP-ressurs", - "resourceRawDescription": "Proxyer forespørsler til appen din over TCP/UDP ved å bruke et portnummer.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Opprett ressurs", "resourceCreateDescription": "Følg trinnene nedenfor for å opprette en ny ressurs", "resourceSeeAll": "Se alle ressurser", @@ -168,9 +168,9 @@ "siteSelect": "Velg område", "siteSearch": "Søk i område", "siteNotFound": "Ingen område funnet.", - "selectCountry": "Velg land", - "searchCountries": "Søk land...", - "noCountryFound": "Ingen land funnet.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Dette området vil gi tilkobling til mål.", "resourceType": "Ressurstype", "resourceTypeDescription": "Bestem hvordan du vil få tilgang til ressursen din", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Underdomene: {subdomain}", "domainPickerNamespace": "Navnerom: {namespace}", "domainPickerShowMore": "Vis mer", - "regionSelectorTitle": "Velg Region", - "regionSelectorInfo": "Å velge en region hjelper oss med å gi bedre ytelse for din lokasjon. Du trenger ikke være i samme region som serveren.", - "regionSelectorPlaceholder": "Velg en region", - "regionSelectorComingSoon": "Kommer snart", - "billingLoadingSubscription": "Laster abonnement...", - "billingFreeTier": "Gratis nivå", - "billingWarningOverLimit": "Advarsel: Du har overskredet en eller flere bruksgrenser. Nettstedene dine vil ikke koble til før du endrer abonnementet ditt eller justerer bruken.", - "billingUsageLimitsOverview": "Oversikt over bruksgrenser", - "billingMonitorUsage": "Overvåk bruken din i forhold til konfigurerte grenser. Hvis du trenger økte grenser, vennligst kontakt support@fossorial.io.", - "billingDataUsage": "Databruk", - "billingOnlineTime": "Online tid for nettsteder", - "billingUsers": "Aktive brukere", - "billingDomains": "Aktive domener", - "billingRemoteExitNodes": "Aktive selvstyrte noder", - "billingNoLimitConfigured": "Ingen grense konfigurert", - "billingEstimatedPeriod": "Estimert faktureringsperiode", - "billingIncludedUsage": "Inkludert Bruk", - "billingIncludedUsageDescription": "Bruk inkludert i din nåværende abonnementsplan", - "billingFreeTierIncludedUsage": "Gratis nivå bruksgrenser", - "billingIncluded": "inkludert", - "billingEstimatedTotal": "Estimert Totalt:", - "billingNotes": "Notater", - "billingEstimateNote": "Dette er et estimat basert på din nåværende bruk.", - "billingActualChargesMayVary": "Faktiske kostnader kan variere.", - "billingBilledAtEnd": "Du vil bli fakturert ved slutten av faktureringsperioden.", - "billingModifySubscription": "Endre abonnement", - "billingStartSubscription": "Start abonnement", - "billingRecurringCharge": "Innkommende Avgift", - "billingManageSubscriptionSettings": "Administrer abonnementsinnstillinger og preferanser", - "billingNoActiveSubscription": "Du har ikke et aktivt abonnement. Start abonnementet ditt for å øke bruksgrensene.", - "billingFailedToLoadSubscription": "Klarte ikke å laste abonnement", - "billingFailedToLoadUsage": "Klarte ikke å laste bruksdata", - "billingFailedToGetCheckoutUrl": "Mislyktes å få betalingslenke", - "billingPleaseTryAgainLater": "Vennligst prøv igjen senere.", - "billingCheckoutError": "Kasserror", - "billingFailedToGetPortalUrl": "Mislyktes å hente portal URL", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", "billingPortalError": "Portal Error", - "billingDataUsageInfo": "Du er ladet for all data som overføres gjennom dine sikre tunneler når du er koblet til skyen. Dette inkluderer både innkommende og utgående trafikk på alle dine nettsteder. Når du når grensen din, vil sidene koble fra til du oppgraderer planen eller reduserer bruken. Data belastes ikke ved bruk av EK-grupper.", - "billingOnlineTimeInfo": "Du er ladet på hvor lenge sidene dine forblir koblet til skyen. For eksempel tilsvarer 44,640 minutter ett nettsted som går 24/7 i en hel måned. Når du når grensen din, vil sidene koble fra til du oppgraderer planen eller reduserer bruken. Tid belastes ikke når du bruker noder.", - "billingUsersInfo": "Du belastes for hver bruker i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive brukerkontoer i organisasjonen din.", - "billingDomainInfo": "Du belastes for hvert domene i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive domenekontoer i organisasjonen din.", - "billingRemoteExitNodesInfo": "Du belastes for hver styrt node i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive styrte noder i organisasjonen din.", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Domene ikke funnet", "domainNotFoundDescription": "Denne ressursen er deaktivert fordi domenet ikke lenger eksisterer i systemet vårt. Vennligst angi et nytt domene for denne ressursen.", "failed": "Mislyktes", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS-endringer kan ta litt tid å propagere over internett. Dette kan ta fra noen få minutter til 48 timer, avhengig av din DNS-leverandør og TTL-innstillinger.", "resourcePortRequired": "Portnummer er påkrevd for ikke-HTTP-ressurser", "resourcePortNotAllowed": "Portnummer skal ikke angis for HTTP-ressurser", - "billingPricingCalculatorLink": "Pris Kalkulator", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Jeg godtar", "termsOfService": "brukervilkårene", @@ -1412,41 +1412,41 @@ "addNewTarget": "Legg til nytt mål", "targetsList": "Liste over mål", "targetErrorDuplicateTargetFound": "Duplikat av mål funnet", - "healthCheckHealthy": "Sunn", - "healthCheckUnhealthy": "Usunn", - "healthCheckUnknown": "Ukjent", - "healthCheck": "Helsekontroll", - "configureHealthCheck": "Konfigurer Helsekontroll", - "configureHealthCheckDescription": "Sett opp helsekontroll for {target}", - "enableHealthChecks": "Aktiver Helsekontroller", - "enableHealthChecksDescription": "Overvåk helsen til dette målet. Du kan overvåke et annet endepunkt enn målet hvis nødvendig.", - "healthScheme": "Metode", - "healthSelectScheme": "Velg metode", - "healthCheckPath": "Sti", - "healthHostname": "IP / Vert", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", + "healthHostname": "IP / Host", "healthPort": "Port", - "healthCheckPathDescription": "Stien for å sjekke helsestatus.", - "healthyIntervalSeconds": "Sunt intervall", - "unhealthyIntervalSeconds": "Usunt intervall", - "IntervalSeconds": "Sunt intervall", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Tid er i sekunder", - "retryAttempts": "Forsøk på nytt", - "expectedResponseCodes": "Forventede svarkoder", - "expectedResponseCodesDescription": "HTTP-statuskode som indikerer sunn status. Hvis den blir stående tom, regnes 200-300 som sunn.", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Egendefinerte topptekster", - "customHeadersDescription": "Overskrifter som er adskilt med linje: Overskriftsnavn: verdi", - "headersValidationError": "Topptekst må være i formatet: header-navn: verdi.", - "saveHealthCheck": "Lagre Helsekontroll", - "healthCheckSaved": "Helsekontroll Lagret", - "healthCheckSavedDescription": "Helsekontrollkonfigurasjonen ble lagret", - "healthCheckError": "Helsekontrollfeil", - "healthCheckErrorDescription": "Det oppstod en feil under lagring av helsekontrollkonfigurasjonen", - "healthCheckPathRequired": "Helsekontrollsti er påkrevd", - "healthCheckMethodRequired": "HTTP-metode er påkrevd", - "healthCheckIntervalMin": "Sjekkeintervallet må være minst 5 sekunder", - "healthCheckTimeoutMin": "Timeout må være minst 1 sekund", - "healthCheckRetryMin": "Forsøk på nytt må være minst 1", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "HTTP-metode", "selectHttpMethod": "Velg HTTP-metode", "domainPickerSubdomainLabel": "Underdomene", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Skriv inn et underdomene for å søke og velge blant tilgjengelige gratis domener.", "domainPickerFreeDomains": "Gratis domener", "domainPickerSearchForAvailableDomains": "Søk etter tilgjengelige domener", - "domainPickerNotWorkSelfHosted": "Merk: Gratis tilbudte domener er ikke tilgjengelig for selv-hostede instanser akkurat nå.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Domene", "resourceEditDomain": "Rediger domene", "siteName": "Områdenavn", @@ -1543,72 +1543,72 @@ "autoLoginError": "Feil ved automatisk innlogging", "autoLoginErrorNoRedirectUrl": "Ingen omdirigerings-URL mottatt fra identitetsleverandøren.", "autoLoginErrorGeneratingUrl": "Kunne ikke generere autentiserings-URL.", - "remoteExitNodeManageRemoteExitNodes": "Administrer Selv-Hostet", - "remoteExitNodeDescription": "Administrer noder for å forlenge nettverkstilkoblingen din", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Søk noder...", - "remoteExitNodeAdd": "Legg til Node", - "remoteExitNodeErrorDelete": "Feil ved sletting av node", - "remoteExitNodeQuestionRemove": "Er du sikker på at du vil fjerne noden {selectedNode} fra organisasjonen?", - "remoteExitNodeMessageRemove": "Når noden er fjernet, vil ikke lenger være tilgjengelig.", - "remoteExitNodeMessageConfirm": "For å bekrefte, skriv inn navnet på noden nedenfor.", - "remoteExitNodeConfirmDelete": "Bekreft sletting av Node", - "remoteExitNodeDelete": "Slett Node", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Opprett node", - "description": "Opprett en ny node for å utvide nettverkstilkoblingen din", - "viewAllButton": "Vis alle koder", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Opprettelsesstrategi", - "description": "Velg denne for manuelt å konfigurere noden eller generere nye legitimasjoner.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Adopter Node", - "description": "Velg dette hvis du allerede har legitimasjon til noden." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Generer Nøkler", - "description": "Velg denne hvis du vil generere nye nøkler for noden" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Adopter Eksisterende Node", - "description": "Skriv inn opplysningene til den eksisterende noden du vil adoptere", + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", "nodeIdLabel": "Node ID", - "nodeIdDescription": "ID-en til den eksisterende noden du vil adoptere", - "secretLabel": "Sikkerhetsnøkkel", - "secretDescription": "Den hemmelige nøkkelen til en eksisterende node", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", "submitButton": "Adopt Node" }, "generate": { - "title": "Genererte Legitimasjoner", - "description": "Bruk disse genererte opplysningene for å konfigurere noden din", + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", "nodeIdTitle": "Node ID", - "secretTitle": "Sikkerhet", - "saveCredentialsTitle": "Legg til Legitimasjoner til Config", - "saveCredentialsDescription": "Legg til disse legitimasjonene i din selv-hostede Pangolin node-konfigurasjonsfil for å fullføre koblingen.", - "submitButton": "Opprett node" + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "Node ID og Secret er påkrevd når du adopterer en eksisterende node" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Feil ved lasting av standarder", - "defaultsNotLoaded": "Standarder ikke lastet", - "createFailed": "Kan ikke opprette node" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Node opprettet" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Noden utvalg", - "remoteExitNodeSelectionDescription": "Velg en node for å sende trafikk gjennom for dette lokale nettstedet", - "remoteExitNodeRequired": "En node må velges for lokale nettsteder", - "noRemoteExitNodesAvailable": "Ingen noder tilgjengelig", - "noRemoteExitNodesAvailableDescription": "Ingen noder er tilgjengelige for denne organisasjonen. Opprett en node først for å bruke lokale nettsteder.", - "exitNode": "Utgangsnode", - "country": "Land", - "rulesMatchCountry": "For tiden basert på kilde IP", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Administrert selv-hostet", "description": "Sikre og lavvedlikeholdsservere, selvbetjente Pangolin med ekstra klokker, og understell", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Internasjonalt domene oppdaget", "willbestoredas": "Vil bli lagret som:", - "roleMappingDescription": "Bestem hvordan roller tilordnes brukere når innloggingen er aktivert når autog-rapportering er aktivert.", - "selectRole": "Velg en rolle", - "roleMappingExpression": "Uttrykk", - "selectRolePlaceholder": "Velg en rolle", - "selectRoleDescription": "Velg en rolle å tilordne alle brukere fra denne identitet leverandøren", - "roleMappingExpressionDescription": "Skriv inn et JMESPath uttrykk for å hente rolleinformasjon fra ID-nøkkelen", - "idpTenantIdRequired": "Bedriftens ID kreves", - "invalidValue": "Ugyldig verdi", - "idpTypeLabel": "Identitet leverandør type", - "roleMappingExpressionPlaceholder": "F.eks. inneholder(grupper, 'admin') && 'Admin' ⋅'Medlem'", - "idpGoogleConfiguration": "Google Konfigurasjon", - "idpGoogleConfigurationDescription": "Konfigurer din Google OAuth2 legitimasjon", - "idpGoogleClientIdDescription": "Din Google OAuth2-klient-ID", - "idpGoogleClientSecretDescription": "Google OAuth2-klienten din hemmelig", - "idpAzureConfiguration": "Azure Entra ID konfigurasjon", - "idpAzureConfigurationDescription": "Konfigurere din Azure Entra ID OAuth2 legitimasjon", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "din-tenant-id", - "idpAzureTenantIdDescription": "Din Azure leie-ID (funnet i Azure Active Directory-oversikten)", - "idpAzureClientIdDescription": "Din Azure App registrerings klient-ID", - "idpAzureClientSecretDescription": "Din Azure App registrerings klient hemmelig", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Konfigurasjon", - "idpAzureConfigurationTitle": "Azure Entra ID konfigurasjon", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Din Azure App registrerings klient-ID", - "idpAzureClientSecretDescription2": "Din Azure App registrerings klient hemmelig", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC leverandør", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnett", - "subnetDescription": "Undernettverket for denne organisasjonens nettverkskonfigurasjon.", - "authPage": "Autentiseringsside", - "authPageDescription": "Konfigurer autoriseringssiden for din organisasjon", - "authPageDomain": "Autentiseringsside domene", - "noDomainSet": "Ingen domene valgt", - "changeDomain": "Endre domene", - "selectDomain": "Velg domene", - "restartCertificate": "Omstart sertifikat", - "editAuthPageDomain": "Rediger auth sidedomene", - "setAuthPageDomain": "Angi autoriseringsside domene", - "failedToFetchCertificate": "Kunne ikke hente sertifikat", - "failedToRestartCertificate": "Kan ikke starte sertifikat", - "addDomainToEnableCustomAuthPages": "Legg til et domene for å aktivere egendefinerte autentiseringssider for organisasjonen din", - "selectDomainForOrgAuthPage": "Velg et domene for organisasjonens autentiseringsside", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", + "authPageDomain": "Auth Page Domain", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Gitt domene", "domainPickerFreeProvidedDomain": "Gratis oppgitt domene", "domainPickerVerified": "Bekreftet", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" kunne ikke gjøres gyldig for {domain}.", "domainPickerSubdomainSanitized": "Underdomenet som ble sanivert", "domainPickerSubdomainCorrected": "\"{sub}\" var korrigert til \"{sanitized}\"", - "orgAuthSignInTitle": "Logg inn på din organisasjon", - "orgAuthChooseIdpDescription": "Velg din identitet leverandør for å fortsette", - "orgAuthNoIdpConfigured": "Denne organisasjonen har ikke noen identitetstjeneste konfigurert. Du kan i stedet logge inn med Pangolin identiteten din.", - "orgAuthSignInWithPangolin": "Logg inn med Pangolin", - "subscriptionRequiredToUse": "Et abonnement er påkrevd for å bruke denne funksjonen.", - "idpDisabled": "Identitetsleverandører er deaktivert.", - "orgAuthPageDisabled": "Informasjons-siden for organisasjon er deaktivert.", - "domainRestartedDescription": "Domene-verifiseringen ble startet på nytt", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Rediger fil: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Rediger fil: docker-compose.yml", "emailVerificationRequired": "E-postbekreftelse er nødvendig. Logg inn på nytt via {dashboardUrl}/auth/login og fullfør dette trinnet. Kom deretter tilbake her.", - "twoFactorSetupRequired": "To-faktor autentiseringsoppsett er nødvendig. Vennligst logg inn igjen via {dashboardUrl}/auth/login og fullfør dette steget. Kom deretter tilbake her." + "twoFactorSetupRequired": "To-faktor autentiseringsoppsett er nødvendig. Vennligst logg inn igjen via {dashboardUrl}/auth/login og fullfør dette steget. Kom deretter tilbake her.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From f90e6bef9e92e7bd764b79586544f7b7979afd62 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 21:10:27 -0700 Subject: [PATCH 14/28] New translations en-us.json (Spanish) --- messages/es-ES.json | 363 ++++++++++++++++++++++---------------------- 1 file changed, 184 insertions(+), 179 deletions(-) diff --git a/messages/es-ES.json b/messages/es-ES.json index d48e77b5..c816ca6c 100644 --- a/messages/es-ES.json +++ b/messages/es-ES.json @@ -67,7 +67,7 @@ "siteDocker": "Expandir para detalles de despliegue de Docker", "toggle": "Cambiar", "dockerCompose": "Componer Docker", - "dockerRun": "Ejecutar Docker", + "dockerRun": "Docker Run", "siteLearnLocal": "Los sitios locales no tienen túnel, aprender más", "siteConfirmCopy": "He copiado la configuración", "searchSitesProgress": "Buscar sitios...", @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "La forma más fácil de crear un punto de entrada en tu red. Sin configuración adicional.", "siteWg": "Wirex Guardia Básica", "siteWgDescription": "Utilice cualquier cliente Wirex Guard para establecer un túnel. Se requiere una configuración manual de NAT.", - "siteWgDescriptionSaas": "Utilice cualquier cliente de WireGuard para establecer un túnel. Se requiere configuración manual de NAT. SOLO FUNCIONA EN NODOS AUTOGESTIONADOS", + "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", "siteLocalDescription": "Solo recursos locales. Sin túneles.", - "siteLocalDescriptionSaas": "Solo recursos locales. Sin túneles. SOLO FUNCIONA EN NODOS AUTOGESTIONADOS", + "siteLocalDescriptionSaas": "Local resources only. No tunneling.", "siteSeeAll": "Ver todos los sitios", "siteTunnelDescription": "Determina cómo quieres conectarte a tu sitio", "siteNewtCredentials": "Credenciales nuevas", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS Recurso", "resourceHTTPDescription": "Solicitudes de proxy a tu aplicación sobre HTTPS usando un subdominio o dominio base.", "resourceRaw": "Recurso TCP/UDP sin procesar", - "resourceRawDescription": "Solicitudes de proxy a tu aplicación a través de TCP/UDP usando un número de puerto.", + "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", "resourceCreate": "Crear Recurso", "resourceCreateDescription": "Siga los siguientes pasos para crear un nuevo recurso", "resourceSeeAll": "Ver todos los recursos", @@ -168,9 +168,9 @@ "siteSelect": "Seleccionar sitio", "siteSearch": "Buscar sitio", "siteNotFound": "Sitio no encontrado.", - "selectCountry": "Seleccionar país", - "searchCountries": "Buscar países...", - "noCountryFound": "Ningún país encontrado.", + "selectCountry": "Select country", + "searchCountries": "Search countries...", + "noCountryFound": "No country found.", "siteSelectionDescription": "Este sitio proporcionará conectividad al objetivo.", "resourceType": "Tipo de recurso", "resourceTypeDescription": "Determina cómo quieres acceder a tu recurso", @@ -817,7 +817,7 @@ "redirectUrl": "URL de redirección", "redirectUrlAbout": "Acerca de la URL de redirección", "redirectUrlAboutDescription": "Esta es la URL a la que los usuarios serán redireccionados después de la autenticación. Necesitas configurar esta URL en la configuración de tu proveedor de identidad.", - "pangolinAuth": "Autenticación - Pangolin", + "pangolinAuth": "Auth - Pangolin", "verificationCodeLengthRequirements": "Tu código de verificación debe tener 8 caracteres.", "errorOccurred": "Se ha producido un error", "emailErrorVerify": "No se pudo verificar el email:", @@ -1220,7 +1220,7 @@ "billing": "Facturación", "orgBillingDescription": "Gestiona tu información de facturación y suscripciones", "github": "GitHub", - "pangolinHosted": "Pangolin Alojado", + "pangolinHosted": "Pangolin Hosted", "fossorial": "Fossorial", "completeAccountSetup": "Completar configuración de cuenta", "completeAccountSetupDescription": "Establece tu contraseña para comenzar", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Subdominio: {subdomain}", "domainPickerNamespace": "Espacio de nombres: {namespace}", "domainPickerShowMore": "Mostrar más", - "regionSelectorTitle": "Seleccionar Región", - "regionSelectorInfo": "Seleccionar una región nos ayuda a brindar un mejor rendimiento para tu ubicación. No tienes que estar en la misma región que tu servidor.", - "regionSelectorPlaceholder": "Elige una región", - "regionSelectorComingSoon": "Próximamente", - "billingLoadingSubscription": "Cargando suscripción...", - "billingFreeTier": "Nivel Gratis", - "billingWarningOverLimit": "Advertencia: Has excedido uno o más límites de uso. Tus sitios no se conectarán hasta que modifiques tu suscripción o ajustes tu uso.", - "billingUsageLimitsOverview": "Descripción general de los límites de uso", - "billingMonitorUsage": "Monitorea tu uso comparado con los límites configurados. Si necesitas que aumenten los límites, contáctanos a soporte@fossorial.io.", - "billingDataUsage": "Uso de datos", - "billingOnlineTime": "Tiempo en línea del sitio", - "billingUsers": "Usuarios activos", - "billingDomains": "Dominios activos", - "billingRemoteExitNodes": "Nodos autogestionados activos", - "billingNoLimitConfigured": "No se ha configurado ningún límite", - "billingEstimatedPeriod": "Período de facturación estimado", - "billingIncludedUsage": "Uso incluido", - "billingIncludedUsageDescription": "Uso incluido con su plan de suscripción actual", - "billingFreeTierIncludedUsage": "Permisos de uso del nivel gratuito", - "billingIncluded": "incluido", - "billingEstimatedTotal": "Total Estimado:", - "billingNotes": "Notas", - "billingEstimateNote": "Esta es una estimación basada en tu uso actual.", - "billingActualChargesMayVary": "Los cargos reales pueden variar.", - "billingBilledAtEnd": "Se te facturará al final del período de facturación.", - "billingModifySubscription": "Modificar Suscripción", - "billingStartSubscription": "Iniciar Suscripción", - "billingRecurringCharge": "Cargo Recurrente", - "billingManageSubscriptionSettings": "Administra la configuración y preferencias de tu suscripción", - "billingNoActiveSubscription": "No tienes una suscripción activa. Inicia tu suscripción para aumentar los límites de uso.", - "billingFailedToLoadSubscription": "Error al cargar la suscripción", - "billingFailedToLoadUsage": "Error al cargar el uso", - "billingFailedToGetCheckoutUrl": "Error al obtener la URL de pago", - "billingPleaseTryAgainLater": "Por favor, inténtelo de nuevo más tarde.", - "billingCheckoutError": "Error de pago", - "billingFailedToGetPortalUrl": "Error al obtener la URL del portal", - "billingPortalError": "Error del portal", - "billingDataUsageInfo": "Se le cobran todos los datos transferidos a través de sus túneles seguros cuando se conectan a la nube. Esto incluye tanto tráfico entrante como saliente a través de todos sus sitios. Cuando alcance su límite, sus sitios se desconectarán hasta que actualice su plan o reduzca el uso. Los datos no se cargan cuando se usan nodos.", - "billingOnlineTimeInfo": "Se te cobrará en función del tiempo que tus sitios permanezcan conectados a la nube. Por ejemplo, 44.640 minutos equivale a un sitio que funciona 24/7 durante un mes completo. Cuando alcance su límite, sus sitios se desconectarán hasta que mejore su plan o reduzca el uso. No se cargará el tiempo al usar nodos.", - "billingUsersInfo": "Se te cobra por cada usuario en tu organización. La facturación se calcula diariamente según la cantidad de cuentas de usuario activas en tu organización.", - "billingDomainInfo": "Se te cobra por cada dominio en tu organización. La facturación se calcula diariamente según la cantidad de cuentas de dominio activas en tu organización.", - "billingRemoteExitNodesInfo": "Se te cobra por cada nodo gestionado en tu organización. La facturación se calcula diariamente según la cantidad de nodos gestionados activos en tu organización.", + "regionSelectorTitle": "Select Region", + "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", + "regionSelectorPlaceholder": "Choose a region", + "regionSelectorComingSoon": "Coming Soon", + "billingLoadingSubscription": "Loading subscription...", + "billingFreeTier": "Free Tier", + "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", + "billingUsageLimitsOverview": "Usage Limits Overview", + "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", + "billingDataUsage": "Data Usage", + "billingOnlineTime": "Site Online Time", + "billingUsers": "Active Users", + "billingDomains": "Active Domains", + "billingRemoteExitNodes": "Active Self-hosted Nodes", + "billingNoLimitConfigured": "No limit configured", + "billingEstimatedPeriod": "Estimated Billing Period", + "billingIncludedUsage": "Included Usage", + "billingIncludedUsageDescription": "Usage included with your current subscription plan", + "billingFreeTierIncludedUsage": "Free tier usage allowances", + "billingIncluded": "included", + "billingEstimatedTotal": "Estimated Total:", + "billingNotes": "Notes", + "billingEstimateNote": "This is an estimate based on your current usage.", + "billingActualChargesMayVary": "Actual charges may vary.", + "billingBilledAtEnd": "You will be billed at the end of the billing period.", + "billingModifySubscription": "Modify Subscription", + "billingStartSubscription": "Start Subscription", + "billingRecurringCharge": "Recurring Charge", + "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", + "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", + "billingFailedToLoadSubscription": "Failed to load subscription", + "billingFailedToLoadUsage": "Failed to load usage", + "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", + "billingPleaseTryAgainLater": "Please try again later.", + "billingCheckoutError": "Checkout Error", + "billingFailedToGetPortalUrl": "Failed to get portal URL", + "billingPortalError": "Portal Error", + "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", + "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", + "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", + "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", + "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", "domainNotFound": "Dominio no encontrado", "domainNotFoundDescription": "Este recurso está deshabilitado porque el dominio ya no existe en nuestro sistema. Por favor, establece un nuevo dominio para este recurso.", "failed": "Fallido", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Los cambios de DNS pueden tardar un tiempo en propagarse a través de internet. Esto puede tardar desde unos pocos minutos hasta 48 horas, dependiendo de tu proveedor de DNS y la configuración de TTL.", "resourcePortRequired": "Se requiere número de puerto para recursos no HTTP", "resourcePortNotAllowed": "El número de puerto no debe establecerse para recursos HTTP", - "billingPricingCalculatorLink": "Calculadora de Precios", + "billingPricingCalculatorLink": "Pricing Calculator", "signUpTerms": { "IAgreeToThe": "Estoy de acuerdo con los", "termsOfService": "términos del servicio", @@ -1412,41 +1412,41 @@ "addNewTarget": "Agregar nuevo destino", "targetsList": "Lista de destinos", "targetErrorDuplicateTargetFound": "Se encontró un destino duplicado", - "healthCheckHealthy": "Saludable", - "healthCheckUnhealthy": "No saludable", - "healthCheckUnknown": "Desconocido", - "healthCheck": "Chequeo de salud", - "configureHealthCheck": "Configurar Chequeo de Salud", - "configureHealthCheckDescription": "Configura la monitorización de salud para {target}", - "enableHealthChecks": "Activar Chequeos de Salud", - "enableHealthChecksDescription": "Controlar la salud de este objetivo. Puedes supervisar un punto final diferente al objetivo si es necesario.", - "healthScheme": "Método", - "healthSelectScheme": "Seleccionar método", - "healthCheckPath": "Ruta", + "healthCheckHealthy": "Healthy", + "healthCheckUnhealthy": "Unhealthy", + "healthCheckUnknown": "Unknown", + "healthCheck": "Health Check", + "configureHealthCheck": "Configure Health Check", + "configureHealthCheckDescription": "Set up health monitoring for {target}", + "enableHealthChecks": "Enable Health Checks", + "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", + "healthScheme": "Method", + "healthSelectScheme": "Select Method", + "healthCheckPath": "Path", "healthHostname": "IP / Host", - "healthPort": "Puerto", - "healthCheckPathDescription": "La ruta para comprobar el estado de salud.", - "healthyIntervalSeconds": "Intervalo Saludable", - "unhealthyIntervalSeconds": "Intervalo No Saludable", - "IntervalSeconds": "Intervalo Saludable", - "timeoutSeconds": "Tiempo de Espera", - "timeIsInSeconds": "El tiempo está en segundos", - "retryAttempts": "Intentos de Reintento", - "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.", + "healthPort": "Port", + "healthCheckPathDescription": "The path to check for health status.", + "healthyIntervalSeconds": "Healthy Interval", + "unhealthyIntervalSeconds": "Unhealthy Interval", + "IntervalSeconds": "Healthy Interval", + "timeoutSeconds": "Timeout", + "timeIsInSeconds": "Time is in seconds", + "retryAttempts": "Retry Attempts", + "expectedResponseCodes": "Expected Response Codes", + "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", "customHeaders": "Cabeceras personalizadas", - "customHeadersDescription": "Nueva línea de cabeceras separada: Nombre de cabecera: valor", - "headersValidationError": "Los encabezados deben estar en el formato: Nombre de cabecera: valor.", - "saveHealthCheck": "Guardar Chequeo de Salud", - "healthCheckSaved": "Chequeo de Salud Guardado", - "healthCheckSavedDescription": "La configuración del chequeo de salud se ha guardado correctamente", - "healthCheckError": "Error en el Chequeo de Salud", - "healthCheckErrorDescription": "Ocurrió un error al guardar la configuración del chequeo de salud", - "healthCheckPathRequired": "Se requiere la ruta del chequeo de salud", - "healthCheckMethodRequired": "Se requiere el método HTTP", - "healthCheckIntervalMin": "El intervalo de comprobación debe ser de al menos 5 segundos", - "healthCheckTimeoutMin": "El tiempo de espera debe ser de al menos 1 segundo", - "healthCheckRetryMin": "Los intentos de reintento deben ser de al menos 1", + "customHeadersDescription": "Headers new line separated: Header-Name: value", + "headersValidationError": "Headers must be in the format: Header-Name: value", + "saveHealthCheck": "Save Health Check", + "healthCheckSaved": "Health Check Saved", + "healthCheckSavedDescription": "Health check configuration has been saved successfully", + "healthCheckError": "Health Check Error", + "healthCheckErrorDescription": "An error occurred while saving the health check configuration", + "healthCheckPathRequired": "Health check path is required", + "healthCheckMethodRequired": "HTTP method is required", + "healthCheckIntervalMin": "Check interval must be at least 5 seconds", + "healthCheckTimeoutMin": "Timeout must be at least 1 second", + "healthCheckRetryMin": "Retry attempts must be at least 1", "httpMethod": "Método HTTP", "selectHttpMethod": "Seleccionar método HTTP", "domainPickerSubdomainLabel": "Subdominio", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Ingrese un subdominio para buscar y seleccionar entre dominios gratuitos disponibles.", "domainPickerFreeDomains": "Dominios gratuitos", "domainPickerSearchForAvailableDomains": "Buscar dominios disponibles", - "domainPickerNotWorkSelfHosted": "Nota: Los dominios gratuitos proporcionados no están disponibles para instancias autogestionadas por ahora.", + "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", "resourceDomain": "Dominio", "resourceEditDomain": "Editar dominio", "siteName": "Nombre del sitio", @@ -1543,72 +1543,72 @@ "autoLoginError": "Error de inicio de sesión automático", "autoLoginErrorNoRedirectUrl": "No se recibió URL de redirección del proveedor de identidad.", "autoLoginErrorGeneratingUrl": "Error al generar URL de autenticación.", - "remoteExitNodeManageRemoteExitNodes": "Administrar Nodos Autogestionados", - "remoteExitNodeDescription": "Administrar nodos para extender la conectividad de red", + "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", + "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Buscar nodos...", - "remoteExitNodeAdd": "Añadir Nodo", - "remoteExitNodeErrorDelete": "Error al eliminar el nodo", - "remoteExitNodeQuestionRemove": "¿Está seguro de que desea eliminar el nodo {selectedNode} de la organización?", - "remoteExitNodeMessageRemove": "Una vez eliminado, el nodo ya no será accesible.", - "remoteExitNodeMessageConfirm": "Para confirmar, por favor escriba el nombre del nodo a continuación.", - "remoteExitNodeConfirmDelete": "Confirmar eliminar nodo", - "remoteExitNodeDelete": "Eliminar Nodo", + "searchRemoteExitNodes": "Search nodes...", + "remoteExitNodeAdd": "Add Node", + "remoteExitNodeErrorDelete": "Error deleting node", + "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", + "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", + "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", + "remoteExitNodeConfirmDelete": "Confirm Delete Node", + "remoteExitNodeDelete": "Delete Node", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Crear Nodo", - "description": "Crear un nuevo nodo para extender la conectividad de red", - "viewAllButton": "Ver todos los nodos", + "title": "Create Node", + "description": "Create a new node to extend your network connectivity", + "viewAllButton": "View All Nodes", "strategy": { - "title": "Estrategia de Creación", - "description": "Elija esto para configurar manualmente su nodo o generar nuevas credenciales.", + "title": "Creation Strategy", + "description": "Choose this to manually configure your node or generate new credentials.", "adopt": { - "title": "Adoptar Nodo", - "description": "Elija esto si ya tiene las credenciales para el nodo." + "title": "Adopt Node", + "description": "Choose this if you already have the credentials for the node." }, "generate": { - "title": "Generar Claves", - "description": "Elija esto si desea generar nuevas claves para el nodo" + "title": "Generate Keys", + "description": "Choose this if you want to generate new keys for the node" } }, "adopt": { - "title": "Adoptar Nodo Existente", - "description": "Introduzca las credenciales del nodo existente que desea adoptar", - "nodeIdLabel": "ID del nodo", - "nodeIdDescription": "El ID del nodo existente que desea adoptar", - "secretLabel": "Secreto", - "secretDescription": "La clave secreta del nodo existente", - "submitButton": "Adoptar Nodo" + "title": "Adopt Existing Node", + "description": "Enter the credentials of the existing node you want to adopt", + "nodeIdLabel": "Node ID", + "nodeIdDescription": "The ID of the existing node you want to adopt", + "secretLabel": "Secret", + "secretDescription": "The secret key of the existing node", + "submitButton": "Adopt Node" }, "generate": { - "title": "Credenciales Generadas", - "description": "Utilice estas credenciales generadas para configurar su nodo", - "nodeIdTitle": "ID del nodo", - "secretTitle": "Secreto", - "saveCredentialsTitle": "Agregar Credenciales a la Configuración", - "saveCredentialsDescription": "Agrega estas credenciales a tu archivo de configuración del nodo Pangolin autogestionado para completar la conexión.", - "submitButton": "Crear Nodo" + "title": "Generated Credentials", + "description": "Use these generated credentials to configure your node", + "nodeIdTitle": "Node ID", + "secretTitle": "Secret", + "saveCredentialsTitle": "Add Credentials to Config", + "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", + "submitButton": "Create Node" }, "validation": { - "adoptRequired": "El ID del nodo y el secreto son necesarios al adoptar un nodo existente" + "adoptRequired": "Node ID and Secret are required when adopting an existing node" }, "errors": { - "loadDefaultsFailed": "Falló al cargar los valores predeterminados", - "defaultsNotLoaded": "Valores predeterminados no cargados", - "createFailed": "Error al crear el nodo" + "loadDefaultsFailed": "Failed to load defaults", + "defaultsNotLoaded": "Defaults not loaded", + "createFailed": "Failed to create node" }, "success": { - "created": "Nodo creado correctamente" + "created": "Node created successfully" } }, - "remoteExitNodeSelection": "Selección de nodo", - "remoteExitNodeSelectionDescription": "Seleccione un nodo a través del cual enrutar el tráfico para este sitio local", - "remoteExitNodeRequired": "Un nodo debe ser seleccionado para sitios locales", - "noRemoteExitNodesAvailable": "No hay nodos disponibles", - "noRemoteExitNodesAvailableDescription": "No hay nodos disponibles para esta organización. Crea un nodo primero para usar sitios locales.", - "exitNode": "Nodo de Salida", - "country": "País", - "rulesMatchCountry": "Actualmente basado en IP de origen", + "remoteExitNodeSelection": "Node Selection", + "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", + "remoteExitNodeRequired": "A node must be selected for local sites", + "noRemoteExitNodesAvailable": "No Nodes Available", + "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "exitNode": "Exit Node", + "country": "Country", + "rulesMatchCountry": "Currently based on source IP", "managedSelfHosted": { "title": "Autogestionado", "description": "Servidor Pangolin autoalojado más fiable y de bajo mantenimiento con campanas y silbidos extra", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Dominio Internacional detectado", "willbestoredas": "Se almacenará como:", - "roleMappingDescription": "Determinar cómo se asignan los roles a los usuarios cuando se registran cuando está habilitada la provisión automática.", - "selectRole": "Seleccione un rol", - "roleMappingExpression": "Expresión", - "selectRolePlaceholder": "Elija un rol", - "selectRoleDescription": "Seleccione un rol para asignar a todos los usuarios de este proveedor de identidad", - "roleMappingExpressionDescription": "Introduzca una expresión JMESPath para extraer información de rol del token de ID", - "idpTenantIdRequired": "El ID del cliente es obligatorio", - "invalidValue": "Valor inválido", - "idpTypeLabel": "Tipo de proveedor de identidad", - "roleMappingExpressionPlaceholder": "e.g., contiene(grupos, 'administrador') && 'administrador' || 'miembro'", - "idpGoogleConfiguration": "Configuración de Google", - "idpGoogleConfigurationDescription": "Configura tus credenciales de Google OAuth2", - "idpGoogleClientIdDescription": "Tu ID de cliente de Google OAuth2", - "idpGoogleClientSecretDescription": "Tu secreto de cliente de Google OAuth2", - "idpAzureConfiguration": "Configuración de Azure Entra ID", - "idpAzureConfigurationDescription": "Configure sus credenciales de Azure Entra ID OAuth2", + "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", + "selectRole": "Select a Role", + "roleMappingExpression": "Expression", + "selectRolePlaceholder": "Choose a role", + "selectRoleDescription": "Select a role to assign to all users from this identity provider", + "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", + "idpTenantIdRequired": "Tenant ID is required", + "invalidValue": "Invalid value", + "idpTypeLabel": "Identity Provider Type", + "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google Configuration", + "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", + "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", + "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Configuration", + "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "su-inquilino-id", - "idpAzureTenantIdDescription": "Su ID de inquilino de Azure (encontrado en el resumen de Azure Active Directory)", - "idpAzureClientIdDescription": "Tu ID de Cliente de Registro de Azure App", - "idpAzureClientSecretDescription": "Tu Azure App Registro Cliente secreto", + "idpTenantIdPlaceholder": "your-tenant-id", + "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", + "idpAzureClientIdDescription": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Configuración de Google", - "idpAzureConfigurationTitle": "Configuración de Azure Entra ID", + "idpGoogleConfigurationTitle": "Google Configuration", + "idpAzureConfigurationTitle": "Azure Entra ID Configuration", "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Tu ID de Cliente de Registro de Azure App", - "idpAzureClientSecretDescription2": "Tu Azure App Registro Cliente secreto", + "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", "idpGoogleDescription": "Proveedor OAuth2/OIDC de Google", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subred", - "subnetDescription": "La subred para la configuración de red de esta organización.", - "authPage": "Página Auth", - "authPageDescription": "Configurar la página de autenticación de su organización", + "subnet": "Subnet", + "subnetDescription": "The subnet for this organization's network configuration.", + "authPage": "Auth Page", + "authPageDescription": "Configure the auth page for your organization", "authPageDomain": "Auth Page Domain", - "noDomainSet": "Ningún dominio establecido", - "changeDomain": "Cambiar dominio", - "selectDomain": "Seleccionar dominio", - "restartCertificate": "Reiniciar certificado", - "editAuthPageDomain": "Editar dominio Auth Page", - "setAuthPageDomain": "Establecer dominio Auth Page", - "failedToFetchCertificate": "Error al obtener el certificado", - "failedToRestartCertificate": "Error al reiniciar el certificado", - "addDomainToEnableCustomAuthPages": "Añadir un dominio para habilitar páginas de autenticación personalizadas para su organización", - "selectDomainForOrgAuthPage": "Seleccione un dominio para la página de autenticación de la organización", + "noDomainSet": "No domain set", + "changeDomain": "Change Domain", + "selectDomain": "Select Domain", + "restartCertificate": "Restart Certificate", + "editAuthPageDomain": "Edit Auth Page Domain", + "setAuthPageDomain": "Set Auth Page Domain", + "failedToFetchCertificate": "Failed to fetch certificate", + "failedToRestartCertificate": "Failed to restart certificate", + "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", + "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", "domainPickerProvidedDomain": "Dominio proporcionado", "domainPickerFreeProvidedDomain": "Dominio proporcionado gratis", "domainPickerVerified": "Verificado", @@ -1707,16 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "No se ha podido hacer válido \"{sub}\" para {domain}.", "domainPickerSubdomainSanitized": "Subdominio saneado", "domainPickerSubdomainCorrected": "\"{sub}\" fue corregido a \"{sanitized}\"", - "orgAuthSignInTitle": "Inicia sesión en tu organización", - "orgAuthChooseIdpDescription": "Elige tu proveedor de identidad para continuar", - "orgAuthNoIdpConfigured": "Esta organización no tiene ningún proveedor de identidad configurado. En su lugar puedes iniciar sesión con tu identidad de Pangolin.", - "orgAuthSignInWithPangolin": "Iniciar sesión con Pangolin", - "subscriptionRequiredToUse": "Se requiere una suscripción para utilizar esta función.", - "idpDisabled": "Los proveedores de identidad están deshabilitados.", - "orgAuthPageDisabled": "La página de autenticación de la organización está deshabilitada.", - "domainRestartedDescription": "Verificación de dominio reiniciada con éxito", + "orgAuthSignInTitle": "Sign in to your organization", + "orgAuthChooseIdpDescription": "Choose your identity provider to continue", + "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", + "orgAuthSignInWithPangolin": "Sign in with Pangolin", + "subscriptionRequiredToUse": "A subscription is required to use this feature.", + "idpDisabled": "Identity providers are disabled.", + "orgAuthPageDisabled": "Organization auth page is disabled.", + "domainRestartedDescription": "Domain verification restarted successfully", "resourceAddEntrypointsEditFile": "Editar archivo: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Editar archivo: docker-compose.yml", "emailVerificationRequired": "Se requiere verificación de correo electrónico. Por favor, inicie sesión de nuevo a través de {dashboardUrl}/auth/login complete este paso. Luego, vuelva aquí.", - "twoFactorSetupRequired": "La configuración de autenticación de doble factor es requerida. Por favor, inicia sesión de nuevo a través de {dashboardUrl}/auth/login completa este paso. Luego, vuelve aquí." + "twoFactorSetupRequired": "La configuración de autenticación de doble factor es requerida. Por favor, inicia sesión de nuevo a través de {dashboardUrl}/auth/login completa este paso. Luego, vuelve aquí.", + "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", + "authPageUpdated": "Auth page updated successfully", + "healthCheckNotAvailable": "Local", + "rewritePath": "Rewrite Path", + "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." } From 759661420eb0c9243d4f11c70558971a5cab2201 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:16:53 -0700 Subject: [PATCH 15/28] New translations en-us.json (French) --- messages/fr-FR.json | 362 ++++++++++++++++++++++---------------------- 1 file changed, 181 insertions(+), 181 deletions(-) diff --git a/messages/fr-FR.json b/messages/fr-FR.json index 95a90c0c..6028ab5b 100644 --- a/messages/fr-FR.json +++ b/messages/fr-FR.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "La façon la plus simple de créer un point d'entrée dans votre réseau. Pas de configuration supplémentaire.", "siteWg": "WireGuard basique", "siteWgDescription": "Utilisez n'importe quel client WireGuard pour établir un tunnel. Configuration NAT manuelle requise.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Utilisez n'importe quel client WireGuard pour établir un tunnel. Configuration NAT manuelle requise. FONCTIONNE UNIQUEMENT SUR DES NŒUDS AUTONOMES", "siteLocalDescription": "Ressources locales seulement. Pas de tunneling.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Ressources locales uniquement. Pas de tunneling. FONCTIONNE UNIQUEMENT SUR DES NŒUDS AUTONOMES", "siteSeeAll": "Voir tous les sites", "siteTunnelDescription": "Déterminez comment vous voulez vous connecter à votre site", "siteNewtCredentials": "Identifiants Newt", @@ -159,7 +159,7 @@ "resourceHTTP": "Ressource HTTPS", "resourceHTTPDescription": "Requêtes de proxy à votre application via HTTPS en utilisant un sous-domaine ou un domaine de base.", "resourceRaw": "Ressource TCP/UDP brute", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Demandes de proxy à votre application via TCP/UDP en utilisant un numéro de port.", "resourceCreate": "Créer une ressource", "resourceCreateDescription": "Suivez les étapes ci-dessous pour créer une nouvelle ressource", "resourceSeeAll": "Voir toutes les ressources", @@ -168,9 +168,9 @@ "siteSelect": "Sélectionner un site", "siteSearch": "Chercher un site", "siteNotFound": "Aucun site trouvé.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Sélectionnez un pays", + "searchCountries": "Recherchez des pays...", + "noCountryFound": "Aucun pays trouvé.", "siteSelectionDescription": "Ce site fournira la connectivité à la cible.", "resourceType": "Type de ressource", "resourceTypeDescription": "Déterminer comment vous voulez accéder à votre ressource", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Sous-domaine : {subdomain}", "domainPickerNamespace": "Espace de noms : {namespace}", "domainPickerShowMore": "Afficher plus", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", + "regionSelectorTitle": "Sélectionner Région", + "regionSelectorInfo": "Sélectionner une région nous aide à offrir de meilleures performances pour votre localisation. Vous n'avez pas besoin d'être dans la même région que votre serveur.", + "regionSelectorPlaceholder": "Choisissez une région", + "regionSelectorComingSoon": "Bientôt disponible", + "billingLoadingSubscription": "Chargement de l'abonnement...", + "billingFreeTier": "Niveau gratuit", + "billingWarningOverLimit": "Attention : Vous avez dépassé une ou plusieurs limites d'utilisation. Vos sites ne se connecteront pas tant que vous n'avez pas modifié votre abonnement ou ajusté votre utilisation.", + "billingUsageLimitsOverview": "Vue d'ensemble des limites d'utilisation", + "billingMonitorUsage": "Surveillez votre consommation par rapport aux limites configurées. Si vous avez besoin d'une augmentation des limites, veuillez nous contacter à support@fossorial.io.", + "billingDataUsage": "Utilisation des données", + "billingOnlineTime": "Temps en ligne du site", + "billingUsers": "Utilisateurs actifs", + "billingDomains": "Domaines actifs", + "billingRemoteExitNodes": "Nœuds auto-hébergés actifs", + "billingNoLimitConfigured": "Aucune limite configurée", + "billingEstimatedPeriod": "Période de facturation estimée", + "billingIncludedUsage": "Utilisation incluse", + "billingIncludedUsageDescription": "Utilisation incluse dans votre plan d'abonnement actuel", + "billingFreeTierIncludedUsage": "Tolérances d'utilisation du niveau gratuit", + "billingIncluded": "inclus", + "billingEstimatedTotal": "Total estimé :", "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "billingEstimateNote": "Ceci est une estimation basée sur votre utilisation actuelle.", + "billingActualChargesMayVary": "Les frais réels peuvent varier.", + "billingBilledAtEnd": "Vous serez facturé à la fin de la période de facturation.", + "billingModifySubscription": "Modifier l'abonnement", + "billingStartSubscription": "Démarrer l'abonnement", + "billingRecurringCharge": "Frais récurrents", + "billingManageSubscriptionSettings": "Gérez les paramètres et préférences de votre abonnement", + "billingNoActiveSubscription": "Vous n'avez pas d'abonnement actif. Commencez votre abonnement pour augmenter les limites d'utilisation.", + "billingFailedToLoadSubscription": "Échec du chargement de l'abonnement", + "billingFailedToLoadUsage": "Échec du chargement de l'utilisation", + "billingFailedToGetCheckoutUrl": "Échec pour obtenir l'URL de paiement", + "billingPleaseTryAgainLater": "Veuillez réessayer plus tard.", + "billingCheckoutError": "Erreur de paiement", + "billingFailedToGetPortalUrl": "Échec pour obtenir l'URL du portail", + "billingPortalError": "Erreur du portail", + "billingDataUsageInfo": "Vous êtes facturé pour toutes les données transférées via vos tunnels sécurisés lorsque vous êtes connecté au cloud. Cela inclut le trafic entrant et sortant sur tous vos sites. Lorsque vous atteignez votre limite, vos sites se déconnecteront jusqu'à ce que vous mettiez à niveau votre plan ou réduisiez l'utilisation. Les données ne sont pas facturées lors de l'utilisation de nœuds.", + "billingOnlineTimeInfo": "Vous êtes facturé en fonction de la durée de connexion de vos sites au cloud. Par exemple, 44 640 minutes équivaut à un site fonctionnant 24/7 pendant un mois complet. Lorsque vous atteignez votre limite, vos sites se déconnecteront jusqu'à ce que vous mettiez à niveau votre forfait ou réduisiez votre consommation. Le temps n'est pas facturé lors de l'utilisation de nœuds.", + "billingUsersInfo": "Vous êtes facturé pour chaque utilisateur dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de comptes utilisateurs actifs dans votre organisation.", + "billingDomainInfo": "Vous êtes facturé pour chaque domaine dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de comptes de domaine actifs dans votre organisation.", + "billingRemoteExitNodesInfo": "Vous êtes facturé pour chaque nœud géré dans votre organisation. La facturation est calculée quotidiennement en fonction du nombre de nœuds gérés actifs dans votre organisation.", "domainNotFound": "Domaine introuvable", "domainNotFoundDescription": "Cette ressource est désactivée car le domaine n'existe plus dans notre système. Veuillez définir un nouveau domaine pour cette ressource.", "failed": "Échec", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Les modifications DNS peuvent mettre du temps à se propager sur internet. Cela peut prendre de quelques minutes à 48 heures selon votre fournisseur DNS et les réglages TTL.", "resourcePortRequired": "Le numéro de port est requis pour les ressources non-HTTP", "resourcePortNotAllowed": "Le numéro de port ne doit pas être défini pour les ressources HTTP", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Calculateur de prix", "signUpTerms": { "IAgreeToThe": "Je suis d'accord avec", "termsOfService": "les conditions d'utilisation", @@ -1412,41 +1412,41 @@ "addNewTarget": "Ajouter une nouvelle cible", "targetsList": "Liste des cibles", "targetErrorDuplicateTargetFound": "Cible en double trouvée", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", + "healthCheckHealthy": "Sain", + "healthCheckUnhealthy": "En mauvaise santé", + "healthCheckUnknown": "Inconnu", + "healthCheck": "Vérification de l'état de santé", + "configureHealthCheck": "Configurer la vérification de l'état de santé", + "configureHealthCheckDescription": "Configurer la surveillance de la santé pour {target}", + "enableHealthChecks": "Activer les vérifications de santé", + "enableHealthChecksDescription": "Surveiller la vie de cette cible. Vous pouvez surveiller un point de terminaison différent de la cible si nécessaire.", + "healthScheme": "Méthode", + "healthSelectScheme": "Sélectionnez la méthode", + "healthCheckPath": "Chemin d'accès", + "healthHostname": "IP / Hôte", "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckPathDescription": "Le chemin à vérifier pour le statut de santé.", + "healthyIntervalSeconds": "Intervalle sain", + "unhealthyIntervalSeconds": "Intervalle en mauvaise santé", + "IntervalSeconds": "Intervalle sain", + "timeoutSeconds": "Délai", + "timeIsInSeconds": "Le temps est exprimé en secondes", + "retryAttempts": "Tentatives de réessai", + "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.", "customHeaders": "En-têtes personnalisés", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "En-têtes séparés par une nouvelle ligne: En-nom: valeur", + "headersValidationError": "Les entêtes doivent être au format : Header-Name: valeur.", + "saveHealthCheck": "Sauvegarder la vérification de l'état de santé", + "healthCheckSaved": "Vérification de l'état de santé enregistrée", + "healthCheckSavedDescription": "La configuration de la vérification de l'état de santé a été enregistrée avec succès", + "healthCheckError": "Erreur de vérification de l'état de santé", + "healthCheckErrorDescription": "Une erreur s'est produite lors de l'enregistrement de la configuration de la vérification de l'état de santé", + "healthCheckPathRequired": "Le chemin de vérification de l'état de santé est requis", + "healthCheckMethodRequired": "La méthode HTTP est requise", + "healthCheckIntervalMin": "L'intervalle de vérification doit être d'au moins 5 secondes", + "healthCheckTimeoutMin": "Le délai doit être d'au moins 1 seconde", + "healthCheckRetryMin": "Les tentatives de réessai doivent être d'au moins 1", "httpMethod": "Méthode HTTP", "selectHttpMethod": "Sélectionnez la méthode HTTP", "domainPickerSubdomainLabel": "Sous-domaine", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Entrez un sous-domaine pour rechercher et sélectionner parmi les domaines gratuits disponibles.", "domainPickerFreeDomains": "Domaines gratuits", "domainPickerSearchForAvailableDomains": "Rechercher des domaines disponibles", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Remarque : Les domaines fournis gratuitement ne sont pas disponibles pour les instances auto-hébergées pour le moment.", "resourceDomain": "Domaine", "resourceEditDomain": "Modifier le domaine", "siteName": "Nom du site", @@ -1543,72 +1543,72 @@ "autoLoginError": "Erreur de connexion automatique", "autoLoginErrorNoRedirectUrl": "Aucune URL de redirection reçue du fournisseur d'identité.", "autoLoginErrorGeneratingUrl": "Échec de la génération de l'URL d'authentification.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Gérer auto-hébergé", + "remoteExitNodeDescription": "Gérer les nœuds pour étendre votre connectivité réseau", + "remoteExitNodes": "Nœuds", + "searchRemoteExitNodes": "Rechercher des nœuds...", + "remoteExitNodeAdd": "Ajouter un noeud", + "remoteExitNodeErrorDelete": "Erreur lors de la suppression du noeud", + "remoteExitNodeQuestionRemove": "Êtes-vous sûr de vouloir supprimer le noeud {selectedNode} de l'organisation ?", + "remoteExitNodeMessageRemove": "Une fois supprimé, le noeud ne sera plus accessible.", + "remoteExitNodeMessageConfirm": "Pour confirmer, veuillez saisir le nom du noeud ci-dessous.", + "remoteExitNodeConfirmDelete": "Confirmer la suppression du noeud", + "remoteExitNodeDelete": "Supprimer le noeud", + "sidebarRemoteExitNodes": "Nœuds", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Créer un noeud", + "description": "Créer un nouveau nœud pour étendre votre connectivité réseau", + "viewAllButton": "Voir tous les nœuds", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Stratégie de création", + "description": "Choisissez ceci pour configurer manuellement votre nœud ou générer de nouveaux identifiants.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Adopter un nœud", + "description": "Choisissez ceci si vous avez déjà les identifiants pour le noeud." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Générer des clés", + "description": "Choisissez ceci si vous voulez générer de nouvelles clés pour le noeud" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", + "title": "Adopter un nœud existant", + "description": "Entrez les identifiants du noeud existant que vous souhaitez adopter", + "nodeIdLabel": "Nœud ID", + "nodeIdDescription": "L'ID du noeud existant que vous voulez adopter", "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "secretDescription": "La clé secrète du noeud existant", + "submitButton": "Noeud d'Adopt" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", + "title": "Informations d'identification générées", + "description": "Utilisez ces identifiants générés pour configurer votre noeud", + "nodeIdTitle": "Nœud ID", "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "saveCredentialsTitle": "Ajouter des identifiants à la config", + "saveCredentialsDescription": "Ajoutez ces informations d'identification à votre fichier de configuration du nœud Pangolin auto-hébergé pour compléter la connexion.", + "submitButton": "Créer un noeud" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "ID de nœud et secret sont requis lors de l'adoption d'un noeud existant" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Échec du chargement des valeurs par défaut", + "defaultsNotLoaded": "Valeurs par défaut non chargées", + "createFailed": "Impossible de créer le noeud" }, "success": { - "created": "Node created successfully" + "created": "Noeud créé avec succès" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Sélection du noeud", + "remoteExitNodeSelectionDescription": "Sélectionnez un nœud pour acheminer le trafic pour ce site local", + "remoteExitNodeRequired": "Un noeud doit être sélectionné pour les sites locaux", + "noRemoteExitNodesAvailable": "Aucun noeud disponible", + "noRemoteExitNodesAvailableDescription": "Aucun noeud n'est disponible pour cette organisation. Créez d'abord un noeud pour utiliser des sites locaux.", + "exitNode": "Nœud de sortie", + "country": "Pays", + "rulesMatchCountry": "Actuellement basé sur l'IP source", "managedSelfHosted": { "title": "Gestion autonome", "description": "Serveur Pangolin auto-hébergé avec des cloches et des sifflets supplémentaires", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Domaine international détecté", "willbestoredas": "Sera stocké comme :", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", + "roleMappingDescription": "Détermine comment les rôles sont assignés aux utilisateurs lorsqu'ils se connectent lorsque la fourniture automatique est activée.", + "selectRole": "Sélectionnez un rôle", "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "selectRolePlaceholder": "Choisir un rôle", + "selectRoleDescription": "Sélectionnez un rôle à assigner à tous les utilisateurs de ce fournisseur d'identité", + "roleMappingExpressionDescription": "Entrez une expression JMESPath pour extraire les informations du rôle du jeton ID", + "idpTenantIdRequired": "L'ID du locataire est requis", + "invalidValue": "Valeur non valide", + "idpTypeLabel": "Type de fournisseur d'identité", + "roleMappingExpressionPlaceholder": "ex: contenu(groupes) && 'admin' || 'membre'", + "idpGoogleConfiguration": "Configuration Google", + "idpGoogleConfigurationDescription": "Configurer vos identifiants Google OAuth2", + "idpGoogleClientIdDescription": "Votre identifiant client Google OAuth2", + "idpGoogleClientSecretDescription": "Votre secret client Google OAuth2", + "idpAzureConfiguration": "Configuration de l'entra ID Azure", + "idpAzureConfigurationDescription": "Configurer vos identifiants OAuth2 Azure Entra", + "idpTenantId": "ID du locataire", + "idpTenantIdPlaceholder": "votre-locataire-id", + "idpAzureTenantIdDescription": "Votre ID de locataire Azure (trouvé dans l'aperçu Azure Active Directory)", + "idpAzureClientIdDescription": "Votre ID client d'enregistrement de l'application Azure", + "idpAzureClientSecretDescription": "Le secret de votre client d'enregistrement Azure App", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Configuration Google", + "idpAzureConfigurationTitle": "Configuration de l'entra ID Azure", + "idpTenantIdLabel": "ID du locataire", + "idpAzureClientIdDescription2": "Votre ID client d'enregistrement de l'application Azure", + "idpAzureClientSecretDescription2": "Le secret de votre client d'enregistrement Azure App", "idpGoogleDescription": "Fournisseur Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Sous-réseau", + "subnetDescription": "Le sous-réseau de la configuration réseau de cette organisation.", + "authPage": "Page d'authentification", + "authPageDescription": "Configurer la page d'authentification de votre organisation", + "authPageDomain": "Domaine de la page d'authentification", + "noDomainSet": "Aucun domaine défini", + "changeDomain": "Changer de domaine", + "selectDomain": "Sélectionner un domaine", + "restartCertificate": "Redémarrer le certificat", + "editAuthPageDomain": "Modifier le domaine de la page d'authentification", + "setAuthPageDomain": "Définir le domaine de la page d'authentification", + "failedToFetchCertificate": "Impossible de récupérer le certificat", + "failedToRestartCertificate": "Échec du redémarrage du certificat", + "addDomainToEnableCustomAuthPages": "Ajouter un domaine pour activer les pages d'authentification personnalisées pour votre organisation", + "selectDomainForOrgAuthPage": "Sélectionnez un domaine pour la page d'authentification de l'organisation", "domainPickerProvidedDomain": "Domaine fourni", "domainPickerFreeProvidedDomain": "Domaine fourni gratuitement", "domainPickerVerified": "Vérifié", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "La «{sub}» n'a pas pu être validée pour {domain}.", "domainPickerSubdomainSanitized": "Sous-domaine nettoyé", "domainPickerSubdomainCorrected": "\"{sub}\" a été corrigé à \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Connectez-vous à votre organisation", + "orgAuthChooseIdpDescription": "Choisissez votre fournisseur d'identité pour continuer", + "orgAuthNoIdpConfigured": "Cette organisation n'a aucun fournisseur d'identité configuré. Vous pouvez vous connecter avec votre identité Pangolin à la place.", + "orgAuthSignInWithPangolin": "Se connecter avec Pangolin", + "subscriptionRequiredToUse": "Un abonnement est requis pour utiliser cette fonctionnalité.", + "idpDisabled": "Les fournisseurs d'identité sont désactivés.", + "orgAuthPageDisabled": "La page d'authentification de l'organisation est désactivée.", + "domainRestartedDescription": "La vérification du domaine a été redémarrée avec succès", "resourceAddEntrypointsEditFile": "Modifier le fichier : config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Modifier le fichier : docker-compose.yml", "emailVerificationRequired": "La vérification de l'e-mail est requise. Veuillez vous reconnecter via {dashboardUrl}/auth/login terminé cette étape. Puis revenez ici.", "twoFactorSetupRequired": "La configuration d'authentification à deux facteurs est requise. Veuillez vous reconnecter via {dashboardUrl}/auth/login terminé cette étape. Puis revenez ici.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Une erreur s'est produite lors de la mise à jour de la page d\u000027authentification", + "authPageUpdated": "Page d\u000027authentification mise à jour avec succès", + "healthCheckNotAvailable": "Locale", + "rewritePath": "Réécrire le chemin", + "rewritePathDescription": "Réécrivez éventuellement le chemin avant de le transmettre à la cible." } From 418120196f63206508944e2db76241dc6773e0dc Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:16:55 -0700 Subject: [PATCH 16/28] New translations en-us.json (Bulgarian) --- messages/bg-BG.json | 374 ++++++++++++++++++++++---------------------- 1 file changed, 187 insertions(+), 187 deletions(-) diff --git a/messages/bg-BG.json b/messages/bg-BG.json index ba407ff2..29915cbe 100644 --- a/messages/bg-BG.json +++ b/messages/bg-BG.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Най-лесният начин да създадете входна точка в мрежата си. Без допълнително конфигуриране.", "siteWg": "Основен WireGuard", "siteWgDescription": "Use any WireGuard client to establish a tunnel. Manual NAT setup required. ONLY WORKS ON SELF HOSTED NODES", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Използвайте всеки WireGuard клиент за установяване на тунел. Ръчно нат задаване е необходимо. РАБОТИ САМО НА СОБСТВЕНИ УЗЛИ.", "siteLocalDescription": "Local resources only. No tunneling. ONLY WORKS ON SELF HOSTED NODES", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Само локални ресурси. Без тунелиране. РАБОТИ САМО НА СОБСТВЕНИ УЗЛИ.", "siteSeeAll": "Вижте всички сайтове", "siteTunnelDescription": "Определете как искате да се свържете с вашия сайт", "siteNewtCredentials": "Newt Удостоверения", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS ресурс", "resourceHTTPDescription": "Прокси заявки към вашето приложение през HTTPS с помощта на субдомейн или базов домейн.", "resourceRaw": "Суров TCP/UDP ресурс", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Прокси заявки към вашето приложение през TCP/UDP с помощта на номер на порт.", "resourceCreate": "Създайте ресурс", "resourceCreateDescription": "Следвайте стъпките по-долу, за да създадете нов ресурс", "resourceSeeAll": "Вижте всички ресурси", @@ -168,9 +168,9 @@ "siteSelect": "Изберете сайт", "siteSearch": "Търсене на сайт", "siteNotFound": "Няма намерени сайтове.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Изберете държава", + "searchCountries": "Търсене на държави...", + "noCountryFound": "Не е намерена държава.", "siteSelectionDescription": "Този сайт ще осигури свързаност до целта.", "resourceType": "Тип ресурс", "resourceTypeDescription": "Определете как искате да получите достъп до вашия ресурс", @@ -833,7 +833,7 @@ "emailVerifyResendProgress": "Пренасочване...", "emailVerifyResend": "Не получихте код? Кликнете тук, за да изпратите отново", "passwordNotMatch": "Паролите не съвпадат", - "signupError": "An error occurred while signing up", + "signupError": "Възникна грешка при регистрация", "pangolinLogoAlt": "Лого на Pangolin", "inviteAlready": "Изглежда, че сте били поканени!", "inviteAlreadyDescription": "За да приемете поканата, трябва да влезете или да създадете акаунт.", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Поддомейн: {subdomain}", "domainPickerNamespace": "Име на пространство: {namespace}", "domainPickerShowMore": "Покажи повече", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Избор на регион", + "regionSelectorInfo": "Изборът на регион ни помага да предоставим по-добра производителност за вашето местоположение. Не е необходимо да сте в същия регион като сървъра.", + "regionSelectorPlaceholder": "Изберете регион", + "regionSelectorComingSoon": "Очаква се скоро", + "billingLoadingSubscription": "Зареждане на абонамент...", + "billingFreeTier": "Безплатен план", + "billingWarningOverLimit": "Предупреждение: Превишили сте една или повече лимити за използване. Вашите сайтове няма да се свържат, докато не промените абонамента си или не коригирате използването.", + "billingUsageLimitsOverview": "Преглед на лимитите за използване", + "billingMonitorUsage": "Следете използването спрямо конфигурираните лимити. Ако ви е необходимо увеличаване на лимитите, моля, свържете се с нас на support@fossorial.io.", + "billingDataUsage": "Използване на данни", + "billingOnlineTime": "Време на работа на сайта", + "billingUsers": "Активни потребители", + "billingDomains": "Активни домейни", + "billingRemoteExitNodes": "Активни самостоятелно хоствани възли", + "billingNoLimitConfigured": "Няма конфигуриран лимит", + "billingEstimatedPeriod": "Очакван период на фактуриране", + "billingIncludedUsage": "Включено използване", + "billingIncludedUsageDescription": "Използване, включено във вашия текущ абонаментен план", + "billingFreeTierIncludedUsage": "Разрешени използвания в безплатния план", + "billingIncluded": "включено", + "billingEstimatedTotal": "Очаквана сума:", + "billingNotes": "Бележки", + "billingEstimateNote": "Това е приблизителна оценка, основана на текущото ви използване.", + "billingActualChargesMayVary": "Реалните разходи могат да варират.", + "billingBilledAtEnd": "Фактурирате се в края на фактурния период.", + "billingModifySubscription": "Промяна на абонамента", + "billingStartSubscription": "Започване на абонамент", + "billingRecurringCharge": "Повтаряща се такса", + "billingManageSubscriptionSettings": "Управление на настройките и предпочитанията на абонамента ви", + "billingNoActiveSubscription": "Нямате активен абонамент. Започнете абонамента си, за да увеличите лимитите за използване.", + "billingFailedToLoadSubscription": "Грешка при зареждане на абонамент", + "billingFailedToLoadUsage": "Грешка при зареждане на използването", + "billingFailedToGetCheckoutUrl": "Неуспех при получаване на URL за плащане", + "billingPleaseTryAgainLater": "Моля, опитайте отново по-късно.", + "billingCheckoutError": "Грешка при плащане", + "billingFailedToGetPortalUrl": "Неуспех при получаване на URL на портала", + "billingPortalError": "Грешка в портала", + "billingDataUsageInfo": "Таксува се за всички данни, прехвърляни през вашите защитени тунели, когато сте свързани към облака. Това включва както входящия, така и изходящия трафик за всички ваши сайтове. Когато достигнете лимита си, вашите сайтове ще бъдат прекъснати, докато не надстроите плана или не намалите използването. Данните не се таксуват при използване на възли.", + "billingOnlineTimeInfo": "Таксува се на база колко време вашите сайтове остават свързани с облака. Пример: 44,640 минути се равняват на един сайт работещ 24/7 за цял месец. Когато достигнете лимита си, вашите сайтове ще бъдат прекъснати, докато не надстроите плана или не намалите използването. Времето не се таксува при използване на възли.", + "billingUsersInfo": "Таксува се за всеки потребител във вашата организация. Фактурирането се извършва ежедневно на базата на броя активни потребителски акаунти във вашата организация.", + "billingDomainInfo": "Таксува се за всеки домейн във вашата организация. Фактурирането се извършва ежедневно на базата на броя активни домейн акаунти във вашата организация.", + "billingRemoteExitNodesInfo": "Таксува се за всеки управляван възел във вашата организация. Фактурирането се извършва ежедневно на базата на броя активни управлявани възли във вашата организация.", "domainNotFound": "Домейнът не е намерен", "domainNotFoundDescription": "Този ресурс е деактивиран, защото домейнът вече не съществува в нашата система. Моля, задайте нов домейн за този ресурс.", "failed": "Неуспешно", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Промените в DNS може да отнемат време, за да се разпространят в интернет. Това може да отнеме от няколко минути до 48 часа, в зависимост от вашия DNS доставчик и TTL настройките .", "resourcePortRequired": "Номерът на порта е задължителен за не-HTTP ресурси", "resourcePortNotAllowed": "Номерът на порта не трябва да бъде задаван за HTTP ресурси", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Калкулатор на цените", "signUpTerms": { "IAgreeToThe": "Съгласен съм с", "termsOfService": "условията за ползване", @@ -1412,41 +1412,41 @@ "addNewTarget": "Добави нова цел", "targetsList": "Списък с цели", "targetErrorDuplicateTargetFound": "Дублирана цел намерена", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckHealthy": "Здрав", + "healthCheckUnhealthy": "Нездрав", + "healthCheckUnknown": "Неизвестен", + "healthCheck": "Проверка на здравето", + "configureHealthCheck": "Конфигуриране на проверка на здравето", + "configureHealthCheckDescription": "Настройте мониторинг на здравето за {target}", + "enableHealthChecks": "Разрешаване на проверки на здравето", + "enableHealthChecksDescription": "Мониторинг на здравето на тази цел. Можете да наблюдавате различен краен пункт от целта, ако е необходимо.", + "healthScheme": "Метод", + "healthSelectScheme": "Избор на метод", + "healthCheckPath": "Път", + "healthHostname": "IP / Хост", + "healthPort": "Порт", + "healthCheckPathDescription": "Пътят за проверка на здравното състояние.", + "healthyIntervalSeconds": "Интервал за здраве", + "unhealthyIntervalSeconds": "Интервал за нездраве", + "IntervalSeconds": "Интервал за здраве", + "timeoutSeconds": "Време за изчакване", + "timeIsInSeconds": "Времето е в секунди", + "retryAttempts": "Опити за повторно", + "expectedResponseCodes": "Очаквани кодове за отговор", + "expectedResponseCodesDescription": "HTTP статус код, указващ здравословно състояние. Ако бъде оставено празно, между 200-300 се счита за здравословно.", "customHeaders": "Персонализирани заглавия", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Add custom headers to be sent when proxying requests. One per line in the format Header-Name: value", + "headersValidationError": "Заглавията трябва да бъдат във формат: Име на заглавието: стойност.", + "saveHealthCheck": "Запазване на проверка на здравето", + "healthCheckSaved": "Проверка на здравето е запазена", + "healthCheckSavedDescription": "Конфигурацията на здравната проверка е запазена успешно", + "healthCheckError": "Грешка при проверката на здравето", + "healthCheckErrorDescription": "Възникна грешка при запазването на конфигурацията за проверка на здравето", + "healthCheckPathRequired": "Изисква се път за проверка на здравето", + "healthCheckMethodRequired": "Изисква се HTTP метод", + "healthCheckIntervalMin": "Интервалът за проверка трябва да е поне 5 секунди", + "healthCheckTimeoutMin": "Времето за изчакване трябва да е поне 1 секунда", + "healthCheckRetryMin": "Опитите за повторение трябва да са поне 1", "httpMethod": "HTTP Метод", "selectHttpMethod": "Изберете HTTP метод", "domainPickerSubdomainLabel": "Поддомен", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Въведете поддомен, за да търсите и изберете от наличните свободни домейни.", "domainPickerFreeDomains": "Безплатни домейни", "domainPickerSearchForAvailableDomains": "Търсене за налични домейни", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Забележка: Безплатните предоставени домейни не са налични за самостоятелно хоствани инстанции в момента.", "resourceDomain": "Домейн", "resourceEditDomain": "Редактиране на домейн", "siteName": "Име на сайта", @@ -1543,72 +1543,72 @@ "autoLoginError": "Грешка при автоматично влизане", "autoLoginErrorNoRedirectUrl": "Не е получен URL за пренасочване от доставчика на идентификационни данни.", "autoLoginErrorGeneratingUrl": "Неуспешно генериране на URL за удостоверяване.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Управление на самостоятелно хоствани", + "remoteExitNodeDescription": "Управление на възли за разширяване на мрежовата ви свързаност", + "remoteExitNodes": "Възли", + "searchRemoteExitNodes": "Търсене на възли...", + "remoteExitNodeAdd": "Добавяне на възел", + "remoteExitNodeErrorDelete": "Грешка при изтриване на възел", + "remoteExitNodeQuestionRemove": "Сигурни ли сте, че искате да премахнете възела {selectedNode} от организацията?", + "remoteExitNodeMessageRemove": "След премахване, възелът вече няма да бъде достъпен.", + "remoteExitNodeMessageConfirm": "За потвърждение, моля въведете името на възела по-долу.", + "remoteExitNodeConfirmDelete": "Потвърдете изтриването на възела (\"Confirm Delete Site\" match)", + "remoteExitNodeDelete": "Изтрийте възела (\"Delete Site\" match)", + "sidebarRemoteExitNodes": "Възли (\"Local\" match)", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Създаване на възел", + "description": "Създайте нов възел, за да разширите мрежовата си свързаност", + "viewAllButton": "Вижте всички възли", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Стратегия на създаване", + "description": "Изберете това, за да конфигурирате ръчно възела си или да създадете нови кредити.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Осиновете възел", + "description": "Изберете това, ако вече имате кредити за възела." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Генериране на ключове", + "description": "Изберете това, ако искате да генерирате нови ключове за възела" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Осиновяване на съществуващ възел", + "description": "Въведете данните на съществуващия възел, който искате да осиновите", + "nodeIdLabel": "ID на възела", + "nodeIdDescription": "ID на съществуващия възел, който искате да осиновите", + "secretLabel": "Секретен", + "secretDescription": "Секретният ключ на съществуващия възел", + "submitButton": "Осиновете възела" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Генерирани кредити", + "description": "Използвайте тези генерирани кредити, за да конфигурирате възела си", + "nodeIdTitle": "ID на възела", + "secretTitle": "Секретен", + "saveCredentialsTitle": "Добавете кредити към конфигурацията", + "saveCredentialsDescription": "Добавете тези кредити към конфигурационния файл на вашия самостоятелно хостван Pangolin възел, за да завършите връзката.", + "submitButton": "Създаване на възел" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "ID на възела и секрет са необходими при осиновяване на съществуващ възел" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Грешка при зареждане на подразбирани настройки", + "defaultsNotLoaded": "Подразбирани настройки не са заредени", + "createFailed": "Грешка при създаване на възел" }, "success": { - "created": "Node created successfully" + "created": "Възелът е създаден успешно" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Избор на възел", + "remoteExitNodeSelectionDescription": "Изберете възел, през който да пренасочвате трафика за местния сайт", + "remoteExitNodeRequired": "Необходимо е да бъде избран възел за местни сайтове", + "noRemoteExitNodesAvailable": "Няма налични възли", + "noRemoteExitNodesAvailableDescription": "Няма налични възли за тази организация. Първо създайте възел, за да използвате местни сайтове.", + "exitNode": "Изходен възел", + "country": "Държава", + "rulesMatchCountry": "Понастоящем на базата на изходния IP", "managedSelfHosted": { "title": "Управлявано Самостоятелно-хоствано", "description": "По-надежден и по-нисък поддръжка на Самостоятелно-хостван Панголиин сървър с допълнителни екстри", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Открит международен домейн", "willbestoredas": "Ще бъде съхранено като:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Определете как се разпределят ролите на потребителите при вписване, когато е активирано автоматично предоставяне.", + "selectRole": "Избор на роля", + "roleMappingExpression": "Израз", + "selectRolePlaceholder": "Избор на роля", + "selectRoleDescription": "Изберете роля за присвояване на всички потребители от този доставчик на идентичност", + "roleMappingExpressionDescription": "Въведете израз JMESPath, за да извлечете информация за ролята от ID токена", + "idpTenantIdRequired": "Изисква се идентификационен номер на наемателя", + "invalidValue": "Невалидна стойност", + "idpTypeLabel": "Тип на доставчика на идентичност", + "roleMappingExpressionPlaceholder": "напр.: contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Конфигурация на Google", + "idpGoogleConfigurationDescription": "Конфигурирайте своите Google OAuth2 кредити", + "idpGoogleClientIdDescription": "Вашият Google OAuth2 клиентски ID", + "idpGoogleClientSecretDescription": "Вашият Google OAuth2 клиентски секрет", + "idpAzureConfiguration": "Конфигурация на Azure Entra ID", + "idpAzureConfigurationDescription": "Конфигурирайте своите Azure Entra ID OAuth2 кредити", + "idpTenantId": "Идентификационен номер на наемателя", + "idpTenantIdPlaceholder": "вашият идентификационен номер на наемателя", + "idpAzureTenantIdDescription": "Вашият Azure идентификационен номер на наемателя (намира се в преглед на Azure Active Directory)", + "idpAzureClientIdDescription": "Вашият Azure клиентски идентификационен номер за приложението", + "idpAzureClientSecretDescription": "Вашият Azure клиентски секрет за приложението", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Конфигурация на Google", + "idpAzureConfigurationTitle": "Конфигурация на Azure Entra ID", + "idpTenantIdLabel": "Идентификационен номер на наемателя", + "idpAzureClientIdDescription2": "Вашият Azure клиентски идентификационен номер за приложението", + "idpAzureClientSecretDescription2": "Вашият Azure клиентски секрет за приложението", "idpGoogleDescription": "Google OAuth2/OIDC доставчик", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC доставчик", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Подмрежа", + "subnetDescription": "Подмрежата за конфигурацията на мрежата на тази организация.", + "authPage": "Страница за удостоверяване", + "authPageDescription": "Конфигурирайте страницата за удостоверяване на вашата организация", + "authPageDomain": "Домен на страницата за удостоверяване", + "noDomainSet": "Няма зададен домейн", + "changeDomain": "Смяна на домейн", + "selectDomain": "Избор на домейн", + "restartCertificate": "Рестартиране на сертификат", + "editAuthPageDomain": "Редактиране на домейна на страницата за удостоверяване", + "setAuthPageDomain": "Задаване на домейн на страницата за удостоверяване", + "failedToFetchCertificate": "Неуспех при извличане на сертификат", + "failedToRestartCertificate": "Неуспех при рестартиране на сертификат", + "addDomainToEnableCustomAuthPages": "Добавете домейн, за да активирате персонализирани страници за удостоверяване за вашата организация", + "selectDomainForOrgAuthPage": "Изберете домейн за страницата за удостоверяване на организацията", "domainPickerProvidedDomain": "Предоставен домейн", "domainPickerFreeProvidedDomain": "Безплатен предоставен домейн", "domainPickerVerified": "Проверено", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" не може да се направи валиден за {domain}.", "domainPickerSubdomainSanitized": "Поддомен пречистен", "domainPickerSubdomainCorrected": "\"{sub}\" беше коригиран на \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Впишете се във вашата организация", + "orgAuthChooseIdpDescription": "Изберете своя доставчик на идентичност, за да продължите", + "orgAuthNoIdpConfigured": "Тази организация няма конфигурирани доставчици на идентичност. Можете да влезете с вашата Pangolin идентичност.", + "orgAuthSignInWithPangolin": "Впишете се с Pangolin", + "subscriptionRequiredToUse": "Необходим е абонамент, за да използвате тази функция.", + "idpDisabled": "Доставчиците на идентичност са деактивирани.", + "orgAuthPageDisabled": "Страницата за удостоверяване на организацията е деактивирана.", + "domainRestartedDescription": "Проверка на домейна е рестартирана успешно", "resourceAddEntrypointsEditFile": "Редактиране на файл: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Редактиране на файл: docker-compose.yml", "emailVerificationRequired": "Потвърждението на Email е необходимо. Моля, влезте отново чрез {dashboardUrl}/auth/login, за да завършите тази стъпка. След това, върнете се тук.", "twoFactorSetupRequired": "Необходима е настройка на двуфакторно удостоверяване. Моля, влезте отново чрез {dashboardUrl}/auth/login, за да завършите тази стъпка. След това, върнете се тук.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Възникна грешка при актуализирането на настройките на страницата за удостоверяване", + "authPageUpdated": "Страницата за удостоверяване е актуализирана успешно", + "healthCheckNotAvailable": "Локална", + "rewritePath": "Пренапиши път", + "rewritePathDescription": "По избор пренапиши пътя преди пренасочване към целта." } From 1251b1e87067e3d0eae14acd892ae6d21036814e Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:16:56 -0700 Subject: [PATCH 17/28] New translations en-us.json (Czech) --- messages/cs-CZ.json | 372 ++++++++++++++++++++++---------------------- 1 file changed, 186 insertions(+), 186 deletions(-) diff --git a/messages/cs-CZ.json b/messages/cs-CZ.json index fb6e2eb0..ab264302 100644 --- a/messages/cs-CZ.json +++ b/messages/cs-CZ.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Nejjednodušší způsob, jak vytvořit vstupní bod do vaší sítě. Žádné další nastavení.", "siteWg": "Základní WireGuard", "siteWgDescription": "Použijte jakéhokoli klienta WireGuard abyste sestavili tunel. Vyžaduje se ruční nastavení NAT.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Použijte jakéhokoli klienta WireGuard abyste sestavili tunel. Vyžaduje se ruční nastavení NAT. FUNGUJE POUZE NA SELF-HOSTED SERVERECH", "siteLocalDescription": "Pouze lokální zdroje. Žádný tunel.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Pouze lokální zdroje. Žádný tunel. FUNGUJE POUZE NA SELF-HOSTED SERVERECH", "siteSeeAll": "Zobrazit všechny lokality", "siteTunnelDescription": "Určete jak se chcete připojit k vaší lokalitě", "siteNewtCredentials": "Přihlašovací údaje Newt", @@ -159,7 +159,7 @@ "resourceHTTP": "Zdroj HTTPS", "resourceHTTPDescription": "Požadavky na proxy pro vaši aplikaci přes HTTPS pomocí subdomény nebo základní domény.", "resourceRaw": "Surový TCP/UDP zdroj", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Požadavky na proxy pro vaši aplikaci přes TCP/UDP pomocí čísla portu.", "resourceCreate": "Vytvořit zdroj", "resourceCreateDescription": "Postupujte podle níže uvedených kroků, abyste vytvořili a připojili nový zdroj", "resourceSeeAll": "Zobrazit všechny zdroje", @@ -168,9 +168,9 @@ "siteSelect": "Vybrat lokalitu", "siteSearch": "Hledat lokalitu", "siteNotFound": "Nebyla nalezena žádná lokalita.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Vyberte zemi", + "searchCountries": "Hledat země...", + "noCountryFound": "Nebyla nalezena žádná země.", "siteSelectionDescription": "Tato lokalita poskytne připojení k cíli.", "resourceType": "Typ zdroje", "resourceTypeDescription": "Určete, jak chcete přistupovat ke svému zdroji", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Subdoména: {subdomain}", "domainPickerNamespace": "Jmenný prostor: {namespace}", "domainPickerShowMore": "Zobrazit více", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Vybrat region", + "regionSelectorInfo": "Výběr regionu nám pomáhá poskytovat lepší výkon pro vaši polohu. Nemusíte být ve stejném regionu jako váš server.", + "regionSelectorPlaceholder": "Vyberte region", + "regionSelectorComingSoon": "Již brzy", + "billingLoadingSubscription": "Načítání odběru...", + "billingFreeTier": "Volná úroveň", + "billingWarningOverLimit": "Upozornění: Překročili jste jeden nebo více omezení používání. Vaše stránky se nepřipojí dokud nezměníte předplatné nebo neupravíte své používání.", + "billingUsageLimitsOverview": "Přehled omezení použití", + "billingMonitorUsage": "Sledujte vaše využití pomocí nastavených limitů. Pokud potřebujete zvýšit limity, kontaktujte nás prosím support@fossorial.io.", + "billingDataUsage": "Využití dat", + "billingOnlineTime": "Stránka online čas", + "billingUsers": "Aktivní uživatelé", + "billingDomains": "Aktivní domény", + "billingRemoteExitNodes": "Aktivní Samostatně hostované uzly", + "billingNoLimitConfigured": "Žádný limit nenastaven", + "billingEstimatedPeriod": "Odhadované období fakturace", + "billingIncludedUsage": "Zahrnuto využití", + "billingIncludedUsageDescription": "Využití zahrnované s aktuálním plánem předplatného", + "billingFreeTierIncludedUsage": "Povolenky bezplatné úrovně využití", + "billingIncluded": "zahrnuto", + "billingEstimatedTotal": "Odhadovaný celkem:", + "billingNotes": "Poznámky", + "billingEstimateNote": "Toto je odhad založený na aktuálním využití.", + "billingActualChargesMayVary": "Skutečné náklady se mohou lišit.", + "billingBilledAtEnd": "Budete účtováni na konci fakturační doby.", + "billingModifySubscription": "Upravit předplatné", + "billingStartSubscription": "Začít předplatné", + "billingRecurringCharge": "Opakované nabití", + "billingManageSubscriptionSettings": "Spravovat nastavení a nastavení předplatného", + "billingNoActiveSubscription": "Nemáte aktivní předplatné. Začněte předplatné, abyste zvýšili omezení používání.", + "billingFailedToLoadSubscription": "Nepodařilo se načíst odběr", + "billingFailedToLoadUsage": "Nepodařilo se načíst využití", + "billingFailedToGetCheckoutUrl": "Nepodařilo se získat adresu URL pokladny", + "billingPleaseTryAgainLater": "Zkuste to prosím znovu později.", + "billingCheckoutError": "Chyba pokladny", + "billingFailedToGetPortalUrl": "Nepodařilo se získat URL portálu", + "billingPortalError": "Chyba portálu", + "billingDataUsageInfo": "Pokud jste připojeni k cloudu, jsou vám účtována všechna data přenášená prostřednictvím zabezpečených tunelů. To zahrnuje příchozí i odchozí provoz na všech vašich stránkách. Jakmile dosáhnete svého limitu, vaše stránky se odpojí, dokud neaktualizujete svůj tarif nebo nezmenšíte jeho používání. Data nejsou nabírána při používání uzlů.", + "billingOnlineTimeInfo": "Platíte na základě toho, jak dlouho budou vaše stránky připojeny k cloudu. Například, 44,640 minut se rovná jedné stránce 24/7 po celý měsíc. Jakmile dosáhnete svého limitu, vaše stránky se odpojí, dokud neaktualizujete svůj tarif nebo nezkrátíte jeho používání. Čas není vybírán při používání uzlů.", + "billingUsersInfo": "Obdrželi jste platbu za každého uživatele ve vaší organizaci. Fakturace je počítána denně na základě počtu aktivních uživatelských účtů ve vašem org.", + "billingDomainInfo": "Platba je účtována za každou doménu ve vaší organizaci. Fakturace je počítána denně na základě počtu aktivních doménových účtů na Vašem org.", + "billingRemoteExitNodesInfo": "Za každý spravovaný uzel ve vaší organizaci se vám účtuje denně. Fakturace je počítána na základě počtu aktivních spravovaných uzlů ve vašem org.", "domainNotFound": "Doména nenalezena", "domainNotFoundDescription": "Tento dokument je zakázán, protože doména již neexistuje náš systém. Nastavte prosím novou doménu pro tento dokument.", "failed": "Selhalo", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Změna DNS může trvat nějakou dobu, než se šíří po internetu. To může trvat kdekoli od několika minut do 48 hodin v závislosti na poskytovateli DNS a nastavení TTL.", "resourcePortRequired": "Pro neHTTP zdroje je vyžadováno číslo portu", "resourcePortNotAllowed": "Číslo portu by nemělo být nastaveno pro HTTP zdroje", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Cenová kalkulačka", "signUpTerms": { "IAgreeToThe": "Souhlasím s", "termsOfService": "podmínky služby", @@ -1412,41 +1412,41 @@ "addNewTarget": "Add New Target", "targetsList": "Seznam cílů", "targetErrorDuplicateTargetFound": "Byl nalezen duplicitní cíl", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckHealthy": "Zdravé", + "healthCheckUnhealthy": "Nezdravé", + "healthCheckUnknown": "Neznámý", + "healthCheck": "Kontrola stavu", + "configureHealthCheck": "Konfigurace kontroly stavu", + "configureHealthCheckDescription": "Nastavit sledování zdravotního stavu pro {target}", + "enableHealthChecks": "Povolit kontrolu stavu", + "enableHealthChecksDescription": "Sledujte zdraví tohoto cíle. V případě potřeby můžete sledovat jiný cílový bod, než je cíl.", + "healthScheme": "Způsob", + "healthSelectScheme": "Vybrat metodu", + "healthCheckPath": "Cesta", + "healthHostname": "IP / Hostitel", + "healthPort": "Přístav", + "healthCheckPathDescription": "Cesta ke kontrole zdravotního stavu.", + "healthyIntervalSeconds": "Interval zdraví", + "unhealthyIntervalSeconds": "Nezdravý interval", + "IntervalSeconds": "Interval zdraví", + "timeoutSeconds": "Časový limit", + "timeIsInSeconds": "Čas je v sekundách", + "retryAttempts": "Opakovat pokusy", + "expectedResponseCodes": "Očekávané kódy odezvy", + "expectedResponseCodesDescription": "HTTP kód stavu, který označuje zdravý stav. Ponecháte-li prázdné, 200-300 je považováno za zdravé.", "customHeaders": "Vlastní záhlaví", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Záhlaví oddělená nová řádka: hodnota", + "headersValidationError": "Headers must be in the format: Header-Name: value.", + "saveHealthCheck": "Uložit kontrolu stavu", + "healthCheckSaved": "Kontrola stavu uložena", + "healthCheckSavedDescription": "Nastavení kontroly stavu bylo úspěšně uloženo", + "healthCheckError": "Chyba kontroly stavu", + "healthCheckErrorDescription": "Došlo k chybě při ukládání konfigurace kontroly stavu", + "healthCheckPathRequired": "Je vyžadována cesta kontroly stavu", + "healthCheckMethodRequired": "HTTP metoda je povinná", + "healthCheckIntervalMin": "Interval kontroly musí být nejméně 5 sekund", + "healthCheckTimeoutMin": "Časový limit musí být nejméně 1 sekunda", + "healthCheckRetryMin": "Pokusy opakovat musí být alespoň 1", "httpMethod": "HTTP metoda", "selectHttpMethod": "Vyberte HTTP metodu", "domainPickerSubdomainLabel": "Subdoména", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Zadejte subdoménu pro hledání a výběr z dostupných domén zdarma.", "domainPickerFreeDomains": "Volné domény", "domainPickerSearchForAvailableDomains": "Hledat dostupné domény", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Poznámka: Poskytnuté domény nejsou momentálně k dispozici pro vlastní hostované instance.", "resourceDomain": "Doména", "resourceEditDomain": "Upravit doménu", "siteName": "Název webu", @@ -1543,72 +1543,72 @@ "autoLoginError": "Automatická chyba přihlášení", "autoLoginErrorNoRedirectUrl": "Od poskytovatele identity nebyla obdržena žádná adresa URL.", "autoLoginErrorGeneratingUrl": "Nepodařilo se vygenerovat ověřovací URL.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Spravovat vlastní hostování", + "remoteExitNodeDescription": "Spravujte uzly pro rozšíření připojení k síti", + "remoteExitNodes": "Uzly", + "searchRemoteExitNodes": "Hledat uzly...", + "remoteExitNodeAdd": "Přidat uzel", + "remoteExitNodeErrorDelete": "Chyba při odstraňování uzlu", + "remoteExitNodeQuestionRemove": "Jste si jisti, že chcete odstranit uzel {selectedNode} z organizace?", + "remoteExitNodeMessageRemove": "Po odstranění uzel již nebude přístupný.", + "remoteExitNodeMessageConfirm": "Pro potvrzení zadejte název uzlu níže.", + "remoteExitNodeConfirmDelete": "Potvrdit odstranění uzlu", + "remoteExitNodeDelete": "Odstranit uzel", + "sidebarRemoteExitNodes": "Uzly", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Vytvořit uzel", + "description": "Vytvořit nový uzel pro rozšíření síťového připojení", + "viewAllButton": "Zobrazit všechny uzly", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Strategie tvorby", + "description": "Vyberte pro manuální konfiguraci vašeho uzlu nebo vygenerujte nové přihlašovací údaje.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Přijmout uzel", + "description": "Zvolte tuto možnost, pokud již máte přihlašovací údaje k uzlu." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Generovat klíče", + "description": "Vyberte tuto možnost, pokud chcete vygenerovat nové klíče pro uzel" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Přijmout existující uzel", + "description": "Zadejte přihlašovací údaje existujícího uzlu, který chcete přijmout", + "nodeIdLabel": "ID uzlu", + "nodeIdDescription": "ID existujícího uzlu, který chcete přijmout", + "secretLabel": "Tajný klíč", + "secretDescription": "Tajný klíč existujícího uzlu", + "submitButton": "Přijmout uzel" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Vygenerovaná pověření", + "description": "Použijte tyto generované přihlašovací údaje pro nastavení vašeho uzlu", + "nodeIdTitle": "ID uzlu", + "secretTitle": "Tajný klíč", + "saveCredentialsTitle": "Přidat přihlašovací údaje do konfigurace", + "saveCredentialsDescription": "Přidejte tyto přihlašovací údaje do vlastního konfiguračního souboru Pangolin uzlu pro dokončení připojení.", + "submitButton": "Vytvořit uzel" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "ID uzlu a tajný klíč jsou vyžadovány při přijetí existujícího uzlu" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Nepodařilo se načíst výchozí hodnoty", + "defaultsNotLoaded": "Výchozí hodnoty nebyly načteny", + "createFailed": "Nepodařilo se vytvořit uzel" }, "success": { - "created": "Node created successfully" + "created": "Uzel byl úspěšně vytvořen" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Výběr uzlu", + "remoteExitNodeSelectionDescription": "Vyberte uzel pro směrování provozu přes tuto lokální stránku", + "remoteExitNodeRequired": "Pro lokální stránky musí být vybrán uzel", + "noRemoteExitNodesAvailable": "Nejsou k dispozici žádné uzly", + "noRemoteExitNodesAvailableDescription": "Pro tuto organizaci nejsou k dispozici žádné uzly. Nejprve vytvořte uzel pro použití lokálních stránek.", + "exitNode": "Ukončit uzel", + "country": "L 343, 22.12.2009, s. 1).", + "rulesMatchCountry": "Aktuálně založené na zdrojové IP adrese", "managedSelfHosted": { "title": "Spravované vlastní hostování", "description": "Spolehlivější a nízko udržovaný Pangolinův server s dalšími zvony a bičkami", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Zjištěna mezinárodní doména", "willbestoredas": "Bude uloženo jako:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Určete, jak jsou role přiřazeny uživatelům, když se přihlásí, když je povoleno automatické poskytnutí služby.", + "selectRole": "Vyberte roli", + "roleMappingExpression": "Výraz", + "selectRolePlaceholder": "Vyberte roli", + "selectRoleDescription": "Vyberte roli pro přiřazení všem uživatelům od tohoto poskytovatele identity", + "roleMappingExpressionDescription": "Zadejte výraz JMESPath pro získání informací o roli z ID token", + "idpTenantIdRequired": "ID nájemce je povinné", + "invalidValue": "Neplatná hodnota", + "idpTypeLabel": "Typ poskytovatele identity", + "roleMappingExpressionPlaceholder": "např. obsahuje(skupiny, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Konfigurace Google", + "idpGoogleConfigurationDescription": "Konfigurace přihlašovacích údajů Google OAuth2", + "idpGoogleClientIdDescription": "Vaše ID klienta Google OAuth2", + "idpGoogleClientSecretDescription": "Tajný klíč klienta Google OAuth2", + "idpAzureConfiguration": "Nastavení Azure Entra ID", + "idpAzureConfigurationDescription": "Nastavte vaše Azure Entra ID OAuth2", + "idpTenantId": "ID tenanta", + "idpTenantIdPlaceholder": "vaše-tenant-id", + "idpAzureTenantIdDescription": "Vaše Azure nájemce ID (nalezeno v přehledu Azure Active Directory – Azure)", + "idpAzureClientIdDescription": "Vaše ID registrace aplikace Azure", + "idpAzureClientSecretDescription": "Tajný klíč registrace aplikace Azure", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Konfigurace Google", + "idpAzureConfigurationTitle": "Nastavení Azure Entra ID", + "idpTenantIdLabel": "ID tenanta", + "idpAzureClientIdDescription2": "Vaše ID registrace aplikace Azure", + "idpAzureClientSecretDescription2": "Tajný klíč registrace aplikace Azure", "idpGoogleDescription": "Poskytovatel Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Podsíť", + "subnetDescription": "Podsíť pro konfiguraci sítě této organizace.", + "authPage": "Auth stránka", + "authPageDescription": "Konfigurace autentizační stránky vaší organizace", + "authPageDomain": "Doména ověření stránky", + "noDomainSet": "Není nastavena žádná doména", + "changeDomain": "Změnit doménu", + "selectDomain": "Vybrat doménu", + "restartCertificate": "Restartovat certifikát", + "editAuthPageDomain": "Upravit doménu autentizační stránky", + "setAuthPageDomain": "Nastavit doménu autentické stránky", + "failedToFetchCertificate": "Nepodařilo se načíst certifikát", + "failedToRestartCertificate": "Restartování certifikátu se nezdařilo", + "addDomainToEnableCustomAuthPages": "Přidejte doménu pro povolení vlastních ověřovacích stránek pro vaši organizaci", + "selectDomainForOrgAuthPage": "Vyberte doménu pro ověřovací stránku organizace", "domainPickerProvidedDomain": "Poskytnutá doména", "domainPickerFreeProvidedDomain": "Zdarma poskytnutá doména", "domainPickerVerified": "Ověřeno", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" nemohl být platný pro {domain}.", "domainPickerSubdomainSanitized": "Upravená subdoména", "domainPickerSubdomainCorrected": "\"{sub}\" bylo opraveno na \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Přihlaste se do vaší organizace", + "orgAuthChooseIdpDescription": "Chcete-li pokračovat, vyberte svého poskytovatele identity", + "orgAuthNoIdpConfigured": "Tato organizace nemá nakonfigurovány žádné poskytovatele identity. Místo toho se můžete přihlásit s vaší Pangolinovou identitou.", + "orgAuthSignInWithPangolin": "Přihlásit se pomocí Pangolinu", + "subscriptionRequiredToUse": "Pro použití této funkce je vyžadováno předplatné.", + "idpDisabled": "Poskytovatelé identit jsou zakázáni.", + "orgAuthPageDisabled": "Ověřovací stránka organizace je zakázána.", + "domainRestartedDescription": "Ověření domény bylo úspěšně restartováno", "resourceAddEntrypointsEditFile": "Upravit soubor: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Upravit soubor: docker-compose.yml", "emailVerificationRequired": "Je vyžadováno ověření e-mailu. Přihlaste se znovu pomocí {dashboardUrl}/auth/login dokončete tento krok. Poté se vraťte zde.", "twoFactorSetupRequired": "Je vyžadováno nastavení dvoufaktorového ověřování. Přihlaste se znovu pomocí {dashboardUrl}/autentizace/přihlášení dokončí tento krok. Poté se vraťte zde.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Při aktualizaci nastavení autentizační stránky došlo k chybě", + "authPageUpdated": "Autentizační stránka byla úspěšně aktualizována", + "healthCheckNotAvailable": "Místní", + "rewritePath": "Přepsat cestu", + "rewritePathDescription": "Volitelně přepište cestu před odesláním na cíl." } From a39a133ee5c1f6a1c0cfe68ed814ec9a2e4cc138 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:16:57 -0700 Subject: [PATCH 18/28] New translations en-us.json (German) --- messages/de-DE.json | 380 ++++++++++++++++++++++---------------------- 1 file changed, 190 insertions(+), 190 deletions(-) diff --git a/messages/de-DE.json b/messages/de-DE.json index 430a7949..5ac9fc02 100644 --- a/messages/de-DE.json +++ b/messages/de-DE.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Einfachster Weg, einen Zugriffspunkt zu deinem Netzwerk zu erstellen. Keine zusätzliche Einrichtung erforderlich.", "siteWg": "Einfacher WireGuard Tunnel", "siteWgDescription": "Verwende jeden WireGuard-Client, um einen Tunnel einzurichten. Manuelles NAT-Setup erforderlich.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Verwenden Sie jeden WireGuard-Client, um einen Tunnel zu erstellen. Manuelles NAT-Setup erforderlich. FUNKTIONIERT NUR BEI SELBSTGEHOSTETEN KNOTEN", "siteLocalDescription": "Nur lokale Ressourcen. Kein Tunneling.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Nur lokale Ressourcen. Keine Tunneldurchführung. FUNKTIONIERT NUR BEI SELBSTGEHOSTETEN KNOTEN", "siteSeeAll": "Alle Standorte anzeigen", "siteTunnelDescription": "Lege fest, wie du dich mit deinem Standort verbinden möchtest", "siteNewtCredentials": "Neue Newt Zugangsdaten", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS-Ressource", "resourceHTTPDescription": "Proxy-Anfragen an Ihre App über HTTPS unter Verwendung einer Subdomain oder einer Basis-Domain.", "resourceRaw": "Rohe TCP/UDP Ressource", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Proxy-Anfragen an Ihre App über TCP/UDP mit einer Portnummer.", "resourceCreate": "Ressource erstellen", "resourceCreateDescription": "Folgen Sie den Schritten unten, um eine neue Ressource zu erstellen", "resourceSeeAll": "Alle Ressourcen anzeigen", @@ -168,9 +168,9 @@ "siteSelect": "Standort auswählen", "siteSearch": "Standorte durchsuchen", "siteNotFound": "Keinen Standort gefunden.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Land auswählen", + "searchCountries": "Länder suchen...", + "noCountryFound": "Kein Land gefunden.", "siteSelectionDescription": "Dieser Standort wird die Verbindung zum Ziel herstellen.", "resourceType": "Ressourcentyp", "resourceTypeDescription": "Legen Sie fest, wie Sie auf Ihre Ressource zugreifen möchten", @@ -1140,8 +1140,8 @@ "sidebarAllUsers": "Alle Benutzer", "sidebarIdentityProviders": "Identitätsanbieter", "sidebarLicense": "Lizenz", - "sidebarClients": "Clients (Beta)", - "sidebarDomains": "Domains", + "sidebarClients": "Kunden (Beta)", + "sidebarDomains": "Domänen", "enableDockerSocket": "Docker Blaupause aktivieren", "enableDockerSocketDescription": "Aktiviere Docker-Socket-Label-Scraping für Blaupausenbeschriftungen. Der Socket-Pfad muss neu angegeben werden.", "enableDockerSocketLink": "Mehr erfahren", @@ -1189,7 +1189,7 @@ "certificateStatus": "Zertifikatsstatus", "loading": "Laden", "restart": "Neustart", - "domains": "Domains", + "domains": "Domänen", "domainsDescription": "Domains für Ihre Organisation verwalten", "domainsSearch": "Domains durchsuchen...", "domainAdd": "Domain hinzufügen", @@ -1202,7 +1202,7 @@ "domainMessageConfirm": "Um zu bestätigen, geben Sie bitte den Domainnamen unten ein.", "domainConfirmDelete": "Domain-Löschung bestätigen", "domainDelete": "Domain löschen", - "domain": "Domain", + "domain": "Domäne", "selectDomainTypeNsName": "Domain-Delegation (NS)", "selectDomainTypeNsDescription": "Diese Domain und alle ihre Subdomains. Verwenden Sie dies, wenn Sie eine gesamte Domainzone kontrollieren möchten.", "selectDomainTypeCnameName": "Einzelne Domain (CNAME)", @@ -1242,7 +1242,7 @@ "sidebarExpand": "Erweitern", "newtUpdateAvailable": "Update verfügbar", "newtUpdateAvailableInfo": "Eine neue Version von Newt ist verfügbar. Bitte aktualisieren Sie auf die neueste Version für das beste Erlebnis.", - "domainPickerEnterDomain": "Domain", + "domainPickerEnterDomain": "Domäne", "domainPickerPlaceholder": "myapp.example.com", "domainPickerDescription": "Geben Sie die vollständige Domäne der Ressource ein, um verfügbare Optionen zu sehen.", "domainPickerDescriptionSaas": "Geben Sie eine vollständige Domäne, Subdomäne oder einfach einen Namen ein, um verfügbare Optionen zu sehen", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Subdomain: {subdomain}", "domainPickerNamespace": "Namespace: {namespace}", "domainPickerShowMore": "Mehr anzeigen", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Region auswählen", + "regionSelectorInfo": "Das Auswählen einer Region hilft uns, eine bessere Leistung für Ihren Standort bereitzustellen. Sie müssen sich nicht in derselben Region wie Ihr Server befinden.", + "regionSelectorPlaceholder": "Wähle eine Region", + "regionSelectorComingSoon": "Kommt bald", + "billingLoadingSubscription": "Abonnement wird geladen...", + "billingFreeTier": "Kostenlose Stufe", + "billingWarningOverLimit": "Warnung: Sie haben ein oder mehrere Nutzungslimits überschritten. Ihre Webseiten werden nicht verbunden, bis Sie Ihr Abonnement ändern oder Ihren Verbrauch anpassen.", + "billingUsageLimitsOverview": "Übersicht über Nutzungsgrenzen", + "billingMonitorUsage": "Überwachen Sie Ihren Verbrauch im Vergleich zu konfigurierten Grenzwerten. Wenn Sie eine Erhöhung der Limits benötigen, kontaktieren Sie uns bitte support@fossorial.io.", + "billingDataUsage": "Datenverbrauch", + "billingOnlineTime": "Online-Zeit der Seite", + "billingUsers": "Aktive Benutzer", + "billingDomains": "Aktive Domänen", + "billingRemoteExitNodes": "Aktive selbstgehostete Nodes", + "billingNoLimitConfigured": "Kein Limit konfiguriert", + "billingEstimatedPeriod": "Geschätzter Abrechnungszeitraum", + "billingIncludedUsage": "Inklusive Nutzung", + "billingIncludedUsageDescription": "Nutzung, die in Ihrem aktuellen Abonnementplan enthalten ist", + "billingFreeTierIncludedUsage": "Nutzungskontingente der kostenlosen Stufe", + "billingIncluded": "inbegriffen", + "billingEstimatedTotal": "Geschätzte Gesamtsumme:", + "billingNotes": "Notizen", + "billingEstimateNote": "Dies ist eine Schätzung basierend auf Ihrem aktuellen Verbrauch.", + "billingActualChargesMayVary": "Tatsächliche Kosten können variieren.", + "billingBilledAtEnd": "Sie werden am Ende des Abrechnungszeitraums in Rechnung gestellt.", + "billingModifySubscription": "Abonnement ändern", + "billingStartSubscription": "Abonnement starten", + "billingRecurringCharge": "Wiederkehrende Kosten", + "billingManageSubscriptionSettings": "Verwalten Sie Ihre Abonnement-Einstellungen und Präferenzen", + "billingNoActiveSubscription": "Sie haben kein aktives Abonnement. Starten Sie Ihr Abonnement, um Nutzungslimits zu erhöhen.", + "billingFailedToLoadSubscription": "Fehler beim Laden des Abonnements", + "billingFailedToLoadUsage": "Fehler beim Laden der Nutzung", + "billingFailedToGetCheckoutUrl": "Fehler beim Abrufen der Checkout-URL", + "billingPleaseTryAgainLater": "Bitte versuchen Sie es später noch einmal.", + "billingCheckoutError": "Checkout-Fehler", + "billingFailedToGetPortalUrl": "Fehler beim Abrufen der Portal-URL", + "billingPortalError": "Portalfehler", + "billingDataUsageInfo": "Wenn Sie mit der Cloud verbunden sind, werden alle Daten über Ihre sicheren Tunnel belastet. Dies schließt eingehenden und ausgehenden Datenverkehr über alle Ihre Websites ein. Wenn Sie Ihr Limit erreichen, werden Ihre Seiten die Verbindung trennen, bis Sie Ihr Paket upgraden oder die Nutzung verringern. Daten werden nicht belastet, wenn Sie Knoten verwenden.", + "billingOnlineTimeInfo": "Sie werden belastet, abhängig davon, wie lange Ihre Seiten mit der Cloud verbunden bleiben. Zum Beispiel 44.640 Minuten entspricht einer Site, die 24 Stunden am Tag des Monats läuft. Wenn Sie Ihr Limit erreichen, werden Ihre Seiten die Verbindung trennen, bis Sie Ihr Paket upgraden oder die Nutzung verringern. Die Zeit wird nicht belastet, wenn Sie Knoten verwenden.", + "billingUsersInfo": "Ihnen wird für jeden Benutzer in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich basierend auf der Anzahl der aktiven Benutzerkonten in Ihrer Organisation.", + "billingDomainInfo": "Ihnen wird für jede Domäne in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich basierend auf der Anzahl der aktiven Domänenkonten in Ihrer Organisation.", + "billingRemoteExitNodesInfo": "Ihnen wird für jeden verwalteten Node in Ihrer Organisation berechnet. Die Abrechnung erfolgt täglich basierend auf der Anzahl der aktiven verwalteten Nodes in Ihrer Organisation.", "domainNotFound": "Domain nicht gefunden", "domainNotFoundDescription": "Diese Ressource ist deaktiviert, weil die Domain nicht mehr in unserem System existiert. Bitte setzen Sie eine neue Domain für diese Ressource.", "failed": "Fehlgeschlagen", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Es kann einige Zeit dauern, bis DNS-Änderungen im Internet verbreitet werden. Dies kann je nach Ihrem DNS-Provider und den TTL-Einstellungen von einigen Minuten bis zu 48 Stunden dauern.", "resourcePortRequired": "Portnummer ist für nicht-HTTP-Ressourcen erforderlich", "resourcePortNotAllowed": "Portnummer sollte für HTTP-Ressourcen nicht gesetzt werden", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Preisrechner", "signUpTerms": { "IAgreeToThe": "Ich stimme den", "termsOfService": "Nutzungsbedingungen zu", @@ -1371,7 +1371,7 @@ "privacyPolicy": "Datenschutzrichtlinie" }, "siteRequired": "Standort ist erforderlich.", - "olmTunnel": "Olm Tunnel", + "olmTunnel": "Olm-Tunnel", "olmTunnelDescription": "Nutzen Sie Olm für die Kundenverbindung", "errorCreatingClient": "Fehler beim Erstellen des Clients", "clientDefaultsNotFound": "Kundenvorgaben nicht gefunden", @@ -1412,41 +1412,41 @@ "addNewTarget": "Neues Ziel hinzufügen", "targetsList": "Ziel-Liste", "targetErrorDuplicateTargetFound": "Doppeltes Ziel gefunden", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", + "healthCheckHealthy": "Gesund", + "healthCheckUnhealthy": "Ungesund", + "healthCheckUnknown": "Unbekannt", + "healthCheck": "Gesundheits-Check", + "configureHealthCheck": "Gesundheits-Check konfigurieren", + "configureHealthCheckDescription": "Richten Sie die Gesundheitsüberwachung für {target} ein", + "enableHealthChecks": "Gesundheits-Checks aktivieren", + "enableHealthChecksDescription": "Überwachen Sie die Gesundheit dieses Ziels. Bei Bedarf können Sie einen anderen Endpunkt als das Ziel überwachen.", + "healthScheme": "Methode", + "healthSelectScheme": "Methode auswählen", + "healthCheckPath": "Pfad", "healthHostname": "IP / Host", "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", + "healthCheckPathDescription": "Der Pfad zum Überprüfen des Gesundheitszustands.", + "healthyIntervalSeconds": "Gesunder Intervall", + "unhealthyIntervalSeconds": "Ungesunder Intervall", + "IntervalSeconds": "Gesunder Intervall", "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "timeIsInSeconds": "Zeit ist in Sekunden", + "retryAttempts": "Wiederholungsversuche", + "expectedResponseCodes": "Erwartete Antwortcodes", + "expectedResponseCodesDescription": "HTTP-Statuscode, der einen gesunden Zustand anzeigt. Wenn leer gelassen, wird 200-300 als gesund angesehen.", "customHeaders": "Eigene Kopfzeilen", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Header neue Zeile getrennt: Header-Name: Wert", + "headersValidationError": "Header müssen im Format Header-Name: Wert sein.", + "saveHealthCheck": "Gesundheits-Check speichern", + "healthCheckSaved": "Gesundheits-Check gespeichert", + "healthCheckSavedDescription": "Die Konfiguration des Gesundheits-Checks wurde erfolgreich gespeichert", + "healthCheckError": "Fehler beim Gesundheits-Check", + "healthCheckErrorDescription": "Beim Speichern der Gesundheits-Check-Konfiguration ist ein Fehler aufgetreten", + "healthCheckPathRequired": "Gesundheits-Check-Pfad ist erforderlich", + "healthCheckMethodRequired": "HTTP-Methode ist erforderlich", + "healthCheckIntervalMin": "Prüfintervall muss mindestens 5 Sekunden betragen", + "healthCheckTimeoutMin": "Timeout muss mindestens 1 Sekunde betragen", + "healthCheckRetryMin": "Wiederholungsversuche müssen mindestens 1 betragen", "httpMethod": "HTTP-Methode", "selectHttpMethod": "HTTP-Methode auswählen", "domainPickerSubdomainLabel": "Subdomain", @@ -1460,8 +1460,8 @@ "domainPickerEnterSubdomainToSearch": "Geben Sie eine Subdomain ein, um verfügbare freie Domains zu suchen und auszuwählen.", "domainPickerFreeDomains": "Freie Domains", "domainPickerSearchForAvailableDomains": "Verfügbare Domains suchen", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", - "resourceDomain": "Domain", + "domainPickerNotWorkSelfHosted": "Hinweis: Kostenlose bereitgestellte Domains sind derzeit nicht für selbstgehostete Instanzen verfügbar.", + "resourceDomain": "Domäne", "resourceEditDomain": "Domain bearbeiten", "siteName": "Site-Name", "proxyPort": "Port", @@ -1543,72 +1543,72 @@ "autoLoginError": "Fehler bei der automatischen Anmeldung", "autoLoginErrorNoRedirectUrl": "Keine Weiterleitungs-URL vom Identitätsanbieter erhalten.", "autoLoginErrorGeneratingUrl": "Fehler beim Generieren der Authentifizierungs-URL.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Selbst-Hosted verwalten", + "remoteExitNodeDescription": "Knoten verwalten, um die Netzwerkverbindung zu erweitern", + "remoteExitNodes": "Knoten", + "searchRemoteExitNodes": "Knoten suchen...", + "remoteExitNodeAdd": "Knoten hinzufügen", + "remoteExitNodeErrorDelete": "Fehler beim Löschen des Knotens", + "remoteExitNodeQuestionRemove": "Sind Sie sicher, dass Sie den Knoten {selectedNode} aus der Organisation entfernen möchten?", + "remoteExitNodeMessageRemove": "Einmal entfernt, wird der Knoten nicht mehr zugänglich sein.", + "remoteExitNodeMessageConfirm": "Um zu bestätigen, geben Sie bitte den Namen des Knotens unten ein.", + "remoteExitNodeConfirmDelete": "Löschknoten bestätigen", + "remoteExitNodeDelete": "Knoten löschen", + "sidebarRemoteExitNodes": "Knoten", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Knoten erstellen", + "description": "Erstellen Sie einen neuen Knoten, um Ihre Netzwerkverbindung zu erweitern", + "viewAllButton": "Alle Knoten anzeigen", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Erstellungsstrategie", + "description": "Wählen Sie diese Option, um Ihren Knoten manuell zu konfigurieren oder neue Zugangsdaten zu generieren.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Node übernehmen", + "description": "Wählen Sie dies, wenn Sie bereits die Anmeldedaten für den Knoten haben." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Schlüssel generieren", + "description": "Wählen Sie dies, wenn Sie neue Schlüssel für den Knoten generieren möchten" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Vorhandenen Node übernehmen", + "description": "Geben Sie die Zugangsdaten des vorhandenen Knotens ein, den Sie übernehmen möchten", + "nodeIdLabel": "Knoten-ID", + "nodeIdDescription": "Die ID des vorhandenen Knotens, den Sie übernehmen möchten", + "secretLabel": "Geheimnis", + "secretDescription": "Der geheime Schlüssel des vorhandenen Knotens", + "submitButton": "Node übernehmen" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Generierte Anmeldedaten", + "description": "Verwenden Sie diese generierten Anmeldeinformationen, um Ihren Knoten zu konfigurieren", + "nodeIdTitle": "Knoten-ID", + "secretTitle": "Geheimnis", + "saveCredentialsTitle": "Anmeldedaten zur Konfiguration hinzufügen", + "saveCredentialsDescription": "Fügen Sie diese Anmeldedaten zu Ihrer selbst-gehosteten Pangolin Node-Konfigurationsdatei hinzu, um die Verbindung abzuschließen.", + "submitButton": "Knoten erstellen" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "Knoten-ID und Geheimnis sind erforderlich, wenn ein existierender Knoten angenommen wird" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Fehler beim Laden der Standardeinstellungen", + "defaultsNotLoaded": "Standardeinstellungen nicht geladen", + "createFailed": "Knoten konnte nicht erstellt werden" }, "success": { - "created": "Node created successfully" + "created": "Knoten erfolgreich erstellt" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Knotenauswahl", + "remoteExitNodeSelectionDescription": "Wählen Sie einen Knoten aus, durch den Traffic für diese lokale Seite geleitet werden soll", + "remoteExitNodeRequired": "Ein Knoten muss für lokale Seiten ausgewählt sein", + "noRemoteExitNodesAvailable": "Keine Knoten verfügbar", + "noRemoteExitNodesAvailableDescription": "Für diese Organisation sind keine Knoten verfügbar. Erstellen Sie zuerst einen Knoten, um lokale Sites zu verwenden.", + "exitNode": "Exit-Node", + "country": "Land", + "rulesMatchCountry": "Derzeit basierend auf der Quell-IP", "managedSelfHosted": { "title": "Verwaltetes Selbsthosted", "description": "Zuverlässiger und wartungsarmer Pangolin Server mit zusätzlichen Glocken und Pfeifen", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Internationale Domain erkannt", "willbestoredas": "Wird gespeichert als:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Legen Sie fest, wie den Benutzern Rollen zugewiesen werden, wenn sie sich anmelden, wenn Auto Provision aktiviert ist.", + "selectRole": "Wählen Sie eine Rolle", + "roleMappingExpression": "Ausdruck", + "selectRolePlaceholder": "Rolle auswählen", + "selectRoleDescription": "Wählen Sie eine Rolle aus, die allen Benutzern von diesem Identitätsprovider zugewiesen werden soll", + "roleMappingExpressionDescription": "Geben Sie einen JMESPath-Ausdruck ein, um Rolleninformationen aus dem ID-Token zu extrahieren", + "idpTenantIdRequired": "Mandant ID ist erforderlich", + "invalidValue": "Ungültiger Wert", + "idpTypeLabel": "Identitätsanbietertyp", + "roleMappingExpressionPlaceholder": "z. B. enthalten(Gruppen, 'admin') && 'Admin' || 'Mitglied'", + "idpGoogleConfiguration": "Google-Konfiguration", + "idpGoogleConfigurationDescription": "Konfigurieren Sie Ihre Google OAuth2 Zugangsdaten", + "idpGoogleClientIdDescription": "Ihre Google OAuth2 Client-ID", + "idpGoogleClientSecretDescription": "Ihr Google OAuth2 Client Secret", + "idpAzureConfiguration": "Azure Entra ID Konfiguration", + "idpAzureConfigurationDescription": "Konfigurieren Sie Ihre Azure Entra ID OAuth2 Zugangsdaten", + "idpTenantId": "Mandanten-ID", + "idpTenantIdPlaceholder": "deine Mandant-ID", + "idpAzureTenantIdDescription": "Ihre Azure Mieter-ID (gefunden in Azure Active Directory Übersicht)", + "idpAzureClientIdDescription": "Ihre Azure App Registration Client ID", + "idpAzureClientSecretDescription": "Ihr Azure App Registration Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Google-Konfiguration", + "idpAzureConfigurationTitle": "Azure Entra ID Konfiguration", + "idpTenantIdLabel": "Mandanten-ID", + "idpAzureClientIdDescription2": "Ihre Azure App Registration Client ID", + "idpAzureClientSecretDescription2": "Ihr Azure App Registration Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC Provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Subnetz", + "subnetDescription": "Das Subnetz für die Netzwerkkonfiguration dieser Organisation.", + "authPage": "Auth Seite", + "authPageDescription": "Konfigurieren Sie die Auth-Seite für Ihre Organisation", + "authPageDomain": "Domain der Auth Seite", + "noDomainSet": "Keine Domäne gesetzt", + "changeDomain": "Domain ändern", + "selectDomain": "Domain auswählen", + "restartCertificate": "Zertifikat neu starten", + "editAuthPageDomain": "Auth Page Domain bearbeiten", + "setAuthPageDomain": "Domain der Auth Seite festlegen", + "failedToFetchCertificate": "Zertifikat konnte nicht abgerufen werden", + "failedToRestartCertificate": "Zertifikat konnte nicht neu gestartet werden", + "addDomainToEnableCustomAuthPages": "Fügen Sie eine Domain hinzu, um benutzerdefinierte Authentifizierungsseiten für Ihre Organisation zu aktivieren", + "selectDomainForOrgAuthPage": "Wählen Sie eine Domain für die Authentifizierungsseite der Organisation", "domainPickerProvidedDomain": "Angegebene Domain", "domainPickerFreeProvidedDomain": "Kostenlose Domain", "domainPickerVerified": "Verifiziert", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" konnte nicht für {domain} gültig gemacht werden.", "domainPickerSubdomainSanitized": "Subdomain bereinigt", "domainPickerSubdomainCorrected": "\"{sub}\" wurde korrigiert zu \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Bei Ihrer Organisation anmelden", + "orgAuthChooseIdpDescription": "Wähle deinen Identitätsanbieter um fortzufahren", + "orgAuthNoIdpConfigured": "Diese Organisation hat keine Identitätsanbieter konfiguriert. Sie können sich stattdessen mit Ihrer Pangolin-Identität anmelden.", + "orgAuthSignInWithPangolin": "Mit Pangolin anmelden", + "subscriptionRequiredToUse": "Um diese Funktion nutzen zu können, ist ein Abonnement erforderlich.", + "idpDisabled": "Identitätsanbieter sind deaktiviert.", + "orgAuthPageDisabled": "Organisations-Authentifizierungsseite ist deaktiviert.", + "domainRestartedDescription": "Domain-Verifizierung erfolgreich neu gestartet", "resourceAddEntrypointsEditFile": "Datei bearbeiten: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Datei bearbeiten: docker-compose.yml", "emailVerificationRequired": "E-Mail-Verifizierung ist erforderlich. Bitte melden Sie sich erneut über {dashboardUrl}/auth/login an. Kommen Sie dann wieder hierher.", "twoFactorSetupRequired": "Die Zwei-Faktor-Authentifizierung ist erforderlich. Bitte melden Sie sich erneut über {dashboardUrl}/auth/login an. Dann kommen Sie hierher zurück.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Beim Aktualisieren der Auth-Seiten-Einstellungen ist ein Fehler aufgetreten", + "authPageUpdated": "Auth-Seite erfolgreich aktualisiert", + "healthCheckNotAvailable": "Lokal", + "rewritePath": "Pfad neu schreiben", + "rewritePathDescription": "Optional den Pfad umschreiben, bevor er an das Ziel weitergeleitet wird." } From 170da08001170b1ba36cd9e54fa28eff584dc22b Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:16:58 -0700 Subject: [PATCH 19/28] New translations en-us.json (Italian) --- messages/it-IT.json | 378 ++++++++++++++++++++++---------------------- 1 file changed, 189 insertions(+), 189 deletions(-) diff --git a/messages/it-IT.json b/messages/it-IT.json index 93fa58d0..40f9811f 100644 --- a/messages/it-IT.json +++ b/messages/it-IT.json @@ -36,8 +36,8 @@ "viewSettings": "Visualizza impostazioni", "delete": "Elimina", "name": "Nome", - "online": "Online", - "offline": "Offline", + "online": "In linea", + "offline": "Non in linea", "site": "Sito", "dataIn": "Dati In", "dataOut": "Dati Fuori", @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Modo più semplice per creare un entrypoint nella rete. Nessuna configurazione aggiuntiva.", "siteWg": "WireGuard Base", "siteWgDescription": "Usa qualsiasi client WireGuard per stabilire un tunnel. Impostazione NAT manuale richiesta.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Usa qualsiasi client WireGuard per stabilire un tunnel. Impostazione NAT manuale richiesta. FUNZIONA SOLO SU NODI AUTO-OSPITATI", "siteLocalDescription": "Solo risorse locali. Nessun tunneling.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Solo risorse locali. Nessun tunneling. FUNZIONA SOLO SU NODI AUTO-OSPITATI", "siteSeeAll": "Vedi Tutti I Siti", "siteTunnelDescription": "Determina come vuoi connetterti al tuo sito", "siteNewtCredentials": "Credenziali Newt", @@ -159,7 +159,7 @@ "resourceHTTP": "Risorsa HTTPS", "resourceHTTPDescription": "Richieste proxy alla tua app tramite HTTPS utilizzando un sottodominio o un dominio di base.", "resourceRaw": "Risorsa Raw TCP/UDP", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Richieste proxy alla tua app tramite TCP/UDP utilizzando un numero di porta.", "resourceCreate": "Crea Risorsa", "resourceCreateDescription": "Segui i passaggi seguenti per creare una nuova risorsa", "resourceSeeAll": "Vedi Tutte Le Risorse", @@ -168,9 +168,9 @@ "siteSelect": "Seleziona sito", "siteSearch": "Cerca sito", "siteNotFound": "Nessun sito trovato.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Seleziona paese", + "searchCountries": "Cerca paesi...", + "noCountryFound": "Nessun paese trovato.", "siteSelectionDescription": "Questo sito fornirà connettività all'obiettivo.", "resourceType": "Tipo Di Risorsa", "resourceTypeDescription": "Determina come vuoi accedere alla tua risorsa", @@ -1221,7 +1221,7 @@ "orgBillingDescription": "Gestisci le tue informazioni di fatturazione e abbonamenti", "github": "GitHub", "pangolinHosted": "Pangolin Hosted", - "fossorial": "Fossorial", + "fossorial": "Fossoriale", "completeAccountSetup": "Completa la Configurazione dell'Account", "completeAccountSetupDescription": "Imposta la tua password per iniziare", "accountSetupSent": "Invieremo un codice di configurazione dell'account a questo indirizzo email.", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Sottodominio: {subdomain}", "domainPickerNamespace": "Namespace: {namespace}", "domainPickerShowMore": "Mostra Altro", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Seleziona regione", + "regionSelectorInfo": "Selezionare una regione ci aiuta a fornire migliori performance per la tua posizione. Non devi necessariamente essere nella stessa regione del tuo server.", + "regionSelectorPlaceholder": "Scegli una regione", + "regionSelectorComingSoon": "Prossimamente", + "billingLoadingSubscription": "Caricamento abbonamento...", + "billingFreeTier": "Piano Gratuito", + "billingWarningOverLimit": "Avviso: Hai superato uno o più limiti di utilizzo. I tuoi siti non si connetteranno finché non modifichi il tuo abbonamento o non adegui il tuo utilizzo.", + "billingUsageLimitsOverview": "Panoramica dei Limiti di Utilizzo", + "billingMonitorUsage": "Monitora il tuo utilizzo rispetto ai limiti configurati. Se hai bisogno di aumentare i limiti, contattaci all'indirizzo support@fossorial.io.", + "billingDataUsage": "Utilizzo dei Dati", + "billingOnlineTime": "Tempo Online del Sito", + "billingUsers": "Utenti Attivi", + "billingDomains": "Domini Attivi", + "billingRemoteExitNodes": "Nodi Self-hosted Attivi", + "billingNoLimitConfigured": "Nessun limite configurato", + "billingEstimatedPeriod": "Periodo di Fatturazione Stimato", + "billingIncludedUsage": "Utilizzo Incluso", + "billingIncludedUsageDescription": "Utilizzo incluso nel tuo piano di abbonamento corrente", + "billingFreeTierIncludedUsage": "Elenchi di utilizzi inclusi nel piano gratuito", + "billingIncluded": "incluso", + "billingEstimatedTotal": "Totale Stimato:", + "billingNotes": "Note", + "billingEstimateNote": "Questa è una stima basata sul tuo utilizzo attuale.", + "billingActualChargesMayVary": "I costi effettivi possono variare.", + "billingBilledAtEnd": "Sarai fatturato alla fine del periodo di fatturazione.", + "billingModifySubscription": "Modifica Abbonamento", + "billingStartSubscription": "Inizia Abbonamento", + "billingRecurringCharge": "Addebito Ricorrente", + "billingManageSubscriptionSettings": "Gestisci impostazioni e preferenze dell'abbonamento", + "billingNoActiveSubscription": "Non hai un abbonamento attivo. Avvia il tuo abbonamento per aumentare i limiti di utilizzo.", + "billingFailedToLoadSubscription": "Caricamento abbonamento fallito", + "billingFailedToLoadUsage": "Caricamento utilizzo fallito", + "billingFailedToGetCheckoutUrl": "Errore durante l'ottenimento dell'URL di pagamento", + "billingPleaseTryAgainLater": "Per favore, riprova più tardi.", + "billingCheckoutError": "Errore di Pagamento", + "billingFailedToGetPortalUrl": "Errore durante l'ottenimento dell'URL del portale", + "billingPortalError": "Errore del Portale", + "billingDataUsageInfo": "Hai addebitato tutti i dati trasferiti attraverso i tunnel sicuri quando sei connesso al cloud. Questo include sia il traffico in entrata e in uscita attraverso tutti i siti. Quando si raggiunge il limite, i siti si disconnetteranno fino a quando non si aggiorna il piano o si riduce l'utilizzo. I dati non vengono caricati quando si utilizzano nodi.", + "billingOnlineTimeInfo": "Ti viene addebitato in base al tempo in cui i tuoi siti rimangono connessi al cloud. Ad esempio, 44,640 minuti è uguale a un sito in esecuzione 24/7 per un mese intero. Quando raggiungi il tuo limite, i tuoi siti si disconnetteranno fino a quando non aggiorni il tuo piano o riduci l'utilizzo. Il tempo non viene caricato quando si usano i nodi.", + "billingUsersInfo": "Sei addebitato per ogni utente nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di account utente attivi nella tua organizzazione.", + "billingDomainInfo": "Sei addebitato per ogni dominio nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di account dominio attivi nella tua organizzazione.", + "billingRemoteExitNodesInfo": "Sei addebitato per ogni nodo gestito nella tua organizzazione. La fatturazione viene calcolata giornalmente in base al numero di nodi gestiti attivi nella tua organizzazione.", "domainNotFound": "Domini Non Trovati", "domainNotFoundDescription": "Questa risorsa è disabilitata perché il dominio non esiste più nel nostro sistema. Si prega di impostare un nuovo dominio per questa risorsa.", "failed": "Fallito", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Le modifiche DNS possono richiedere del tempo per propagarsi in Internet. Questo può richiedere da pochi minuti a 48 ore, a seconda del tuo provider DNS e delle impostazioni TTL.", "resourcePortRequired": "Numero di porta richiesto per risorse non-HTTP", "resourcePortNotAllowed": "Il numero di porta non deve essere impostato per risorse HTTP", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Calcolatore di Prezzi", "signUpTerms": { "IAgreeToThe": "Accetto i", "termsOfService": "termini di servizio", @@ -1371,7 +1371,7 @@ "privacyPolicy": "informativa sulla privacy" }, "siteRequired": "Il sito è richiesto.", - "olmTunnel": "Olm Tunnel", + "olmTunnel": "Tunnel Olm", "olmTunnelDescription": "Usa Olm per la connettività client", "errorCreatingClient": "Errore nella creazione del client", "clientDefaultsNotFound": "Impostazioni predefinite del client non trovate", @@ -1412,41 +1412,41 @@ "addNewTarget": "Aggiungi Nuovo Target", "targetsList": "Elenco dei Target", "targetErrorDuplicateTargetFound": "Target duplicato trovato", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", + "healthCheckHealthy": "Sano", + "healthCheckUnhealthy": "Non Sano", + "healthCheckUnknown": "Sconosciuto", + "healthCheck": "Controllo Salute", + "configureHealthCheck": "Configura Controllo Salute", + "configureHealthCheckDescription": "Imposta il monitoraggio della salute per {target}", + "enableHealthChecks": "Abilita i Controlli di Salute", + "enableHealthChecksDescription": "Monitorare lo stato di salute di questo obiettivo. Se necessario, è possibile monitorare un endpoint diverso da quello del bersaglio.", + "healthScheme": "Metodo", + "healthSelectScheme": "Seleziona Metodo", + "healthCheckPath": "Percorso", + "healthHostname": "IP / Nome host", + "healthPort": "Porta", + "healthCheckPathDescription": "Percorso per verificare lo stato di salute.", + "healthyIntervalSeconds": "Intervallo Sano", + "unhealthyIntervalSeconds": "Intervallo Non Sano", + "IntervalSeconds": "Intervallo Sano", "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "timeIsInSeconds": "Il tempo è in secondi", + "retryAttempts": "Tentativi di Riprova", + "expectedResponseCodes": "Codici di Risposta Attesi", + "expectedResponseCodesDescription": "Codice di stato HTTP che indica lo stato di salute. Se lasciato vuoto, considerato sano è compreso tra 200-300.", "customHeaders": "Intestazioni Personalizzate", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Intestazioni nuova riga separate: Intestazione-Nome: valore", + "headersValidationError": "Le intestazioni devono essere nel formato: Intestazione-Nome: valore.", + "saveHealthCheck": "Salva Controllo Salute", + "healthCheckSaved": "Controllo Salute Salvato", + "healthCheckSavedDescription": "La configurazione del controllo salute è stata salvata con successo", + "healthCheckError": "Errore Controllo Salute", + "healthCheckErrorDescription": "Si è verificato un errore durante il salvataggio della configurazione del controllo salute.", + "healthCheckPathRequired": "Il percorso del controllo salute è richiesto", + "healthCheckMethodRequired": "Metodo HTTP richiesto", + "healthCheckIntervalMin": "L'intervallo del controllo deve essere almeno di 5 secondi", + "healthCheckTimeoutMin": "Il timeout deve essere di almeno 1 secondo", + "healthCheckRetryMin": "I tentativi di riprova devono essere almeno 1", "httpMethod": "Metodo HTTP", "selectHttpMethod": "Seleziona metodo HTTP", "domainPickerSubdomainLabel": "Sottodominio", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Inserisci un sottodominio per cercare e selezionare dai domini gratuiti disponibili.", "domainPickerFreeDomains": "Domini Gratuiti", "domainPickerSearchForAvailableDomains": "Cerca domini disponibili", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Nota: I domini forniti gratuitamente non sono disponibili per le istanze self-hosted al momento.", "resourceDomain": "Dominio", "resourceEditDomain": "Modifica Dominio", "siteName": "Nome del Sito", @@ -1543,72 +1543,72 @@ "autoLoginError": "Errore di Accesso Automatico", "autoLoginErrorNoRedirectUrl": "Nessun URL di reindirizzamento ricevuto dal provider di identità.", "autoLoginErrorGeneratingUrl": "Impossibile generare l'URL di autenticazione.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Gestisci Self-Hosted", + "remoteExitNodeDescription": "Gestisci i nodi per estendere la connettività di rete", + "remoteExitNodes": "Nodi", + "searchRemoteExitNodes": "Cerca nodi...", + "remoteExitNodeAdd": "Aggiungi Nodo", + "remoteExitNodeErrorDelete": "Errore nell'eliminare il nodo", + "remoteExitNodeQuestionRemove": "Sei sicuro di voler rimuovere il nodo {selectedNode} dall'organizzazione?", + "remoteExitNodeMessageRemove": "Una volta rimosso, il nodo non sarà più accessibile.", + "remoteExitNodeMessageConfirm": "Per confermare, digita il nome del nodo qui sotto.", + "remoteExitNodeConfirmDelete": "Conferma Eliminazione Nodo", + "remoteExitNodeDelete": "Elimina Nodo", + "sidebarRemoteExitNodes": "Nodi", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Crea Nodo", + "description": "Crea un nuovo nodo per estendere la connettività di rete", + "viewAllButton": "Visualizza Tutti I Nodi", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Strategia di Creazione", + "description": "Scegli questa opzione per configurare manualmente il nodo o generare nuove credenziali.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Adotta Nodo", + "description": "Scegli questo se hai già le credenziali per il nodo." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Genera Chiavi", + "description": "Scegli questa opzione se vuoi generare nuove chiavi per il nodo" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Adotta Nodo Esistente", + "description": "Inserisci le credenziali del nodo esistente che vuoi adottare", + "nodeIdLabel": "ID Nodo", + "nodeIdDescription": "L'ID del nodo esistente che si desidera adottare", + "secretLabel": "Segreto", + "secretDescription": "La chiave segreta del nodo esistente", + "submitButton": "Adotta Nodo" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Credenziali Generate", + "description": "Usa queste credenziali generate per configurare il nodo", + "nodeIdTitle": "ID Nodo", + "secretTitle": "Segreto", + "saveCredentialsTitle": "Aggiungi Credenziali alla Configurazione", + "saveCredentialsDescription": "Aggiungi queste credenziali al tuo file di configurazione del nodo self-hosted Pangolin per completare la connessione.", + "submitButton": "Crea Nodo" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "L'ID del nodo e il segreto sono necessari quando si adotta un nodo esistente" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Caricamento impostazioni predefinite fallito", + "defaultsNotLoaded": "Impostazioni predefinite non caricate", + "createFailed": "Impossibile creare il nodo" }, "success": { - "created": "Node created successfully" + "created": "Nodo creato con successo" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Selezione Nodo", + "remoteExitNodeSelectionDescription": "Seleziona un nodo per instradare il traffico per questo sito locale", + "remoteExitNodeRequired": "Un nodo deve essere selezionato per i siti locali", + "noRemoteExitNodesAvailable": "Nessun Nodo Disponibile", + "noRemoteExitNodesAvailableDescription": "Non ci sono nodi disponibili per questa organizzazione. Crea un nodo prima per usare i siti locali.", + "exitNode": "Nodo di Uscita", + "country": "Paese", + "rulesMatchCountry": "Attualmente basato sull'IP di origine", "managedSelfHosted": { "title": "Gestito Auto-Ospitato", "description": "Server Pangolin self-hosted più affidabile e a bassa manutenzione con campanelli e fischietti extra", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Dominio Internazionale Rilevato", "willbestoredas": "Verrà conservato come:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Determinare come i ruoli sono assegnati agli utenti quando accedono quando è abilitata la fornitura automatica.", + "selectRole": "Seleziona un ruolo", + "roleMappingExpression": "Espressione", + "selectRolePlaceholder": "Scegli un ruolo", + "selectRoleDescription": "Seleziona un ruolo da assegnare a tutti gli utenti da questo provider di identità", + "roleMappingExpressionDescription": "Inserire un'espressione JMESPath per estrarre le informazioni sul ruolo dal token ID", + "idpTenantIdRequired": "L'ID dell'inquilino è obbligatorio", + "invalidValue": "Valore non valido", + "idpTypeLabel": "Tipo Provider Identità", + "roleMappingExpressionPlaceholder": "es. contiene(gruppi, 'admin') && 'Admin' 'Membro'", + "idpGoogleConfiguration": "Configurazione Google", + "idpGoogleConfigurationDescription": "Configura le tue credenziali di Google OAuth2", + "idpGoogleClientIdDescription": "Il Tuo Client Id Google OAuth2", + "idpGoogleClientSecretDescription": "Il Tuo Client Google OAuth2 Secret", + "idpAzureConfiguration": "Configurazione Azure Entra ID", + "idpAzureConfigurationDescription": "Configura le credenziali OAuth2 di Azure Entra ID", + "idpTenantId": "ID Tenant", + "idpTenantIdPlaceholder": "iltuo-inquilino-id", + "idpAzureTenantIdDescription": "Il tuo ID del tenant Azure (trovato nella panoramica di Azure Active Directory)", + "idpAzureClientIdDescription": "Il Tuo Id Client Registrazione App Azure", + "idpAzureClientSecretDescription": "Il Tuo Client Di Registrazione App Azure Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Configurazione Google", + "idpAzureConfigurationTitle": "Configurazione Azure Entra ID", + "idpTenantIdLabel": "ID Tenant", + "idpAzureClientIdDescription2": "Il Tuo Id Client Registrazione App Azure", + "idpAzureClientSecretDescription2": "Il Tuo Client Di Registrazione App Azure Secret", "idpGoogleDescription": "Google OAuth2/OIDC provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Sottorete", + "subnetDescription": "La sottorete per la configurazione di rete di questa organizzazione.", + "authPage": "Pagina Autenticazione", + "authPageDescription": "Configura la pagina di autenticazione per la tua organizzazione", + "authPageDomain": "Dominio Pagina Auth", + "noDomainSet": "Nessun dominio impostato", + "changeDomain": "Cambia Dominio", + "selectDomain": "Seleziona Dominio", + "restartCertificate": "Riavvia Certificato", + "editAuthPageDomain": "Modifica Dominio Pagina Auth", + "setAuthPageDomain": "Imposta Dominio Pagina Autenticazione", + "failedToFetchCertificate": "Recupero del certificato non riuscito", + "failedToRestartCertificate": "Riavvio del certificato non riuscito", + "addDomainToEnableCustomAuthPages": "Aggiungi un dominio per abilitare le pagine di autenticazione personalizzate per la tua organizzazione", + "selectDomainForOrgAuthPage": "Seleziona un dominio per la pagina di autenticazione dell'organizzazione", "domainPickerProvidedDomain": "Dominio Fornito", "domainPickerFreeProvidedDomain": "Dominio Fornito Gratuito", "domainPickerVerified": "Verificato", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" non può essere reso valido per {domain}.", "domainPickerSubdomainSanitized": "Sottodominio igienizzato", "domainPickerSubdomainCorrected": "\"{sub}\" è stato corretto in \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Accedi alla tua organizzazione", + "orgAuthChooseIdpDescription": "Scegli il tuo provider di identità per continuare", + "orgAuthNoIdpConfigured": "Questa organizzazione non ha nessun provider di identità configurato. Puoi accedere con la tua identità Pangolin.", + "orgAuthSignInWithPangolin": "Accedi con Pangolino", + "subscriptionRequiredToUse": "Per utilizzare questa funzionalità è necessario un abbonamento.", + "idpDisabled": "I provider di identità sono disabilitati.", + "orgAuthPageDisabled": "La pagina di autenticazione dell'organizzazione è disabilitata.", + "domainRestartedDescription": "Verifica del dominio riavviata con successo", "resourceAddEntrypointsEditFile": "Modifica file: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Modifica file: docker-compose.yml", "emailVerificationRequired": "Verifica via email. Effettua nuovamente il login via {dashboardUrl}/auth/login completa questo passaggio. Quindi, torna qui.", "twoFactorSetupRequired": "È richiesta la configurazione di autenticazione a due fattori. Effettua nuovamente l'accesso tramite {dashboardUrl}/auth/login completa questo passaggio. Quindi, torna qui.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Si è verificato un errore durante l'aggiornamento delle impostazioni della pagina di autenticazione", + "authPageUpdated": "Pagina di autenticazione aggiornata con successo", + "healthCheckNotAvailable": "Locale", + "rewritePath": "Riscrivi percorso", + "rewritePathDescription": "Riscrivi eventualmente il percorso prima di inoltrarlo al target." } From 4853c8c87248f8506b69b46b89c06420f2dacd27 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:16:59 -0700 Subject: [PATCH 20/28] New translations en-us.json (Korean) --- messages/ko-KR.json | 372 ++++++++++++++++++++++---------------------- 1 file changed, 186 insertions(+), 186 deletions(-) diff --git a/messages/ko-KR.json b/messages/ko-KR.json index 34888669..3d010cd5 100644 --- a/messages/ko-KR.json +++ b/messages/ko-KR.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "네트워크에 대한 진입점을 생성하는 가장 쉬운 방법입니다. 추가 설정이 필요 없습니다.", "siteWg": "기본 WireGuard", "siteWgDescription": "모든 WireGuard 클라이언트를 사용하여 터널을 설정하세요. 수동 NAT 설정이 필요합니다.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "모든 WireGuard 클라이언트를 사용하여 터널을 설정하세요. 수동 NAT 설정이 필요합니다. 자체 호스팅 노드에서만 작동합니다.", "siteLocalDescription": "로컬 리소스만 사용 가능합니다. 터널링이 없습니다.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "로컬 리소스만. 터널링 없음. 자체 호스팅 노드에서만 작동합니다.", "siteSeeAll": "모든 사이트 보기", "siteTunnelDescription": "사이트에 연결하는 방법을 결정하세요", "siteNewtCredentials": "Newt 자격 증명", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS 리소스", "resourceHTTPDescription": "서브도메인 또는 기본 도메인을 사용하여 HTTPS를 통해 앱에 대한 요청을 프록시합니다.", "resourceRaw": "원시 TCP/UDP 리소스", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "TCP/UDP를 통해 포트 번호를 사용하여 앱에 요청을 프록시합니다.", "resourceCreate": "리소스 생성", "resourceCreateDescription": "아래 단계를 따라 새 리소스를 생성하세요.", "resourceSeeAll": "모든 리소스 보기", @@ -168,9 +168,9 @@ "siteSelect": "사이트 선택", "siteSearch": "사이트 검색", "siteNotFound": "사이트를 찾을 수 없습니다.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "국가 선택하기", + "searchCountries": "국가 검색...", + "noCountryFound": "국가를 찾을 수 없습니다.", "siteSelectionDescription": "이 사이트는 대상에 대한 연결을 제공합니다.", "resourceType": "리소스 유형", "resourceTypeDescription": "리소스에 접근하는 방법을 결정하세요", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "서브도메인: {subdomain}", "domainPickerNamespace": "이름 공간: {namespace}", "domainPickerShowMore": "더보기", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "지역 선택", + "regionSelectorInfo": "지역을 선택하면 위치에 따라 더 나은 성능이 제공됩니다. 서버와 같은 지역에 있을 필요는 없습니다.", + "regionSelectorPlaceholder": "지역 선택", + "regionSelectorComingSoon": "곧 출시 예정", + "billingLoadingSubscription": "구독 불러오는 중...", + "billingFreeTier": "무료 티어", + "billingWarningOverLimit": "경고: 하나 이상의 사용 한도를 초과했습니다. 구독을 수정하거나 사용량을 조정하기 전까지 사이트는 연결되지 않습니다.", + "billingUsageLimitsOverview": "사용 한도 개요", + "billingMonitorUsage": "설정된 한도에 대한 사용량을 모니터링합니다. 한도를 늘려야 하는 경우 support@fossorial.io로 연락하십시오.", + "billingDataUsage": "데이터 사용량", + "billingOnlineTime": "사이트 온라인 시간", + "billingUsers": "활성 사용자", + "billingDomains": "활성 도메인", + "billingRemoteExitNodes": "활성 자체 호스팅 노드", + "billingNoLimitConfigured": "구성된 한도가 없습니다.", + "billingEstimatedPeriod": "예상 청구 기간", + "billingIncludedUsage": "포함 사용량", + "billingIncludedUsageDescription": "현재 구독 계획에 포함된 사용량", + "billingFreeTierIncludedUsage": "무료 티어 사용 허용량", + "billingIncluded": "포함됨", + "billingEstimatedTotal": "예상 총액:", + "billingNotes": "노트", + "billingEstimateNote": "현재 사용량을 기반으로 한 추정치입니다.", + "billingActualChargesMayVary": "실제 청구 금액은 다를 수 있습니다.", + "billingBilledAtEnd": "청구 기간이 끝난 후 청구됩니다.", + "billingModifySubscription": "구독 수정", + "billingStartSubscription": "구독 시작", + "billingRecurringCharge": "반복 요금", + "billingManageSubscriptionSettings": "구독 설정 및 기본 설정을 관리합니다", + "billingNoActiveSubscription": "활성 구독이 없습니다. 사용 한도를 늘리려면 구독을 시작하십시오.", + "billingFailedToLoadSubscription": "구독을 불러오는 데 실패했습니다.", + "billingFailedToLoadUsage": "사용량을 불러오는 데 실패했습니다.", + "billingFailedToGetCheckoutUrl": "체크아웃 URL을 가져오는 데 실패했습니다.", + "billingPleaseTryAgainLater": "나중에 다시 시도하십시오.", + "billingCheckoutError": "체크아웃 오류", + "billingFailedToGetPortalUrl": "포털 URL을 가져오는 데 실패했습니다.", + "billingPortalError": "포털 오류", + "billingDataUsageInfo": "클라우드에 연결할 때 보안 터널을 통해 전송된 모든 데이터에 대해 비용이 청구됩니다. 여기에는 모든 사이트의 들어오고 나가는 트래픽이 포함됩니다. 사용량 한도에 도달하면 플랜을 업그레이드하거나 사용량을 줄일 때까지 사이트가 연결 해제됩니다. 노드를 사용하는 경우 데이터는 요금이 청구되지 않습니다.", + "billingOnlineTimeInfo": "사이트가 클라우드에 연결된 시간에 따라 요금이 청구됩니다. 예를 들어, 44,640분은 사이트가 한 달 내내 24시간 작동하는 것과 같습니다. 사용량 한도에 도달하면 플랜을 업그레이드하거나 사용량을 줄일 때까지 사이트가 연결 해제됩니다. 노드를 사용할 때 시간은 요금이 청구되지 않습니다.", + "billingUsersInfo": "조직의 사용자마다 요금이 청구됩니다. 청구는 조직의 활성 사용자 계정 수에 따라 매일 계산됩니다.", + "billingDomainInfo": "조직의 도메인마다 요금이 청구됩니다. 청구는 조직의 활성 도메인 계정 수에 따라 매일 계산됩니다.", + "billingRemoteExitNodesInfo": "조직의 관리 노드마다 요금이 청구됩니다. 청구는 조직의 활성 관리 노드 수에 따라 매일 계산됩니다.", "domainNotFound": "도메인을 찾을 수 없습니다", "domainNotFoundDescription": "이 리소스는 도메인이 더 이상 시스템에 존재하지 않아 비활성화되었습니다. 이 리소스에 대한 새 도메인을 설정하세요.", "failed": "실패", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS 변경 사항은 인터넷 전체에 전파되는 데 시간이 걸립니다. DNS 제공자와 TTL 설정에 따라 몇 분에서 48시간까지 걸릴 수 있습니다.", "resourcePortRequired": "HTTP 리소스가 아닌 경우 포트 번호가 필요합니다", "resourcePortNotAllowed": "HTTP 리소스에 대해 포트 번호를 설정하지 마세요", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "가격 계산기", "signUpTerms": { "IAgreeToThe": "동의합니다", "termsOfService": "서비스 약관", @@ -1412,41 +1412,41 @@ "addNewTarget": "새 대상 추가", "targetsList": "대상 목록", "targetErrorDuplicateTargetFound": "중복 대상 발견", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckHealthy": "정상", + "healthCheckUnhealthy": "비정상", + "healthCheckUnknown": "알 수 없음", + "healthCheck": "상태 확인", + "configureHealthCheck": "상태 확인 설정", + "configureHealthCheckDescription": "{target}에 대한 상태 모니터링 설정", + "enableHealthChecks": "상태 확인 활성화", + "enableHealthChecksDescription": "이 대상을 모니터링하여 건강 상태를 확인하세요. 필요에 따라 대상과 다른 엔드포인트를 모니터링할 수 있습니다.", + "healthScheme": "방법", + "healthSelectScheme": "방법 선택", + "healthCheckPath": "경로", + "healthHostname": "IP / 호스트", + "healthPort": "포트", + "healthCheckPathDescription": "상태 확인을 위한 경로입니다.", + "healthyIntervalSeconds": "정상 간격", + "unhealthyIntervalSeconds": "비정상 간격", + "IntervalSeconds": "정상 간격", + "timeoutSeconds": "시간 초과", + "timeIsInSeconds": "시간은 초 단위입니다", + "retryAttempts": "재시도 횟수", + "expectedResponseCodes": "예상 응답 코드", + "expectedResponseCodesDescription": "정상 상태를 나타내는 HTTP 상태 코드입니다. 비워 두면 200-300이 정상으로 간주됩니다.", "customHeaders": "사용자 정의 헤더", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "헤더는 새 줄로 구분됨: Header-Name: value", + "headersValidationError": "헤더는 형식이어야 합니다: 헤더명: 값.", + "saveHealthCheck": "상태 확인 저장", + "healthCheckSaved": "상태 확인이 저장되었습니다.", + "healthCheckSavedDescription": "상태 확인 구성이 성공적으로 저장되었습니다", + "healthCheckError": "상태 확인 오류", + "healthCheckErrorDescription": "상태 확인 구성을 저장하는 동안 오류가 발생했습니다", + "healthCheckPathRequired": "상태 확인 경로는 필수입니다.", + "healthCheckMethodRequired": "HTTP 방법은 필수입니다.", + "healthCheckIntervalMin": "확인 간격은 최소 5초여야 합니다.", + "healthCheckTimeoutMin": "시간 초과는 최소 1초여야 합니다.", + "healthCheckRetryMin": "재시도 횟수는 최소 1회여야 합니다.", "httpMethod": "HTTP 메소드", "selectHttpMethod": "HTTP 메소드 선택", "domainPickerSubdomainLabel": "서브도메인", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "사용 가능한 무료 도메인에서 검색 및 선택할 서브도메인 입력.", "domainPickerFreeDomains": "무료 도메인", "domainPickerSearchForAvailableDomains": "사용 가능한 도메인 검색", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "참고: 무료 제공 도메인은 현재 자체 호스팅 인스턴스에 사용할 수 없습니다.", "resourceDomain": "도메인", "resourceEditDomain": "도메인 수정", "siteName": "사이트 이름", @@ -1543,72 +1543,72 @@ "autoLoginError": "자동 로그인 오류", "autoLoginErrorNoRedirectUrl": "ID 공급자로부터 리디렉션 URL을 받지 못했습니다.", "autoLoginErrorGeneratingUrl": "인증 URL 생성 실패.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "관리 자체 호스팅", + "remoteExitNodeDescription": "네트워크 연결성을 확장하기 위해 노드를 관리하세요", + "remoteExitNodes": "노드", + "searchRemoteExitNodes": "노드 검색...", + "remoteExitNodeAdd": "노드 추가", + "remoteExitNodeErrorDelete": "노드 삭제 오류", + "remoteExitNodeQuestionRemove": "조직에서 노드 {selectedNode}를 제거하시겠습니까?", + "remoteExitNodeMessageRemove": "한 번 제거되면 더 이상 노드에 접근할 수 없습니다.", + "remoteExitNodeMessageConfirm": "확인을 위해 아래에 노드 이름을 입력해 주세요.", + "remoteExitNodeConfirmDelete": "노드 삭제 확인", + "remoteExitNodeDelete": "노드 삭제", + "sidebarRemoteExitNodes": "노드", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "노드 생성", + "description": "네트워크 연결성을 확장하기 위해 새 노드를 생성하세요", + "viewAllButton": "모든 노드 보기", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "생성 전략", + "description": "노드를 직접 구성하거나 새 자격 증명을 생성하려면 이것을 선택하세요.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "노드 채택", + "description": "이미 노드의 자격 증명이 있는 경우 이것을 선택하세요." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "키 생성", + "description": "노드에 대한 새 키를 생성하려면 이것을 선택하세요" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "기존 노드 채택", + "description": "채택하려는 기존 노드의 자격 증명을 입력하세요", + "nodeIdLabel": "노드 ID", + "nodeIdDescription": "채택하려는 기존 노드의 ID", + "secretLabel": "비밀", + "secretDescription": "기존 노드의 비밀 키", + "submitButton": "노드 채택" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "생성된 자격 증명", + "description": "생성된 자격 증명을 사용하여 노드를 구성하세요", + "nodeIdTitle": "노드 ID", + "secretTitle": "비밀", + "saveCredentialsTitle": "구성에 자격 증명 추가", + "saveCredentialsDescription": "연결을 완료하려면 이러한 자격 증명을 자체 호스팅 Pangolin 노드 구성 파일에 추가하십시오.", + "submitButton": "노드 생성" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "기존 노드를 채택하려면 노드 ID와 비밀 키가 필요합니다" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "기본값 로드 실패", + "defaultsNotLoaded": "기본값 로드되지 않음", + "createFailed": "노드 생성 실패" }, "success": { - "created": "Node created successfully" + "created": "노드가 성공적으로 생성되었습니다" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "노드 선택", + "remoteExitNodeSelectionDescription": "이 로컬 사이트에서 트래픽을 라우팅할 노드를 선택하세요", + "remoteExitNodeRequired": "로컬 사이트에 노드를 선택해야 합니다", + "noRemoteExitNodesAvailable": "사용 가능한 노드가 없습니다", + "noRemoteExitNodesAvailableDescription": "이 조직에 사용 가능한 노드가 없습니다. 로컬 사이트를 사용하려면 먼저 노드를 생성하세요.", + "exitNode": "종단 노드", + "country": "국가", + "rulesMatchCountry": "현재 소스 IP를 기반으로 합니다", "managedSelfHosted": { "title": "관리 자체 호스팅", "description": "더 신뢰할 수 있고 낮은 유지보수의 자체 호스팅 팡골린 서버, 추가 기능 포함", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "국제 도메인 감지됨", "willbestoredas": "다음으로 저장됩니다:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", + "roleMappingDescription": "자동 프로비저닝이 활성화되면 사용자가 로그인할 때 역할이 할당되는 방법을 결정합니다.", + "selectRole": "역할 선택", + "roleMappingExpression": "표현식", + "selectRolePlaceholder": "역할 선택", + "selectRoleDescription": "이 신원 공급자로부터 모든 사용자에게 할당할 역할을 선택하십시오.", + "roleMappingExpressionDescription": "ID 토큰에서 역할 정보를 추출하기 위한 JMESPath 표현식을 입력하세요.", + "idpTenantIdRequired": "테넌트 ID가 필요합니다", + "invalidValue": "잘못된 값", + "idpTypeLabel": "신원 공급자 유형", + "roleMappingExpressionPlaceholder": "예: contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Google 구성", + "idpGoogleConfigurationDescription": "Google OAuth2 자격 증명을 구성합니다.", + "idpGoogleClientIdDescription": "Google OAuth2 클라이언트 ID", + "idpGoogleClientSecretDescription": "Google OAuth2 클라이언트 비밀", + "idpAzureConfiguration": "Azure Entra ID 구성", + "idpAzureConfigurationDescription": "Azure Entra ID OAuth2 자격 증명을 구성합니다.", + "idpTenantId": "테넌트 ID", "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", - "idpGoogleTitle": "Google", + "idpAzureTenantIdDescription": "Azure 액티브 디렉터리 개요에서 찾은 Azure 테넌트 ID", + "idpAzureClientIdDescription": "Azure 앱 등록 클라이언트 ID", + "idpAzureClientSecretDescription": "Azure 앱 등록 클라이언트 비밀", + "idpGoogleTitle": "구글", "idpGoogleAlt": "구글", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "애저", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Google 구성", + "idpAzureConfigurationTitle": "Azure Entra ID 구성", + "idpTenantIdLabel": "테넌트 ID", + "idpAzureClientIdDescription2": "Azure 앱 등록 클라이언트 ID", + "idpAzureClientSecretDescription2": "Azure 앱 등록 클라이언트 비밀", "idpGoogleDescription": "Google OAuth2/OIDC 공급자", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC 공급자", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "서브넷", + "subnetDescription": "이 조직의 네트워크 구성에 대한 서브넷입니다.", + "authPage": "인증 페이지", + "authPageDescription": "조직에 대한 인증 페이지를 구성합니다.", + "authPageDomain": "인증 페이지 도메인", + "noDomainSet": "도메인 설정 없음", + "changeDomain": "도메인 변경", + "selectDomain": "도메인 선택", + "restartCertificate": "인증서 재시작", + "editAuthPageDomain": "인증 페이지 도메인 편집", + "setAuthPageDomain": "인증 페이지 도메인 설정", + "failedToFetchCertificate": "인증서 가져오기 실패", + "failedToRestartCertificate": "인증서 재시작 실패", + "addDomainToEnableCustomAuthPages": "조직의 맞춤 인증 페이지를 활성화하려면 도메인을 추가하세요.", + "selectDomainForOrgAuthPage": "조직 인증 페이지에 대한 도메인을 선택하세요.", "domainPickerProvidedDomain": "제공된 도메인", "domainPickerFreeProvidedDomain": "무료 제공된 도메인", "domainPickerVerified": "검증됨", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\"을(를) {domain}에 대해 유효하게 만들 수 없습니다.", "domainPickerSubdomainSanitized": "하위 도메인 정리됨", "domainPickerSubdomainCorrected": "\"{sub}\"이(가) \"{sanitized}\"로 수정되었습니다", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "조직에 로그인", + "orgAuthChooseIdpDescription": "계속하려면 신원 공급자를 선택하세요.", + "orgAuthNoIdpConfigured": "이 조직은 구성된 신원 공급자가 없습니다. 대신 Pangolin 아이덴티티로 로그인할 수 있습니다.", + "orgAuthSignInWithPangolin": "Pangolin으로 로그인", + "subscriptionRequiredToUse": "이 기능을 사용하려면 구독이 필요합니다.", + "idpDisabled": "신원 공급자가 비활성화되었습니다.", + "orgAuthPageDisabled": "조직 인증 페이지가 비활성화되었습니다.", + "domainRestartedDescription": "도메인 인증이 성공적으로 재시작되었습니다.", "resourceAddEntrypointsEditFile": "파일 편집: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "파일 편집: docker-compose.yml", "emailVerificationRequired": "이메일 인증이 필요합니다. 이 단계를 완료하려면 {dashboardUrl}/auth/login 통해 다시 로그인하십시오. 그런 다음 여기로 돌아오세요.", "twoFactorSetupRequired": "이중 인증 설정이 필요합니다. 이 단계를 완료하려면 {dashboardUrl}/auth/login 통해 다시 로그인하십시오. 그런 다음 여기로 돌아오세요.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "인증 페이지 설정을 업데이트하는 동안 오류가 발생했습니다", + "authPageUpdated": "인증 페이지가 성공적으로 업데이트되었습니다", + "healthCheckNotAvailable": "로컬", + "rewritePath": "경로 재작성", + "rewritePathDescription": "대상으로 전달하기 전에 경로를 선택적으로 재작성합니다." } From 4c995f786b0e968c8462b981f8d17675a80316a2 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:17:00 -0700 Subject: [PATCH 21/28] New translations en-us.json (Dutch) --- messages/nl-NL.json | 372 ++++++++++++++++++++++---------------------- 1 file changed, 186 insertions(+), 186 deletions(-) diff --git a/messages/nl-NL.json b/messages/nl-NL.json index c8047e5f..fb370345 100644 --- a/messages/nl-NL.json +++ b/messages/nl-NL.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Gemakkelijkste manier om een ingangspunt in uw netwerk te maken. Geen extra opzet.", "siteWg": "Basis WireGuard", "siteWgDescription": "Gebruik een WireGuard client om een tunnel te bouwen. Handmatige NAT installatie vereist.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Gebruik elke WireGuard-client om een tunnel op te zetten. Handmatige NAT-instelling vereist. WERKT ALLEEN OP SELF HOSTED NODES", "siteLocalDescription": "Alleen lokale bronnen. Geen tunneling.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Alleen lokale bronnen. Geen tunneling. WERKT ALLEEN OP SELF HOSTED NODES", "siteSeeAll": "Alle sites bekijken", "siteTunnelDescription": "Bepaal hoe u verbinding wilt maken met uw site", "siteNewtCredentials": "Nieuwste aanmeldgegevens", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS bron", "resourceHTTPDescription": "Proxy verzoeken aan uw app via HTTPS via een subdomein of basisdomein.", "resourceRaw": "TCP/UDP bron", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Proxy verzoeken naar je app via TCP/UDP met behulp van een poortnummer.", "resourceCreate": "Bron maken", "resourceCreateDescription": "Volg de onderstaande stappen om een nieuwe bron te maken", "resourceSeeAll": "Alle bronnen bekijken", @@ -168,9 +168,9 @@ "siteSelect": "Selecteer site", "siteSearch": "Zoek site", "siteNotFound": "Geen site gevonden.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Selecteer land", + "searchCountries": "Zoek landen...", + "noCountryFound": "Geen land gevonden.", "siteSelectionDescription": "Deze site zal connectiviteit met het doelwit bieden.", "resourceType": "Type bron", "resourceTypeDescription": "Bepaal hoe u toegang wilt krijgen tot uw bron", @@ -268,7 +268,7 @@ "apiKeysGeneralSettingsDescription": "Bepaal wat deze API-sleutel kan doen", "apiKeysList": "Uw API-sleutel", "apiKeysSave": "Uw API-sleutel opslaan", - "apiKeysSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een beveiligde plek.", + "apiKeysSaveDescription": "Je kunt dit slechts één keer zien. Kopieer het naar een veilige plek.", "apiKeysInfo": "Uw API-sleutel is:", "apiKeysConfirmCopy": "Ik heb de API-sleutel gekopieerd", "generate": "Genereren", @@ -925,7 +925,7 @@ "inviteErrorExpired": "De uitnodiging is mogelijk verlopen", "inviteErrorRevoked": "De uitnodiging is mogelijk ingetrokken", "inviteErrorTypo": "Er kan een typefout zijn in de uitnodigingslink", - "pangolinSetup": "Setup - Pangolin", + "pangolinSetup": "Instellen - Pangolin", "orgNameRequired": "Organisatienaam is vereist", "orgIdRequired": "Organisatie-ID is vereist", "orgErrorCreate": "Fout opgetreden tijdens het aanmaken org", @@ -995,12 +995,12 @@ "actionGetUser": "Gebruiker ophalen", "actionGetOrgUser": "Krijg organisatie-gebruiker", "actionListOrgDomains": "Lijst organisatie domeinen", - "actionCreateSite": "Site maken", + "actionCreateSite": "Site aanmaken", "actionDeleteSite": "Site verwijderen", "actionGetSite": "Site ophalen", "actionListSites": "Sites weergeven", "actionApplyBlueprint": "Blauwdruk toepassen", - "setupToken": "Setup Token", + "setupToken": "Instel Token", "setupTokenDescription": "Voer het setup-token in vanaf de serverconsole.", "setupTokenRequired": "Setup-token is vereist", "actionUpdateSite": "Site bijwerken", @@ -1256,50 +1256,50 @@ "domainPickerOrganizationDomains": "Organisatiedomeinen", "domainPickerProvidedDomains": "Aangeboden domeinen", "domainPickerSubdomain": "Subdomein: {subdomain}", - "domainPickerNamespace": "Namespace: {namespace}", + "domainPickerNamespace": "Naamruimte: {namespace}", "domainPickerShowMore": "Meer weergeven", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Selecteer Regio", + "regionSelectorInfo": "Het selecteren van een regio helpt ons om betere prestaties te leveren voor uw locatie. U hoeft niet in dezelfde regio als uw server te zijn.", + "regionSelectorPlaceholder": "Kies een regio", + "regionSelectorComingSoon": "Komt binnenkort", + "billingLoadingSubscription": "Abonnement laden...", + "billingFreeTier": "Gratis Niveau", + "billingWarningOverLimit": "Waarschuwing: U hebt een of meer gebruikslimieten overschreden. Uw sites maken geen verbinding totdat u uw abonnement aanpast of uw gebruik aanpast.", + "billingUsageLimitsOverview": "Overzicht gebruikslimieten", + "billingMonitorUsage": "Houd uw gebruik in de gaten ten opzichte van de ingestelde limieten. Als u verhoogde limieten nodig heeft, neem dan contact met ons op support@fossorial.io.", + "billingDataUsage": "Gegevensgebruik", + "billingOnlineTime": "Site Online Tijd", + "billingUsers": "Actieve Gebruikers", + "billingDomains": "Actieve Domeinen", + "billingRemoteExitNodes": "Actieve Zelfgehoste Nodes", + "billingNoLimitConfigured": "Geen limiet ingesteld", + "billingEstimatedPeriod": "Geschatte Facturatie Periode", + "billingIncludedUsage": "Opgenomen Gebruik", + "billingIncludedUsageDescription": "Gebruik inbegrepen in uw huidige abonnementsplan", + "billingFreeTierIncludedUsage": "Gratis niveau gebruikstoelagen", + "billingIncluded": "inbegrepen", + "billingEstimatedTotal": "Geschat Totaal:", + "billingNotes": "Notities", + "billingEstimateNote": "Dit is een schatting gebaseerd op uw huidige gebruik.", + "billingActualChargesMayVary": "Facturering kan variëren.", + "billingBilledAtEnd": "U wordt aan het einde van de factureringsperiode gefactureerd.", + "billingModifySubscription": "Abonnementsaanpassing", + "billingStartSubscription": "Abonnement Starten", + "billingRecurringCharge": "Terugkerende Kosten", + "billingManageSubscriptionSettings": "Beheer uw abonnementsinstellingen en voorkeuren", + "billingNoActiveSubscription": "U heeft geen actief abonnement. Start uw abonnement om gebruikslimieten te verhogen.", + "billingFailedToLoadSubscription": "Fout bij laden van abonnement", + "billingFailedToLoadUsage": "Niet gelukt om gebruik te laden", + "billingFailedToGetCheckoutUrl": "Niet gelukt om checkout URL te krijgen", + "billingPleaseTryAgainLater": "Probeer het later opnieuw.", + "billingCheckoutError": "Checkout Fout", + "billingFailedToGetPortalUrl": "Niet gelukt om portal URL te krijgen", + "billingPortalError": "Portal Fout", + "billingDataUsageInfo": "U bent in rekening gebracht voor alle gegevens die via uw beveiligde tunnels via de cloud worden verzonden. Dit omvat zowel inkomende als uitgaande verkeer over al uw sites. Wanneer u uw limiet bereikt zullen uw sites de verbinding verbreken totdat u uw abonnement upgradet of het gebruik vermindert. Gegevens worden niet in rekening gebracht bij het gebruik van knooppunten.", + "billingOnlineTimeInfo": "U wordt in rekening gebracht op basis van hoe lang uw sites verbonden blijven met de cloud. Bijvoorbeeld 44,640 minuten is gelijk aan één site met 24/7 voor een volledige maand. Wanneer u uw limiet bereikt, zal de verbinding tussen uw sites worden verbroken totdat u een upgrade van uw abonnement uitvoert of het gebruik vermindert. Tijd wordt niet belast bij het gebruik van knooppunten.", + "billingUsersInfo": "U wordt gefactureerd voor elke gebruiker in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve gebruikersaccounts in uw organisatie.", + "billingDomainInfo": "U wordt gefactureerd voor elk domein in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve domeinaccounts in uw organisatie.", + "billingRemoteExitNodesInfo": "U wordt gefactureerd voor elke beheerde Node in uw organisatie. Facturering wordt dagelijks berekend op basis van het aantal actieve beheerde Nodes in uw organisatie.", "domainNotFound": "Domein niet gevonden", "domainNotFoundDescription": "Deze bron is uitgeschakeld omdat het domein niet langer in ons systeem bestaat. Stel een nieuw domein in voor deze bron.", "failed": "Mislukt", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS-wijzigingen kunnen enige tijd duren om over het internet te worden verspreid. Dit kan enkele minuten tot 48 uur duren, afhankelijk van je DNS-provider en TTL-instellingen.", "resourcePortRequired": "Poortnummer is vereist voor niet-HTTP-bronnen", "resourcePortNotAllowed": "Poortnummer mag niet worden ingesteld voor HTTP-bronnen", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Prijs Calculator", "signUpTerms": { "IAgreeToThe": "Ik ga akkoord met de", "termsOfService": "servicevoorwaarden", @@ -1412,41 +1412,41 @@ "addNewTarget": "Voeg nieuw doelwit toe", "targetsList": "Lijst met doelen", "targetErrorDuplicateTargetFound": "Dubbel doelwit gevonden", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", + "healthCheckHealthy": "Gezond", + "healthCheckUnhealthy": "Ongezond", + "healthCheckUnknown": "Onbekend", + "healthCheck": "Gezondheidscontrole", + "configureHealthCheck": "Configureer Gezondheidscontrole", + "configureHealthCheckDescription": "Stel gezondheid monitor voor {target} in", + "enableHealthChecks": "Inschakelen Gezondheidscontroles", + "enableHealthChecksDescription": "Controleer de gezondheid van dit doel. U kunt een ander eindpunt monitoren dan het doel indien vereist.", + "healthScheme": "Methode", + "healthSelectScheme": "Selecteer methode", + "healthCheckPath": "Pad", + "healthHostname": "IP / Hostnaam", + "healthPort": "Poort", + "healthCheckPathDescription": "Het pad om de gezondheid status te controleren.", + "healthyIntervalSeconds": "Gezonde Interval", + "unhealthyIntervalSeconds": "Ongezonde Interval", + "IntervalSeconds": "Gezonde Interval", "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "timeIsInSeconds": "Tijd is in seconden", + "retryAttempts": "Herhaal Pogingen", + "expectedResponseCodes": "Verwachte Reactiecodes", + "expectedResponseCodesDescription": "HTTP-statuscode die gezonde status aangeeft. Indien leeg wordt 200-300 als gezond beschouwd.", "customHeaders": "Aangepaste headers", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Kopregeleinde: Header-Naam: waarde", + "headersValidationError": "Headers moeten in het formaat zijn: Header-Naam: waarde.", + "saveHealthCheck": "Opslaan Gezondheidscontrole", + "healthCheckSaved": "Gezondheidscontrole Opgeslagen", + "healthCheckSavedDescription": "Gezondheidscontrole configuratie succesvol opgeslagen", + "healthCheckError": "Gezondheidscontrole Fout", + "healthCheckErrorDescription": "Er is een fout opgetreden bij het opslaan van de configuratie van de gezondheidscontrole.", + "healthCheckPathRequired": "Gezondheidscontrole pad is vereist", + "healthCheckMethodRequired": "HTTP methode is vereist", + "healthCheckIntervalMin": "Controle interval moet minimaal 5 seconden zijn", + "healthCheckTimeoutMin": "Timeout moet minimaal 1 seconde zijn", + "healthCheckRetryMin": "Herhaal pogingen moet minimaal 1 zijn", "httpMethod": "HTTP-methode", "selectHttpMethod": "Selecteer HTTP-methode", "domainPickerSubdomainLabel": "Subdomein", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Voer een subdomein in om te zoeken en te selecteren uit beschikbare gratis domeinen.", "domainPickerFreeDomains": "Gratis Domeinen", "domainPickerSearchForAvailableDomains": "Zoek naar beschikbare domeinen", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Opmerking: Gratis aangeboden domeinen zijn momenteel niet beschikbaar voor zelf-gehoste instanties.", "resourceDomain": "Domein", "resourceEditDomain": "Domein bewerken", "siteName": "Site Naam", @@ -1543,72 +1543,72 @@ "autoLoginError": "Auto Login Fout", "autoLoginErrorNoRedirectUrl": "Geen redirect URL ontvangen van de identity provider.", "autoLoginErrorGeneratingUrl": "Genereren van authenticatie-URL mislukt.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", + "remoteExitNodeManageRemoteExitNodes": "Beheer Zelf-Gehoste", + "remoteExitNodeDescription": "Beheer knooppunten om uw netwerkverbinding uit te breiden", "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", + "searchRemoteExitNodes": "Knooppunten zoeken...", + "remoteExitNodeAdd": "Voeg node toe", + "remoteExitNodeErrorDelete": "Fout bij verwijderen node", + "remoteExitNodeQuestionRemove": "Weet u zeker dat u het node {selectedNode} uit de organisatie wilt verwijderen?", + "remoteExitNodeMessageRemove": "Eenmaal verwijderd, zal het knooppunt niet langer toegankelijk zijn.", + "remoteExitNodeMessageConfirm": "Om te bevestigen, typ de naam van het knooppunt hieronder.", + "remoteExitNodeConfirmDelete": "Bevestig verwijderen node", + "remoteExitNodeDelete": "Knoop verwijderen", "sidebarRemoteExitNodes": "Nodes", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Maak node", + "description": "Maak een nieuwe node aan om uw netwerkverbinding uit te breiden", + "viewAllButton": "Alle nodes weergeven", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Creatie Strategie", + "description": "Kies dit om uw node handmatig te configureren of nieuwe referenties te genereren.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Adopteer Node", + "description": "Kies dit als u al de referenties voor deze node heeft" }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Genereer Sleutels", + "description": "Kies dit als u nieuwe sleutels voor het knooppunt wilt genereren" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Adopteer Bestaande Node", + "description": "Voer de referenties in van het bestaande knooppunt dat u wilt adopteren", + "nodeIdLabel": "Knooppunt ID", + "nodeIdDescription": "De ID van het knooppunt dat u wilt adopteren", + "secretLabel": "Geheim", + "secretDescription": "De geheime sleutel van de bestaande node", + "submitButton": "Knooppunt adopteren" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Gegeneerde Inloggegevens", + "description": "Gebruik deze gegenereerde inloggegevens om uw node te configureren", + "nodeIdTitle": "Knooppunt ID", + "secretTitle": "Geheim", + "saveCredentialsTitle": "Voeg Inloggegevens toe aan Config", + "saveCredentialsDescription": "Voeg deze inloggegevens toe aan uw zelf-gehoste Pangolin-node configuratiebestand om de verbinding te voltooien.", + "submitButton": "Maak node" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "Node ID en Secret zijn verplicht bij het overnemen van een bestaand knooppunt" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Niet gelukt om standaarden te laden", + "defaultsNotLoaded": "Standaarden niet geladen", + "createFailed": "Fout bij het maken van node" }, "success": { - "created": "Node created successfully" + "created": "Node succesvol aangemaakt" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", + "remoteExitNodeSelection": "Knooppunt selectie", + "remoteExitNodeSelectionDescription": "Selecteer een node om het verkeer door te leiden voor deze lokale site", + "remoteExitNodeRequired": "Een node moet worden geselecteerd voor lokale sites", + "noRemoteExitNodesAvailable": "Geen knooppunten beschikbaar", + "noRemoteExitNodesAvailableDescription": "Er zijn geen knooppunten beschikbaar voor deze organisatie. Maak eerst een knooppunt aan om lokale sites te gebruiken.", "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "country": "Land", + "rulesMatchCountry": "Momenteel gebaseerd op bron IP", "managedSelfHosted": { "title": "Beheerde Self-Hosted", "description": "betrouwbaardere en slecht onderhouden Pangolin server met extra klokken en klokkenluiders", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Internationaal Domein Gedetecteerd", "willbestoredas": "Zal worden opgeslagen als:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Bepaal hoe rollen worden toegewezen aan gebruikers wanneer ze inloggen wanneer Auto Provision is ingeschakeld.", + "selectRole": "Selecteer een rol", + "roleMappingExpression": "Expressie", + "selectRolePlaceholder": "Kies een rol", + "selectRoleDescription": "Selecteer een rol om toe te wijzen aan alle gebruikers van deze identiteitsprovider", + "roleMappingExpressionDescription": "Voer een JMESPath expressie in om rolinformatie van de ID-token te extraheren", + "idpTenantIdRequired": "Tenant ID is vereist", + "invalidValue": "Ongeldige waarde", + "idpTypeLabel": "Identiteit provider type", + "roleMappingExpressionPlaceholder": "bijvoorbeeld bevat (groepen, 'admin') && 'Admin' ½ 'Member'", + "idpGoogleConfiguration": "Google Configuratie", + "idpGoogleConfigurationDescription": "Configureer uw Google OAuth2-referenties", + "idpGoogleClientIdDescription": "Uw Google OAuth2-client-ID", + "idpGoogleClientSecretDescription": "Uw Google OAuth2 Clientgeheim", + "idpAzureConfiguration": "Azure Entra ID configuratie", + "idpAzureConfigurationDescription": "Configureer uw Azure Entra ID OAuth2 referenties", + "idpTenantId": "Tenant-ID", + "idpTenantIdPlaceholder": "jouw-tenant-id", + "idpAzureTenantIdDescription": "Uw Azure tenant ID (gevonden in Azure Active Directory overzicht)", + "idpAzureClientIdDescription": "Uw Azure App registratie Client ID", + "idpAzureClientSecretDescription": "Uw Azure App registratie Client Secret", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Google Configuratie", + "idpAzureConfigurationTitle": "Azure Entra ID configuratie", + "idpTenantIdLabel": "Tenant-ID", + "idpAzureClientIdDescription2": "Uw Azure App registratie Client ID", + "idpAzureClientSecretDescription2": "Uw Azure App registratie Client Secret", "idpGoogleDescription": "Google OAuth2/OIDC provider", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnetDescription": "Het subnet van de netwerkconfiguratie van deze organisatie.", + "authPage": "Authenticatie pagina", + "authPageDescription": "De autorisatiepagina voor uw organisatie configureren", + "authPageDomain": "Authenticatie pagina domein", + "noDomainSet": "Geen domein ingesteld", + "changeDomain": "Domein wijzigen", + "selectDomain": "Domein selecteren", + "restartCertificate": "Certificaat opnieuw starten", + "editAuthPageDomain": "Authenticatiepagina domein bewerken", + "setAuthPageDomain": "Authenticatiepagina domein instellen", + "failedToFetchCertificate": "Certificaat ophalen mislukt", + "failedToRestartCertificate": "Kon certificaat niet opnieuw opstarten", + "addDomainToEnableCustomAuthPages": "Voeg een domein toe om aangepaste authenticatiepagina's voor uw organisatie in te schakelen", + "selectDomainForOrgAuthPage": "Selecteer een domein voor de authenticatiepagina van de organisatie", "domainPickerProvidedDomain": "Opgegeven domein", "domainPickerFreeProvidedDomain": "Gratis verstrekt domein", "domainPickerVerified": "Geverifieerd", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" kon niet geldig worden gemaakt voor {domain}.", "domainPickerSubdomainSanitized": "Subdomein gesaniseerd", "domainPickerSubdomainCorrected": "\"{sub}\" was gecorrigeerd op \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Meld je aan bij je organisatie", + "orgAuthChooseIdpDescription": "Kies uw identiteitsprovider om door te gaan", + "orgAuthNoIdpConfigured": "Deze organisatie heeft geen identiteitsproviders geconfigureerd. Je kunt in plaats daarvan inloggen met je Pangolin-identiteit.", + "orgAuthSignInWithPangolin": "Log in met Pangolin", + "subscriptionRequiredToUse": "Een abonnement is vereist om deze functie te gebruiken.", + "idpDisabled": "Identiteitsaanbieders zijn uitgeschakeld.", + "orgAuthPageDisabled": "Pagina voor organisatie-authenticatie is uitgeschakeld.", + "domainRestartedDescription": "Domeinverificatie met succes opnieuw gestart", "resourceAddEntrypointsEditFile": "Bestand bewerken: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Bestand bewerken: docker-compose.yml", "emailVerificationRequired": "E-mail verificatie is vereist. Log opnieuw in via {dashboardUrl}/auth/login voltooide deze stap. Kom daarna hier terug.", "twoFactorSetupRequired": "Tweestapsverificatie instellen is vereist. Log opnieuw in via {dashboardUrl}/auth/login voltooide deze stap. Kom daarna hier terug.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Er is een fout opgetreden bij het bijwerken van de instellingen van de auth-pagina", + "authPageUpdated": "Auth-pagina succesvol bijgewerkt", + "healthCheckNotAvailable": "Lokaal", + "rewritePath": "Herschrijf Pad", + "rewritePathDescription": "Optioneel het pad herschrijven voordat je het naar het doel doorstuurt." } From 65bf055e0f55fed19ddffb0969a16ae4e8021834 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:17:01 -0700 Subject: [PATCH 22/28] New translations en-us.json (Polish) --- messages/pl-PL.json | 372 ++++++++++++++++++++++---------------------- 1 file changed, 186 insertions(+), 186 deletions(-) diff --git a/messages/pl-PL.json b/messages/pl-PL.json index 90d188b4..c3db35f5 100644 --- a/messages/pl-PL.json +++ b/messages/pl-PL.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Łatwiejszy sposób na stworzenie punktu wejścia w sieci. Nie ma dodatkowej konfiguracji.", "siteWg": "Podstawowy WireGuard", "siteWgDescription": "Użyj dowolnego klienta WireGuard do utworzenia tunelu. Wymagana jest ręczna konfiguracja NAT.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Użyj dowolnego klienta WireGuard do utworzenia tunelu. Wymagana ręczna konfiguracja NAT. DZIAŁA TYLKO NA SAMODZIELNIE HOSTOWANYCH WĘZŁACH", "siteLocalDescription": "Tylko lokalne zasoby. Brak tunelu.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Tylko zasoby lokalne. Brak tunelowania. DZIAŁA TYLKO NA SAMODZIELNIE HOSTOWANYCH WĘZŁACH", "siteSeeAll": "Zobacz wszystkie witryny", "siteTunnelDescription": "Określ jak chcesz połączyć się ze swoją stroną", "siteNewtCredentials": "Aktualne dane logowania", @@ -159,7 +159,7 @@ "resourceHTTP": "Zasób HTTPS", "resourceHTTPDescription": "Proxy do Twojej aplikacji przez HTTPS, przy użyciu poddomeny lub domeny bazowej.", "resourceRaw": "Surowy zasób TCP/UDP", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Proxy do aplikacji przez TCP/UDP przy użyciu numeru portu.", "resourceCreate": "Utwórz zasób", "resourceCreateDescription": "Wykonaj poniższe kroki, aby utworzyć nowy zasób", "resourceSeeAll": "Zobacz wszystkie zasoby", @@ -168,9 +168,9 @@ "siteSelect": "Wybierz witrynę", "siteSearch": "Szukaj witryny", "siteNotFound": "Nie znaleziono witryny.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Wybierz kraj", + "searchCountries": "Szukaj krajów...", + "noCountryFound": "Nie znaleziono kraju.", "siteSelectionDescription": "Ta strona zapewni połączenie z celem.", "resourceType": "Typ zasobu", "resourceTypeDescription": "Określ jak chcesz uzyskać dostęp do swojego zasobu", @@ -1156,7 +1156,7 @@ "containerLabels": "Etykiety", "containerLabelsCount": "{count, plural, one {# etykieta} few {# etykiety} many {# etykiet} other {# etykiet}}", "containerLabelsTitle": "Etykiety kontenera", - "containerLabelEmpty": "", + "containerLabelEmpty": "", "containerPorts": "Porty", "containerPortsMore": "+{count} więcej", "containerActions": "Akcje", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Subdomena: {subdomain}", "domainPickerNamespace": "Przestrzeń nazw: {namespace}", "domainPickerShowMore": "Pokaż więcej", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Wybierz region", + "regionSelectorInfo": "Wybór regionu pomaga nam zapewnić lepszą wydajność dla Twojej lokalizacji. Nie musisz być w tym samym regionie co Twój serwer.", + "regionSelectorPlaceholder": "Wybierz region", + "regionSelectorComingSoon": "Wkrótce dostępne", + "billingLoadingSubscription": "Ładowanie subskrypcji...", + "billingFreeTier": "Darmowy pakiet", + "billingWarningOverLimit": "Ostrzeżenie: Przekroczyłeś jeden lub więcej limitów użytkowania. Twoje witryny nie połączą się, dopóki nie zmienisz subskrypcji lub nie dostosujesz użytkowania.", + "billingUsageLimitsOverview": "Przegląd Limitów Użytkowania", + "billingMonitorUsage": "Monitoruj swoje wykorzystanie w porównaniu do skonfigurowanych limitów. Jeśli potrzebujesz zwiększenia limitów, skontaktuj się z nami pod adresem support@fossorial.io.", + "billingDataUsage": "Użycie danych", + "billingOnlineTime": "Czas Online Strony", + "billingUsers": "Aktywni użytkownicy", + "billingDomains": "Aktywne domeny", + "billingRemoteExitNodes": "Aktywne samodzielnie-hostowane węzły", + "billingNoLimitConfigured": "Nie skonfigurowano limitu", + "billingEstimatedPeriod": "Szacowany Okres Rozliczeniowy", + "billingIncludedUsage": "Zawarte użycie", + "billingIncludedUsageDescription": "Użycie zawarte w obecnym planie subskrypcji", + "billingFreeTierIncludedUsage": "Limity użycia dla darmowego pakietu", + "billingIncluded": "zawarte", + "billingEstimatedTotal": "Szacowana Całkowita:", + "billingNotes": "Notatki", + "billingEstimateNote": "To jest szacunkowe, oparte na Twoim obecnym użyciu.", + "billingActualChargesMayVary": "Rzeczywiste opłaty mogą się różnić.", + "billingBilledAtEnd": "Zostaniesz obciążony na koniec okresu rozliczeniowego.", + "billingModifySubscription": "Modyfikuj Subskrypcję", + "billingStartSubscription": "Rozpocznij Subskrypcję", + "billingRecurringCharge": "Opłata Cyklowa", + "billingManageSubscriptionSettings": "Zarządzaj ustawieniami i preferencjami subskrypcji", + "billingNoActiveSubscription": "Nie masz aktywnej subskrypcji. Rozpocznij subskrypcję, aby zwiększyć limity użytkowania.", + "billingFailedToLoadSubscription": "Nie udało się załadować subskrypcji", + "billingFailedToLoadUsage": "Nie udało się załadować użycia", + "billingFailedToGetCheckoutUrl": "Nie udało się uzyskać adresu URL zakupu", + "billingPleaseTryAgainLater": "Spróbuj ponownie później.", + "billingCheckoutError": "Błąd przy kasie", + "billingFailedToGetPortalUrl": "Nie udało się uzyskać adresu URL portalu", + "billingPortalError": "Błąd Portalu", + "billingDataUsageInfo": "Jesteś obciążony za wszystkie dane przesyłane przez bezpieczne tunele, gdy jesteś podłączony do chmury. Obejmuje to zarówno ruch przychodzący, jak i wychodzący we wszystkich Twoich witrynach. Gdy osiągniesz swój limit, twoje strony zostaną rozłączone, dopóki nie zaktualizujesz planu lub nie ograniczysz użycia. Dane nie będą naliczane przy użyciu węzłów.", + "billingOnlineTimeInfo": "Opłata zależy od tego, jak długo twoje strony pozostają połączone z chmurą. Na przykład 44,640 minut oznacza jedną stronę działającą 24/7 przez cały miesiąc. Kiedy osiągniesz swój limit, twoje strony zostaną rozłączone, dopóki nie zaktualizujesz planu lub nie zmniejsz jego wykorzystania. Czas nie będzie naliczany przy użyciu węzłów.", + "billingUsersInfo": "Jesteś obciążany za każdego użytkownika w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych kont użytkowników w twojej organizacji.", + "billingDomainInfo": "Jesteś obciążany za każdą domenę w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych kont domen w twojej organizacji.", + "billingRemoteExitNodesInfo": "Jesteś obciążany za każdy zarządzany węzeł w twojej organizacji. Rozliczenia są obliczane codziennie na podstawie liczby aktywnych zarządzanych węzłów w twojej organizacji.", "domainNotFound": "Nie znaleziono domeny", "domainNotFoundDescription": "Zasób jest wyłączony, ponieważ domena nie istnieje już w naszym systemie. Proszę ustawić nową domenę dla tego zasobu.", "failed": "Niepowodzenie", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Zmiany DNS mogą zająć trochę czasu na rozpropagowanie się w Internecie. Może to potrwać od kilku minut do 48 godzin, w zależności od dostawcy DNS i ustawień TTL.", "resourcePortRequired": "Numer portu jest wymagany dla zasobów non-HTTP", "resourcePortNotAllowed": "Numer portu nie powinien być ustawiony dla zasobów HTTP", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Kalkulator Cen", "signUpTerms": { "IAgreeToThe": "Zgadzam się z", "termsOfService": "warunkami usługi", @@ -1412,41 +1412,41 @@ "addNewTarget": "Dodaj nowy cel", "targetsList": "Lista celów", "targetErrorDuplicateTargetFound": "Znaleziono duplikat celu", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", + "healthCheckHealthy": "Zdrowy", + "healthCheckUnhealthy": "Niezdrowy", + "healthCheckUnknown": "Nieznany", + "healthCheck": "Kontrola Zdrowia", + "configureHealthCheck": "Skonfiguruj Kontrolę Zdrowia", + "configureHealthCheckDescription": "Skonfiguruj monitorowanie zdrowia dla {target}", + "enableHealthChecks": "Włącz Kontrole Zdrowia", + "enableHealthChecksDescription": "Monitoruj zdrowie tego celu. Możesz monitorować inny punkt końcowy niż docelowy w razie potrzeby.", + "healthScheme": "Metoda", + "healthSelectScheme": "Wybierz metodę", + "healthCheckPath": "Ścieżka", + "healthHostname": "IP / Nazwa hosta", "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckPathDescription": "Ścieżka do sprawdzania stanu zdrowia.", + "healthyIntervalSeconds": "Interwał Zdrowy", + "unhealthyIntervalSeconds": "Interwał Niezdrowy", + "IntervalSeconds": "Interwał Zdrowy", + "timeoutSeconds": "Limit Czasu", + "timeIsInSeconds": "Czas w sekundach", + "retryAttempts": "Próby Ponowienia", + "expectedResponseCodes": "Oczekiwane Kody Odpowiedzi", + "expectedResponseCodesDescription": "Kod statusu HTTP, który wskazuje zdrowy status. Jeśli pozostanie pusty, uznaje się 200-300 za zdrowy.", "customHeaders": "Niestandardowe nagłówki", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Nagłówki oddzielone: Nazwa nagłówka: wartość", + "headersValidationError": "Nagłówki muszą być w formacie: Nazwa nagłówka: wartość.", + "saveHealthCheck": "Zapisz Kontrolę Zdrowia", + "healthCheckSaved": "Kontrola Zdrowia Zapisana", + "healthCheckSavedDescription": "Konfiguracja kontroli zdrowia została zapisana pomyślnie", + "healthCheckError": "Błąd Kontroli Zdrowia", + "healthCheckErrorDescription": "Wystąpił błąd podczas zapisywania konfiguracji kontroli zdrowia", + "healthCheckPathRequired": "Ścieżka kontroli zdrowia jest wymagana", + "healthCheckMethodRequired": "Metoda HTTP jest wymagana", + "healthCheckIntervalMin": "Interwał sprawdzania musi wynosić co najmniej 5 sekund", + "healthCheckTimeoutMin": "Limit czasu musi wynosić co najmniej 1 sekundę", + "healthCheckRetryMin": "Liczba prób ponowienia musi wynosić co najmniej 1", "httpMethod": "Metoda HTTP", "selectHttpMethod": "Wybierz metodę HTTP", "domainPickerSubdomainLabel": "Poddomena", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Wprowadź poddomenę, aby wyszukać i wybrać z dostępnych darmowych domen.", "domainPickerFreeDomains": "Darmowe domeny", "domainPickerSearchForAvailableDomains": "Szukaj dostępnych domen", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Uwaga: Darmowe domeny nie są obecnie dostępne dla instancji samodzielnie-hostowanych.", "resourceDomain": "Domena", "resourceEditDomain": "Edytuj domenę", "siteName": "Nazwa strony", @@ -1543,72 +1543,72 @@ "autoLoginError": "Błąd automatycznego logowania", "autoLoginErrorNoRedirectUrl": "Nie otrzymano URL przekierowania od dostawcy tożsamości.", "autoLoginErrorGeneratingUrl": "Nie udało się wygenerować URL uwierzytelniania.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Zarządzaj Samodzielnie-Hostingowane", + "remoteExitNodeDescription": "Zarządzaj węzłami w celu rozszerzenia połączenia z siecią", + "remoteExitNodes": "Węzły", + "searchRemoteExitNodes": "Szukaj węzłów...", + "remoteExitNodeAdd": "Dodaj węzeł", + "remoteExitNodeErrorDelete": "Błąd podczas usuwania węzła", + "remoteExitNodeQuestionRemove": "Czy na pewno chcesz usunąć węzeł {selectedNode} z organizacji?", + "remoteExitNodeMessageRemove": "Po usunięciu, węzeł nie będzie już dostępny.", + "remoteExitNodeMessageConfirm": "Aby potwierdzić, wpisz nazwę węzła poniżej.", + "remoteExitNodeConfirmDelete": "Potwierdź usunięcie węzła", + "remoteExitNodeDelete": "Usuń węzeł", + "sidebarRemoteExitNodes": "Węzły", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Utwórz węzeł", + "description": "Utwórz nowy węzeł, aby rozszerzyć połączenie z siecią", + "viewAllButton": "Zobacz wszystkie węzły", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Strategia Tworzenia", + "description": "Wybierz to, aby ręcznie skonfigurować węzeł lub wygenerować nowe poświadczenia.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Zaadoptuj Węzeł", + "description": "Wybierz to, jeśli masz już dane logowania dla węzła." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Generuj Klucze", + "description": "Wybierz to, jeśli chcesz wygenerować nowe klucze dla węzła" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Zaadoptuj Istniejący Węzeł", + "description": "Wprowadź dane logowania istniejącego węzła, który chcesz przyjąć", + "nodeIdLabel": "ID węzła", + "nodeIdDescription": "ID istniejącego węzła, który chcesz przyjąć", + "secretLabel": "Sekret", + "secretDescription": "Sekretny klucz istniejącego węzła", + "submitButton": "Przyjmij węzeł" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Wygenerowane Poświadczenia", + "description": "Użyj tych danych logowania, aby skonfigurować węzeł", + "nodeIdTitle": "ID węzła", + "secretTitle": "Sekret", + "saveCredentialsTitle": "Dodaj Poświadczenia do Konfiguracji", + "saveCredentialsDescription": "Dodaj te poświadczenia do pliku konfiguracyjnego swojego samodzielnie-hostowanego węzła Pangolin, aby zakończyć połączenie.", + "submitButton": "Utwórz węzeł" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "Identyfikator węzła i sekret są wymagane podczas przyjmowania istniejącego węzła" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Nie udało się załadować domyślnych ustawień", + "defaultsNotLoaded": "Domyślne ustawienia nie zostały załadowane", + "createFailed": "Nie udało się utworzyć węzła" }, "success": { - "created": "Node created successfully" + "created": "Węzeł utworzony pomyślnie" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Wybór węzła", + "remoteExitNodeSelectionDescription": "Wybierz węzeł do przekierowania ruchu dla tej lokalnej witryny", + "remoteExitNodeRequired": "Węzeł musi być wybrany dla lokalnych witryn", + "noRemoteExitNodesAvailable": "Brak dostępnych węzłów", + "noRemoteExitNodesAvailableDescription": "Węzły nie są dostępne dla tej organizacji. Utwórz węzeł, aby używać lokalnych witryn.", + "exitNode": "Węzeł Wyjściowy", + "country": "Kraj", + "rulesMatchCountry": "Obecnie bazuje na adresie IP źródła", "managedSelfHosted": { "title": "Zarządzane Samodzielnie-Hostingowane", "description": "Większa niezawodność i niska konserwacja serwera Pangolin z dodatkowymi dzwonkami i sygnałami", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Wykryto międzynarodową domenę", "willbestoredas": "Będą przechowywane jako:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Określ jak role są przypisywane do użytkowników podczas logowania się, gdy automatyczne świadczenie jest włączone.", + "selectRole": "Wybierz rolę", + "roleMappingExpression": "Wyrażenie", + "selectRolePlaceholder": "Wybierz rolę", + "selectRoleDescription": "Wybierz rolę do przypisania wszystkim użytkownikom od tego dostawcy tożsamości", + "roleMappingExpressionDescription": "Wprowadź wyrażenie JMESŚcieżki, aby wyodrębnić informacje o roli z tokenu ID", + "idpTenantIdRequired": "ID lokatora jest wymagane", + "invalidValue": "Nieprawidłowa wartość", + "idpTypeLabel": "Typ dostawcy tożsamości", + "roleMappingExpressionPlaceholder": "np. zawiera(grupy, 'admin') && 'Admin' || 'Członek'", + "idpGoogleConfiguration": "Konfiguracja Google", + "idpGoogleConfigurationDescription": "Skonfiguruj swoje poświadczenia Google OAuth2", + "idpGoogleClientIdDescription": "Twój identyfikator klienta Google OAuth2", + "idpGoogleClientSecretDescription": "Twój klucz klienta Google OAuth2", + "idpAzureConfiguration": "Konfiguracja Azure Entra ID", + "idpAzureConfigurationDescription": "Skonfiguruj swoje dane logowania OAuth2 Azure Entra", + "idpTenantId": "ID Najemcy", + "idpTenantIdPlaceholder": "twoj-lokator", + "idpAzureTenantIdDescription": "Twój identyfikator dzierżawcy Azure (znaleziony w Podglądzie Azure Active Directory", + "idpAzureClientIdDescription": "Twój identyfikator klienta rejestracji aplikacji Azure", + "idpAzureClientSecretDescription": "Klucz tajny Twojego klienta rejestracji aplikacji Azure", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Konfiguracja Google", + "idpAzureConfigurationTitle": "Konfiguracja Azure Entra ID", + "idpTenantIdLabel": "ID Najemcy", + "idpAzureClientIdDescription2": "Twój identyfikator klienta rejestracji aplikacji Azure", + "idpAzureClientSecretDescription2": "Klucz tajny Twojego klienta rejestracji aplikacji Azure", "idpGoogleDescription": "Dostawca Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Podsieć", + "subnetDescription": "Podsieć dla konfiguracji sieci tej organizacji.", + "authPage": "Strona uwierzytelniania", + "authPageDescription": "Skonfiguruj stronę uwierzytelniania dla swojej organizacji", + "authPageDomain": "Domena strony uwierzytelniania", + "noDomainSet": "Nie ustawiono domeny", + "changeDomain": "Zmień domenę", + "selectDomain": "Wybierz domenę", + "restartCertificate": "Uruchom ponownie certyfikat", + "editAuthPageDomain": "Edytuj domenę strony uwierzytelniania", + "setAuthPageDomain": "Ustaw domenę strony uwierzytelniania", + "failedToFetchCertificate": "Nie udało się pobrać certyfikatu", + "failedToRestartCertificate": "Nie udało się ponownie uruchomić certyfikatu", + "addDomainToEnableCustomAuthPages": "Dodaj domenę, aby włączyć niestandardowe strony uwierzytelniania dla Twojej organizacji", + "selectDomainForOrgAuthPage": "Wybierz domenę dla strony uwierzytelniania organizacji", "domainPickerProvidedDomain": "Dostarczona domena", "domainPickerFreeProvidedDomain": "Darmowa oferowana domena", "domainPickerVerified": "Zweryfikowano", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" nie może być poprawne dla {domain}.", "domainPickerSubdomainSanitized": "Poddomena oczyszczona", "domainPickerSubdomainCorrected": "\"{sub}\" został skorygowany do \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Zaloguj się do swojej organizacji", + "orgAuthChooseIdpDescription": "Wybierz swojego dostawcę tożsamości, aby kontynuować", + "orgAuthNoIdpConfigured": "Ta organizacja nie ma skonfigurowanych żadnych dostawców tożsamości. Zamiast tego możesz zalogować się za pomocą swojej tożsamości Pangolin.", + "orgAuthSignInWithPangolin": "Zaloguj się używając Pangolin", + "subscriptionRequiredToUse": "Do korzystania z tej funkcji wymagana jest subskrypcja.", + "idpDisabled": "Dostawcy tożsamości są wyłączeni", + "orgAuthPageDisabled": "Strona autoryzacji organizacji jest wyłączona.", + "domainRestartedDescription": "Weryfikacja domeny zrestartowana pomyślnie", "resourceAddEntrypointsEditFile": "Edytuj plik: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Edytuj plik: docker-compose.yml", "emailVerificationRequired": "Weryfikacja adresu e-mail jest wymagana. Zaloguj się ponownie przez {dashboardUrl}/auth/login zakończył ten krok. Następnie wróć tutaj.", "twoFactorSetupRequired": "Konfiguracja uwierzytelniania dwuskładnikowego jest wymagana. Zaloguj się ponownie przez {dashboardUrl}/auth/login dokończ ten krok. Następnie wróć tutaj.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Wystąpił błąd podczas aktualizacji ustawień strony uwierzytelniania", + "authPageUpdated": "Strona uwierzytelniania została pomyślnie zaktualizowana", + "healthCheckNotAvailable": "Lokalny", + "rewritePath": "Przepis Ścieżki", + "rewritePathDescription": "Opcjonalnie przepisz ścieżkę przed przesłaniem do celu." } From 0f466515003ab319540beb9d57f7b2f46fd873b6 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:17:03 -0700 Subject: [PATCH 23/28] New translations en-us.json (Portuguese) --- messages/pt-PT.json | 644 ++++++++++++++++++++++---------------------- 1 file changed, 322 insertions(+), 322 deletions(-) diff --git a/messages/pt-PT.json b/messages/pt-PT.json index 3c5ae253..ff0c093d 100644 --- a/messages/pt-PT.json +++ b/messages/pt-PT.json @@ -8,25 +8,25 @@ "orgId": "ID da organização", "setupIdentifierMessage": "Este é o identificador exclusivo para sua organização. Isso é separado do nome de exibição.", "setupErrorIdentifier": "O ID da organização já existe. Por favor, escolha um diferente.", - "componentsErrorNoMemberCreate": "Você não é atualmente um membro de nenhuma organização. Crie uma organização para começar.", - "componentsErrorNoMember": "Você não é atualmente um membro de nenhuma organização.", + "componentsErrorNoMemberCreate": "Não é atualmente um membro de nenhuma organização. Crie uma organização para começar.", + "componentsErrorNoMember": "Não é atualmente um membro de nenhuma organização.", "welcome": "Bem-vindo ao Pangolin", "welcomeTo": "Bem-vindo ao", "componentsCreateOrg": "Criar uma organização", - "componentsMember": "Você é membro de {count, plural, =0 {nenhuma organização} one {uma organização} other {# organizações}}.", + "componentsMember": "É membro de {count, plural, =0 {nenhuma organização} one {uma organização} other {# organizações}}.", "componentsInvalidKey": "Chaves de licença inválidas ou expiradas detectadas. Siga os termos da licença para continuar usando todos os recursos.", - "dismiss": "Descartar", + "dismiss": "Rejeitar", "componentsLicenseViolation": "Violação de Licença: Este servidor está usando sites {usedSites} que excedem o limite licenciado de sites {maxSites} . Siga os termos da licença para continuar usando todos os recursos.", "componentsSupporterMessage": "Obrigado por apoiar o Pangolin como um {tier}!", - "inviteErrorNotValid": "Desculpe, mas parece que o convite que você está tentando acessar não foi aceito ou não é mais válido.", - "inviteErrorUser": "Lamentamos, mas parece que o convite que você está tentando acessar não é para este usuário.", - "inviteLoginUser": "Verifique se você está logado como o usuário correto.", - "inviteErrorNoUser": "Desculpe, mas parece que o convite que você está tentando acessar não é para um usuário que existe.", + "inviteErrorNotValid": "Desculpe, mas parece que o convite que está a tentar aceder não foi aceito ou não é mais válido.", + "inviteErrorUser": "Lamentamos, mas parece que o convite que está a tentar aceder não é para este utilizador.", + "inviteLoginUser": "Verifique se você está logado como o utilizador correto.", + "inviteErrorNoUser": "Desculpe, mas parece que o convite que está a tentar aceder não é para um utilizador que existe.", "inviteCreateUser": "Por favor, crie uma conta primeiro.", - "goHome": "Ir para casa", - "inviteLogInOtherUser": "Fazer login como um usuário diferente", + "goHome": "Voltar ao inicio", + "inviteLogInOtherUser": "Fazer login como um utilizador diferente", "createAnAccount": "Crie uma conta", - "inviteNotAccepted": "Convite não aceito", + "inviteNotAccepted": "Convite não aceite", "authCreateAccount": "Crie uma conta para começar", "authNoAccount": "Não possui uma conta?", "email": "e-mail", @@ -34,23 +34,23 @@ "confirmPassword": "Confirmar senha", "createAccount": "Criar conta", "viewSettings": "Visualizar configurações", - "delete": "excluir", + "delete": "apagar", "name": "Nome:", "online": "Disponível", "offline": "Desconectado", "site": "site", - "dataIn": "Dados em", + "dataIn": "Dados de entrada", "dataOut": "Dados de saída", "connectionType": "Tipo de conexão", "tunnelType": "Tipo de túnel", "local": "Localização", "edit": "Alterar", - "siteConfirmDelete": "Confirmar exclusão do site", + "siteConfirmDelete": "Confirmar que pretende apagar o site", "siteDelete": "Excluir site", "siteMessageRemove": "Uma vez removido, o site não estará mais acessível. Todos os recursos e alvos associados ao site também serão removidos.", "siteMessageConfirm": "Para confirmar, por favor, digite o nome do site abaixo.", "siteQuestionRemove": "Você tem certeza que deseja remover o site {selectedSite} da organização?", - "siteManageSites": "Gerenciar sites", + "siteManageSites": "Gerir sites", "siteDescription": "Permitir conectividade à sua rede através de túneis seguros", "siteCreate": "Criar site", "siteCreateDescription2": "Siga os passos abaixo para criar e conectar um novo site", @@ -79,10 +79,10 @@ "operatingSystem": "Sistema operacional", "commands": "Comandos", "recommended": "Recomendados", - "siteNewtDescription": "Para a melhor experiência do usuário, utilize Novo. Ele usa o WireGuard sob o capuz e permite que você aborde seus recursos privados através dos endereços LAN em sua rede privada do painel do Pangolin.", + "siteNewtDescription": "Para a melhor experiência do utilizador, utilize Novo. Ele usa o WireGuard sob o capuz e permite que você aborde seus recursos privados através dos endereços LAN em sua rede privada do painel do Pangolin.", "siteRunsInDocker": "Executa no Docker", "siteRunsInShell": "Executa na shell no macOS, Linux e Windows", - "siteErrorDelete": "Erro ao excluir site", + "siteErrorDelete": "Erro ao apagar site", "siteErrorUpdate": "Falha ao atualizar site", "siteErrorUpdateDescription": "Ocorreu um erro ao atualizar o site.", "siteUpdated": "Site atualizado", @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "A maneira mais fácil de criar um ponto de entrada na sua rede. Nenhuma configuração extra.", "siteWg": "WireGuard Básico", "siteWgDescription": "Use qualquer cliente do WireGuard para estabelecer um túnel. Configuração manual NAT é necessária.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Use qualquer cliente WireGuard para estabelecer um túnel. Configuração manual NAT necessária. SOMENTE FUNCIONA EM NODES AUTO-HOSPEDADOS", "siteLocalDescription": "Recursos locais apenas. Sem túneis.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Apenas recursos locais. Sem tunelamento. SOMENTE FUNCIONA EM NODES AUTO-HOSPEDADOS", "siteSeeAll": "Ver todos os sites", "siteTunnelDescription": "Determine como você deseja se conectar ao seu site", "siteNewtCredentials": "Credenciais Novas", @@ -105,12 +105,12 @@ "siteCredentialsSaveDescription": "Você só será capaz de ver esta vez. Certifique-se de copiá-lo para um lugar seguro.", "siteInfo": "Informações do Site", "status": "SItuação", - "shareTitle": "Gerenciar links de compartilhamento", + "shareTitle": "Gerir links partilhados", "shareDescription": "Criar links compartilháveis para conceder acesso temporário ou permanente aos seus recursos", "shareSearch": "Pesquisar links de compartilhamento...", "shareCreate": "Criar Link de Compartilhamento", - "shareErrorDelete": "Falha ao excluir o link", - "shareErrorDeleteMessage": "Ocorreu um erro ao excluir o link", + "shareErrorDelete": "Falha ao apagar o link", + "shareErrorDeleteMessage": "Ocorreu um erro ao apagar o link", "shareDeleted": "Link excluído", "shareDeletedDescription": "O link foi eliminado", "shareTokenDescription": "Seu token de acesso pode ser passado de duas maneiras: como um parâmetro de consulta ou nos cabeçalhos da solicitação. Estes devem ser passados do cliente em todas as solicitações para acesso autenticado.", @@ -127,13 +127,13 @@ "shareErrorFetchResourceDescription": "Ocorreu um erro ao obter os recursos", "shareErrorCreate": "Falha ao criar link de compartilhamento", "shareErrorCreateDescription": "Ocorreu um erro ao criar o link de compartilhamento", - "shareCreateDescription": "Qualquer um com este link pode acessar o recurso", + "shareCreateDescription": "Qualquer um com este link pode aceder o recurso", "shareTitleOptional": "Título (opcional)", "expireIn": "Expira em", "neverExpire": "Nunca expirar", - "shareExpireDescription": "Tempo de expiração é quanto tempo o link será utilizável e oferecerá acesso ao recurso. Após este tempo, o link não funcionará mais, e os usuários que usaram este link perderão acesso ao recurso.", + "shareExpireDescription": "Tempo de expiração é quanto tempo o link será utilizável e oferecerá acesso ao recurso. Após este tempo, o link não funcionará mais, e os utilizadores que usaram este link perderão acesso ao recurso.", "shareSeeOnce": "Você só poderá ver este link uma vez. Certifique-se de copiá-lo.", - "shareAccessHint": "Qualquer um com este link pode acessar o recurso. Compartilhe com cuidado.", + "shareAccessHint": "Qualquer um com este link pode aceder o recurso. Compartilhe com cuidado.", "shareTokenUsage": "Ver Uso do Token de Acesso", "createLink": "Criar Link", "resourcesNotFound": "Nenhum recurso encontrado", @@ -145,11 +145,11 @@ "expires": "Expira", "never": "nunca", "shareErrorSelectResource": "Por favor, selecione um recurso", - "resourceTitle": "Gerenciar Recursos", + "resourceTitle": "Gerir Recursos", "resourceDescription": "Crie proxies seguros para seus aplicativos privados", "resourcesSearch": "Procurar recursos...", "resourceAdd": "Adicionar Recurso", - "resourceErrorDelte": "Erro ao excluir recurso", + "resourceErrorDelte": "Erro ao apagar recurso", "authentication": "Autenticação", "protected": "Protegido", "notProtected": "Não Protegido", @@ -159,7 +159,7 @@ "resourceHTTP": "Recurso HTTPS", "resourceHTTPDescription": "O proxy solicita ao seu aplicativo via HTTPS usando um subdomínio ou domínio base.", "resourceRaw": "Recurso TCP/UDP bruto", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "O proxy solicita ao seu aplicativo sobre TCP/UDP usando um número de porta.", "resourceCreate": "Criar Recurso", "resourceCreateDescription": "Siga os passos abaixo para criar um novo recurso", "resourceSeeAll": "Ver todos os recursos", @@ -168,12 +168,12 @@ "siteSelect": "Selecionar site", "siteSearch": "Procurar no site", "siteNotFound": "Nenhum site encontrado.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Selecionar país", + "searchCountries": "Buscar países...", + "noCountryFound": "Nenhum país encontrado.", "siteSelectionDescription": "Este site fornecerá conectividade ao destino.", "resourceType": "Tipo de Recurso", - "resourceTypeDescription": "Determine como você deseja acessar seu recurso", + "resourceTypeDescription": "Determine como você deseja aceder seu recurso", "resourceHTTPSSettings": "Configurações de HTTPS", "resourceHTTPSSettingsDescription": "Configure como seu recurso será acessado por HTTPS", "domainType": "Tipo de domínio", @@ -195,7 +195,7 @@ "resourceBack": "Voltar aos recursos", "resourceGoTo": "Ir para o Recurso", "resourceDelete": "Excluir Recurso", - "resourceDeleteConfirm": "Confirmar exclusão de recurso", + "resourceDeleteConfirm": "Confirmar que pretende apagar o recurso", "visibility": "Visibilidade", "enabled": "Ativado", "disabled": "Desabilitado", @@ -211,14 +211,14 @@ "passToAuth": "Passar para Autenticação", "orgSettingsDescription": "Configurar as configurações gerais da sua organização", "orgGeneralSettings": "Configurações da organização", - "orgGeneralSettingsDescription": "Gerencie os detalhes e a configuração da sua organização", - "saveGeneralSettings": "Salvar configurações gerais", - "saveSettings": "Salvar Configurações", + "orgGeneralSettingsDescription": "Gerir os detalhes e a configuração da sua organização", + "saveGeneralSettings": "Guardar configurações gerais", + "saveSettings": "Guardar Configurações", "orgDangerZone": "Zona de Perigo", "orgDangerZoneDescription": "Uma vez que você exclui esta organização, não há volta. Por favor, tenha certeza.", "orgDelete": "Excluir Organização", - "orgDeleteConfirm": "Confirmar exclusão da organização", - "orgMessageRemove": "Esta ação é irreversível e excluirá todos os dados associados.", + "orgDeleteConfirm": "Confirmar que pretende apagar a organização", + "orgMessageRemove": "Esta ação é irreversível e apagará todos os dados associados.", "orgMessageConfirm": "Para confirmar, digite o nome da organização abaixo.", "orgQuestionRemove": "Tem certeza que deseja remover a organização {selectedOrg}?", "orgUpdated": "Organização atualizada", @@ -227,29 +227,29 @@ "orgErrorUpdateMessage": "Ocorreu um erro ao atualizar a organização.", "orgErrorFetch": "Falha ao buscar organizações", "orgErrorFetchMessage": "Ocorreu um erro ao listar suas organizações", - "orgErrorDelete": "Falha ao excluir organização", - "orgErrorDeleteMessage": "Ocorreu um erro ao excluir a organização.", + "orgErrorDelete": "Falha ao apagar organização", + "orgErrorDeleteMessage": "Ocorreu um erro ao apagar a organização.", "orgDeleted": "Organização excluída", "orgDeletedMessage": "A organização e seus dados foram excluídos.", "orgMissing": "ID da Organização Ausente", "orgMissingMessage": "Não é possível regenerar o convite sem um ID de organização.", - "accessUsersManage": "Gerenciar Usuários", - "accessUsersDescription": "Convidar usuários e adicioná-los a funções para gerenciar o acesso à sua organização", - "accessUsersSearch": "Procurar usuários...", + "accessUsersManage": "Gerir Utilizadores", + "accessUsersDescription": "Convidar utilizadores e adicioná-los a funções para gerir o acesso à sua organização", + "accessUsersSearch": "Procurar utilizadores...", "accessUserCreate": "Criar Usuário", - "accessUserRemove": "Remover usuário", + "accessUserRemove": "Remover utilizador", "username": "Usuário:", "identityProvider": "Provedor de Identidade", "role": "Funções", "nameRequired": "O nome é obrigatório", - "accessRolesManage": "Gerenciar Funções", - "accessRolesDescription": "Configurar funções para gerenciar o acesso à sua organização", + "accessRolesManage": "Gerir Funções", + "accessRolesDescription": "Configurar funções para gerir o acesso à sua organização", "accessRolesSearch": "Pesquisar funções...", "accessRolesAdd": "Adicionar função", "accessRoleDelete": "Excluir Papel", "description": "Descrição:", "inviteTitle": "Convites Abertos", - "inviteDescription": "Gerencie seus convites para outros usuários", + "inviteDescription": "Gerir seus convites para outros utilizadores", "inviteSearch": "Procurar convites...", "minutes": "minutos", "hours": "horas", @@ -267,7 +267,7 @@ "apiKeysGeneralSettings": "Permissões", "apiKeysGeneralSettingsDescription": "Determine o que esta chave API pode fazer", "apiKeysList": "Sua Chave API", - "apiKeysSave": "Salvar Sua Chave API", + "apiKeysSave": "Guardar Sua Chave API", "apiKeysSaveDescription": "Você só poderá ver isto uma vez. Certifique-se de copiá-la para um local seguro.", "apiKeysInfo": "Sua chave API é:", "apiKeysConfirmCopy": "Eu copiei a chave API", @@ -280,33 +280,33 @@ "apiKeysPermissionsUpdatedDescription": "As permissões foram atualizadas.", "apiKeysPermissionsGeneralSettings": "Permissões", "apiKeysPermissionsGeneralSettingsDescription": "Determine o que esta chave API pode fazer", - "apiKeysPermissionsSave": "Salvar Permissões", + "apiKeysPermissionsSave": "Guardar Permissões", "apiKeysPermissionsTitle": "Permissões", "apiKeys": "Chaves API", "searchApiKeys": "Pesquisar chaves API...", "apiKeysAdd": "Gerar Chave API", - "apiKeysErrorDelete": "Erro ao excluir chave API", - "apiKeysErrorDeleteMessage": "Erro ao excluir chave API", + "apiKeysErrorDelete": "Erro ao apagar chave API", + "apiKeysErrorDeleteMessage": "Erro ao apagar chave API", "apiKeysQuestionRemove": "Tem certeza que deseja remover a chave API {selectedApiKey} da organização?", "apiKeysMessageRemove": "Uma vez removida, a chave API não poderá mais ser utilizada.", "apiKeysMessageConfirm": "Para confirmar, por favor digite o nome da chave API abaixo.", "apiKeysDeleteConfirm": "Confirmar Exclusão da Chave API", "apiKeysDelete": "Excluir Chave API", - "apiKeysManage": "Gerenciar Chaves API", + "apiKeysManage": "Gerir Chaves API", "apiKeysDescription": "As chaves API são usadas para autenticar com a API de integração", "apiKeysSettings": "Configurações de {apiKeyName}", - "userTitle": "Gerenciar Todos os Usuários", - "userDescription": "Visualizar e gerenciar todos os usuários no sistema", + "userTitle": "Gerir Todos os Utilizadores", + "userDescription": "Visualizar e gerir todos os utilizadores no sistema", "userAbount": "Sobre a Gestão de Usuário", - "userAbountDescription": "Esta tabela exibe todos os objetos root do usuário. Cada usuário pode pertencer a várias organizações. Remover um usuário de uma organização não exclui seu objeto de usuário raiz - ele permanecerá no sistema. Para remover completamente um usuário do sistema, você deve excluir seu objeto raiz usando a ação de excluir nesta tabela.", - "userServer": "Usuários do Servidor", - "userSearch": "Pesquisar usuários do servidor...", - "userErrorDelete": "Erro ao excluir usuário", + "userAbountDescription": "Esta tabela exibe todos os objetos root do utilizador. Cada utilizador pode pertencer a várias organizações. Remover um utilizador de uma organização não exclui seu objeto de utilizador raiz - ele permanecerá no sistema. Para remover completamente um utilizador do sistema, você deve apagar seu objeto raiz usando a ação de apagar nesta tabela.", + "userServer": "Utilizadores do Servidor", + "userSearch": "Pesquisar utilizadores do servidor...", + "userErrorDelete": "Erro ao apagar utilizador", "userDeleteConfirm": "Confirmar Exclusão do Usuário", - "userDeleteServer": "Excluir usuário do servidor", - "userMessageRemove": "O usuário será removido de todas as organizações e será completamente removido do servidor.", - "userMessageConfirm": "Para confirmar, por favor digite o nome do usuário abaixo.", - "userQuestionRemove": "Tem certeza que deseja excluir o {selectedUser} permanentemente do servidor?", + "userDeleteServer": "Excluir utilizador do servidor", + "userMessageRemove": "O utilizador será removido de todas as organizações e será completamente removido do servidor.", + "userMessageConfirm": "Para confirmar, por favor digite o nome do utilizador abaixo.", + "userQuestionRemove": "Tem certeza que deseja apagar o {selectedUser} permanentemente do servidor?", "licenseKey": "Chave de Licença", "valid": "Válido", "numberOfSites": "Número de sites", @@ -317,8 +317,8 @@ "licenseTermsAgree": "Você deve concordar com os termos da licença", "licenseErrorKeyLoad": "Falha ao carregar chaves de licença", "licenseErrorKeyLoadDescription": "Ocorreu um erro ao carregar a chave da licença.", - "licenseErrorKeyDelete": "Falha ao excluir chave de licença", - "licenseErrorKeyDeleteDescription": "Ocorreu um erro ao excluir a chave de licença.", + "licenseErrorKeyDelete": "Falha ao apagar chave de licença", + "licenseErrorKeyDeleteDescription": "Ocorreu um erro ao apagar a chave de licença.", "licenseKeyDeleted": "Chave da licença excluída", "licenseKeyDeletedDescription": "A chave da licença foi excluída.", "licenseErrorKeyActivate": "Falha ao ativar a chave de licença", @@ -339,13 +339,13 @@ "fossorialLicense": "Ver Termos e Condições de Assinatura e Licença Fossorial", "licenseMessageRemove": "Isto irá remover a chave da licença e todas as permissões associadas concedidas por ela.", "licenseMessageConfirm": "Para confirmar, por favor, digite a chave de licença abaixo.", - "licenseQuestionRemove": "Tem certeza que deseja excluir a chave de licença {selectedKey}?", + "licenseQuestionRemove": "Tem certeza que deseja apagar a chave de licença {selectedKey}?", "licenseKeyDelete": "Excluir Chave de Licença", - "licenseKeyDeleteConfirm": "Confirmar exclusão da chave de licença", - "licenseTitle": "Gerenciar Status da Licença", - "licenseTitleDescription": "Visualizar e gerenciar chaves de licença no sistema", + "licenseKeyDeleteConfirm": "Confirmar que pretende apagar a chave de licença", + "licenseTitle": "Gerir Status da Licença", + "licenseTitleDescription": "Visualizar e gerir chaves de licença no sistema", "licenseHost": "Licença do host", - "licenseHostDescription": "Gerenciar a chave de licença principal do host.", + "licenseHostDescription": "Gerir a chave de licença principal do host.", "licensedNot": "Não Licenciado", "hostId": "ID do host", "licenseReckeckAll": "Verifique novamente todas as chaves", @@ -373,37 +373,37 @@ "inviteRemoved": "Convite removido", "inviteRemovedDescription": "O convite para {email} foi removido.", "inviteQuestionRemove": "Tem certeza de que deseja remover o convite {email}?", - "inviteMessageRemove": "Uma vez removido, este convite não será mais válido. Você sempre pode convidar o usuário novamente mais tarde.", + "inviteMessageRemove": "Uma vez removido, este convite não será mais válido. Você sempre pode convidar o utilizador novamente mais tarde.", "inviteMessageConfirm": "Para confirmar, digite o endereço de e-mail do convite abaixo.", "inviteQuestionRegenerate": "Tem certeza que deseja regenerar o convite{email, plural, ='' {}, other { para #}}? Isso irá revogar o convite anterior.", "inviteRemoveConfirm": "Confirmar Remoção do Convite", "inviteRegenerated": "Convite Regenerado", "inviteSent": "Um novo convite foi enviado para {email}.", - "inviteSentEmail": "Enviar notificação por e-mail ao usuário", + "inviteSentEmail": "Enviar notificação por e-mail ao utilizador", "inviteGenerate": "Um novo convite foi gerado para {email}.", "inviteDuplicateError": "Convite Duplicado", - "inviteDuplicateErrorDescription": "Já existe um convite para este usuário.", + "inviteDuplicateErrorDescription": "Já existe um convite para este utilizador.", "inviteRateLimitError": "Limite de Taxa Excedido", - "inviteRateLimitErrorDescription": "Você excedeu o limite de 3 regenerações por hora. Por favor, tente novamente mais tarde.", + "inviteRateLimitErrorDescription": "Excedeu o limite de 3 regenerações por hora. Por favor, tente novamente mais tarde.", "inviteRegenerateError": "Falha ao Regenerar Convite", "inviteRegenerateErrorDescription": "Ocorreu um erro ao regenerar o convite.", "inviteValidityPeriod": "Período de Validade", "inviteValidityPeriodSelect": "Selecione o período de validade", - "inviteRegenerateMessage": "O convite foi regenerado. O usuário deve acessar o link abaixo para aceitar o convite.", + "inviteRegenerateMessage": "O convite foi regenerado. O utilizador deve aceder o link abaixo para aceitar o convite.", "inviteRegenerateButton": "Regenerar", "expiresAt": "Expira em", "accessRoleUnknown": "Função Desconhecida", "placeholder": "Espaço reservado", - "userErrorOrgRemove": "Falha ao remover usuário", - "userErrorOrgRemoveDescription": "Ocorreu um erro ao remover o usuário.", + "userErrorOrgRemove": "Falha ao remover utilizador", + "userErrorOrgRemoveDescription": "Ocorreu um erro ao remover o utilizador.", "userOrgRemoved": "Usuário removido", - "userOrgRemovedDescription": "O usuário {email} foi removido da organização.", + "userOrgRemovedDescription": "O utilizador {email} foi removido da organização.", "userQuestionOrgRemove": "Tem certeza que deseja remover {email} da organização?", - "userMessageOrgRemove": "Uma vez removido, este usuário não terá mais acesso à organização. Você sempre pode reconvidá-lo depois, mas eles precisarão aceitar o convite novamente.", - "userMessageOrgConfirm": "Para confirmar, digite o nome do usuário abaixo.", + "userMessageOrgRemove": "Uma vez removido, este utilizador não terá mais acesso à organização. Você sempre pode reconvidá-lo depois, mas eles precisarão aceitar o convite novamente.", + "userMessageOrgConfirm": "Para confirmar, digite o nome do utilizador abaixo.", "userRemoveOrgConfirm": "Confirmar Remoção do Usuário", "userRemoveOrg": "Remover Usuário da Organização", - "users": "Usuários", + "users": "Utilizadores", "accessRoleMember": "Membro", "accessRoleOwner": "Proprietário", "userConfirmed": "Confirmado", @@ -411,7 +411,7 @@ "emailInvalid": "Endereço de email inválido", "inviteValidityDuration": "Por favor, selecione uma duração", "accessRoleSelectPlease": "Por favor, selecione uma função", - "usernameRequired": "Nome de usuário é obrigatório", + "usernameRequired": "Nome de utilizador é obrigatório", "idpSelectPlease": "Por favor, selecione um provedor de identidade", "idpGenericOidc": "Provedor genérico OAuth2/OIDC.", "accessRoleErrorFetch": "Falha ao buscar funções", @@ -419,51 +419,51 @@ "idpErrorFetch": "Falha ao buscar provedores de identidade", "idpErrorFetchDescription": "Ocorreu um erro ao buscar provedores de identidade", "userErrorExists": "Usuário já existe", - "userErrorExistsDescription": "Este usuário já é membro da organização.", - "inviteError": "Falha ao convidar usuário", - "inviteErrorDescription": "Ocorreu um erro ao convidar o usuário", + "userErrorExistsDescription": "Este utilizador já é membro da organização.", + "inviteError": "Falha ao convidar utilizador", + "inviteErrorDescription": "Ocorreu um erro ao convidar o utilizador", "userInvited": "Usuário convidado", - "userInvitedDescription": "O usuário foi convidado com sucesso.", - "userErrorCreate": "Falha ao criar usuário", - "userErrorCreateDescription": "Ocorreu um erro ao criar o usuário", + "userInvitedDescription": "O utilizador foi convidado com sucesso.", + "userErrorCreate": "Falha ao criar utilizador", + "userErrorCreateDescription": "Ocorreu um erro ao criar o utilizador", "userCreated": "Usuário criado", - "userCreatedDescription": "O usuário foi criado com sucesso.", + "userCreatedDescription": "O utilizador foi criado com sucesso.", "userTypeInternal": "Usuário Interno", - "userTypeInternalDescription": "Convidar um usuário para se juntar à sua organização diretamente.", + "userTypeInternalDescription": "Convidar um utilizador para se juntar à sua organização diretamente.", "userTypeExternal": "Usuário Externo", - "userTypeExternalDescription": "Criar um usuário com um provedor de identidade externo.", - "accessUserCreateDescription": "Siga os passos abaixo para criar um novo usuário", - "userSeeAll": "Ver Todos os Usuários", + "userTypeExternalDescription": "Criar um utilizador com um provedor de identidade externo.", + "accessUserCreateDescription": "Siga os passos abaixo para criar um novo utilizador", + "userSeeAll": "Ver Todos os Utilizadores", "userTypeTitle": "Tipo de Usuário", - "userTypeDescription": "Determine como você deseja criar o usuário", + "userTypeDescription": "Determine como você deseja criar o utilizador", "userSettings": "Informações do Usuário", - "userSettingsDescription": "Insira os detalhes para o novo usuário", - "inviteEmailSent": "Enviar e-mail de convite para o usuário", + "userSettingsDescription": "Insira os detalhes para o novo utilizador", + "inviteEmailSent": "Enviar e-mail de convite para o utilizador", "inviteValid": "Válido Por", "selectDuration": "Selecionar duração", "accessRoleSelect": "Selecionar função", - "inviteEmailSentDescription": "Um e-mail foi enviado ao usuário com o link de acesso abaixo. Eles devem acessar o link para aceitar o convite.", - "inviteSentDescription": "O usuário foi convidado. Eles devem acessar o link abaixo para aceitar o convite.", + "inviteEmailSentDescription": "Um e-mail foi enviado ao utilizador com o link de acesso abaixo. Eles devem aceder ao link para aceitar o convite.", + "inviteSentDescription": "O utilizador foi convidado. Eles devem aceder ao link abaixo para aceitar o convite.", "inviteExpiresIn": "O convite expirará em {days, plural, one {# dia} other {# dias}}.", "idpTitle": "Informações Gerais", - "idpSelect": "Selecione o provedor de identidade para o usuário externo", - "idpNotConfigured": "Nenhum provedor de identidade está configurado. Configure um provedor de identidade antes de criar usuários externos.", - "usernameUniq": "Isto deve corresponder ao nome de usuário único que existe no provedor de identidade selecionado.", + "idpSelect": "Selecione o provedor de identidade para o utilizador externo", + "idpNotConfigured": "Nenhum provedor de identidade está configurado. Configure um provedor de identidade antes de criar utilizadores externos.", + "usernameUniq": "Isto deve corresponder ao nome de utilizador único que existe no provedor de identidade selecionado.", "emailOptional": "E-mail (Opcional)", "nameOptional": "Nome (Opcional)", - "accessControls": "Controles de Acesso", - "userDescription2": "Gerenciar as configurações deste usuário", - "accessRoleErrorAdd": "Falha ao adicionar usuário à função", - "accessRoleErrorAddDescription": "Ocorreu um erro ao adicionar usuário à função.", + "accessControls": "Controlos de Acesso", + "userDescription2": "Gerir as configurações deste utilizador", + "accessRoleErrorAdd": "Falha ao adicionar utilizador à função", + "accessRoleErrorAddDescription": "Ocorreu um erro ao adicionar utilizador à função.", "userSaved": "Usuário salvo", - "userSavedDescription": "O usuário foi atualizado.", + "userSavedDescription": "O utilizador foi atualizado.", "autoProvisioned": "Auto provisionado", - "autoProvisionedDescription": "Permitir que este usuário seja gerenciado automaticamente pelo provedor de identidade", - "accessControlsDescription": "Gerencie o que este usuário pode acessar e fazer na organização", - "accessControlsSubmit": "Salvar Controles de Acesso", + "autoProvisionedDescription": "Permitir que este utilizador seja gerido automaticamente pelo provedor de identidade", + "accessControlsDescription": "Gerir o que este utilizador pode aceder e fazer na organização", + "accessControlsSubmit": "Guardar Controlos de Acesso", "roles": "Funções", - "accessUsersRoles": "Gerenciar Usuários e Funções", - "accessUsersRolesDescription": "Convide usuários e adicione-os a funções para gerenciar o acesso à sua organização", + "accessUsersRoles": "Gerir Utilizadores e Funções", + "accessUsersRolesDescription": "Convide utilizadores e adicione-os a funções para gerir o acesso à sua organização", "key": "Chave", "createdAt": "Criado Em", "proxyErrorInvalidHeader": "Valor do cabeçalho Host personalizado inválido. Use o formato de nome de domínio ou salve vazio para remover o cabeçalho Host personalizado.", @@ -497,7 +497,7 @@ "targetTlsSettingsAdvanced": "Configurações TLS Avançadas", "targetTlsSni": "Nome do Servidor TLS (SNI)", "targetTlsSniDescription": "O Nome do Servidor TLS para usar para SNI. Deixe vazio para usar o padrão.", - "targetTlsSubmit": "Salvar Configurações", + "targetTlsSubmit": "Guardar Configurações", "targets": "Configuração de Alvos", "targetsDescription": "Configure alvos para rotear tráfego para seus serviços de backend", "targetStickySessions": "Ativar Sessões Persistentes", @@ -506,12 +506,12 @@ "targetSubmit": "Adicionar Alvo", "targetNoOne": "Sem alvos. Adicione um alvo usando o formulário.", "targetNoOneDescription": "Adicionar mais de um alvo acima habilitará o balanceamento de carga.", - "targetsSubmit": "Salvar Alvos", + "targetsSubmit": "Guardar Alvos", "proxyAdditional": "Configurações Adicionais de Proxy", "proxyAdditionalDescription": "Configure como seu recurso lida com configurações de proxy", "proxyCustomHeader": "Cabeçalho Host Personalizado", "proxyCustomHeaderDescription": "O cabeçalho host para definir ao fazer proxy de requisições. Deixe vazio para usar o padrão.", - "proxyAdditionalSubmit": "Salvar Configurações de Proxy", + "proxyAdditionalSubmit": "Guardar Configurações de Proxy", "subnetMaskErrorInvalid": "Máscara de subnet inválida. Deve estar entre 0 e 32.", "ipAddressErrorInvalidFormat": "Formato de endereço IP inválido", "ipAddressErrorInvalidOctet": "Octeto de endereço IP inválido", @@ -564,7 +564,7 @@ "ruleSubmit": "Adicionar Regra", "rulesNoOne": "Sem regras. Adicione uma regra usando o formulário.", "rulesOrder": "As regras são avaliadas por prioridade em ordem ascendente.", - "rulesSubmit": "Salvar Regras", + "rulesSubmit": "Guardar Regras", "resourceErrorCreate": "Erro ao criar recurso", "resourceErrorCreateDescription": "Ocorreu um erro ao criar o recurso", "resourceErrorCreateMessage": "Erro ao criar recurso:", @@ -579,7 +579,7 @@ "resourcesDescription": "Recursos são proxies para aplicações executando em sua rede privada. Crie um recurso para qualquer serviço HTTP/HTTPS ou TCP/UDP bruto em sua rede privada. Cada recurso deve estar conectado a um site para habilitar conectividade privada e segura através de um túnel WireGuard criptografado.", "resourcesWireGuardConnect": "Conectividade segura com criptografia WireGuard", "resourcesMultipleAuthenticationMethods": "Configure múltiplos métodos de autenticação", - "resourcesUsersRolesAccess": "Controle de acesso baseado em usuários e funções", + "resourcesUsersRolesAccess": "Controle de acesso baseado em utilizadores e funções", "resourcesErrorUpdate": "Falha ao alternar recurso", "resourcesErrorUpdateDescription": "Ocorreu um erro ao atualizar o recurso", "access": "Acesso", @@ -609,7 +609,7 @@ "pangolinSettings": "Configurações - Pangolin", "accessRoleYour": "Sua função:", "accessRoleSelect2": "Selecionar uma função", - "accessUserSelect": "Selecionar um usuário", + "accessUserSelect": "Selecionar um utilizador", "otpEmailEnter": "Digite um e-mail", "otpEmailEnterDescription": "Pressione enter para adicionar um e-mail após digitá-lo no campo de entrada.", "otpEmailErrorInvalid": "Endereço de e-mail inválido. O caractere curinga (*) deve ser a parte local inteira.", @@ -619,8 +619,8 @@ "otpEmailTitleDescription": "Requer autenticação baseada em e-mail para acesso ao recurso", "otpEmailWhitelist": "Lista de E-mails Permitidos", "otpEmailWhitelistList": "E-mails na Lista Permitida", - "otpEmailWhitelistListDescription": "Apenas usuários com estes endereços de e-mail poderão acessar este recurso. Eles serão solicitados a inserir uma senha única enviada para seu e-mail. Caracteres curinga (*@example.com) podem ser usados para permitir qualquer endereço de e-mail de um domínio.", - "otpEmailWhitelistSave": "Salvar Lista Permitida", + "otpEmailWhitelistListDescription": "Apenas utilizadores com estes endereços de e-mail poderão aceder este recurso. Eles serão solicitados a inserir uma senha única enviada para seu e-mail. Caracteres curinga (*@example.com) podem ser usados para permitir qualquer endereço de e-mail de um domínio.", + "otpEmailWhitelistSave": "Guardar Lista Permitida", "passwordAdd": "Adicionar Senha", "passwordRemove": "Remover Senha", "pincodeAdd": "Adicionar Código PIN", @@ -660,14 +660,14 @@ "resourcePincodeSetupDescription": "O código PIN do recurso foi definido com sucesso", "resourcePincodeSetupTitle": "Definir Código PIN", "resourcePincodeSetupTitleDescription": "Defina um código PIN para proteger este recurso", - "resourceRoleDescription": "Administradores sempre podem acessar este recurso.", - "resourceUsersRoles": "Usuários e Funções", - "resourceUsersRolesDescription": "Configure quais usuários e funções podem visitar este recurso", - "resourceUsersRolesSubmit": "Salvar Usuários e Funções", + "resourceRoleDescription": "Administradores sempre podem aceder este recurso.", + "resourceUsersRoles": "Utilizadores e Funções", + "resourceUsersRolesDescription": "Configure quais utilizadores e funções podem visitar este recurso", + "resourceUsersRolesSubmit": "Guardar Utilizadores e Funções", "resourceWhitelistSave": "Salvo com sucesso", "resourceWhitelistSaveDescription": "As configurações da lista permitida foram salvas", "ssoUse": "Usar SSO da Plataforma", - "ssoUseDescription": "Os usuários existentes só precisarão fazer login uma vez para todos os recursos que tiverem isso habilitado.", + "ssoUseDescription": "Os utilizadores existentes só precisarão fazer login uma vez para todos os recursos que tiverem isso habilitado.", "proxyErrorInvalidPort": "Número da porta inválido", "subdomainErrorInvalid": "Subdomínio inválido", "domainErrorFetch": "Erro ao buscar domínios", @@ -693,7 +693,7 @@ "siteDestination": "Site de Destino", "searchSites": "Pesquisar sites", "accessRoleCreate": "Criar Função", - "accessRoleCreateDescription": "Crie uma nova função para agrupar usuários e gerenciar suas permissões.", + "accessRoleCreateDescription": "Crie uma nova função para agrupar utilizadores e gerir suas permissões.", "accessRoleCreateSubmit": "Criar Função", "accessRoleCreated": "Função criada", "accessRoleCreatedDescription": "A função foi criada com sucesso.", @@ -703,13 +703,13 @@ "accessRoleErrorRemove": "Falha ao remover função", "accessRoleErrorRemoveDescription": "Ocorreu um erro ao remover a função.", "accessRoleName": "Nome da Função", - "accessRoleQuestionRemove": "Você está prestes a excluir a função {name}. Você não pode desfazer esta ação.", + "accessRoleQuestionRemove": "Você está prestes a apagar a função {name}. Você não pode desfazer esta ação.", "accessRoleRemove": "Remover Função", "accessRoleRemoveDescription": "Remover uma função da organização", "accessRoleRemoveSubmit": "Remover Função", "accessRoleRemoved": "Função removida", "accessRoleRemovedDescription": "A função foi removida com sucesso.", - "accessRoleRequiredRemove": "Antes de excluir 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.", "manage": "Gerir", "sitesNotFound": "Nenhum site encontrado.", "pangolinServerAdmin": "Administrador do Servidor - Pangolin", @@ -919,8 +919,8 @@ "idpErrorNotFound": "IdP não encontrado", "inviteInvalid": "Convite Inválido", "inviteInvalidDescription": "O link do convite é inválido.", - "inviteErrorWrongUser": "O convite não é para este usuário", - "inviteErrorUserNotExists": "O usuário não existe. Por favor, crie uma conta primeiro.", + "inviteErrorWrongUser": "O convite não é para este utilizador", + "inviteErrorUserNotExists": "O utilizador não existe. Por favor, crie uma conta primeiro.", "inviteErrorLoginRequired": "Você deve estar logado para aceitar um convite", "inviteErrorExpired": "O convite pode ter expirado", "inviteErrorRevoked": "O convite pode ter sido revogado", @@ -935,7 +935,7 @@ "home": "Início", "accessControl": "Controle de Acesso", "settings": "Configurações", - "usersAll": "Todos os Usuários", + "usersAll": "Todos os Utilizadores", "license": "Licença", "pangolinDashboard": "Painel - Pangolin", "noResults": "Nenhum resultado encontrado.", @@ -988,8 +988,8 @@ "licenseTierProfessionalRequired": "Edição Profissional Necessária", "licenseTierProfessionalRequiredDescription": "Esta funcionalidade só está disponível na Edição Profissional.", "actionGetOrg": "Obter Organização", - "updateOrgUser": "Atualizar usuário Org", - "createOrgUser": "Criar usuário Org", + "updateOrgUser": "Atualizar utilizador Org", + "createOrgUser": "Criar utilizador Org", "actionUpdateOrg": "Atualizar Organização", "actionUpdateUser": "Atualizar Usuário", "actionGetUser": "Obter Usuário", @@ -1136,8 +1136,8 @@ "sidebarRoles": "Papéis", "sidebarShareableLinks": "Links compartilháveis", "sidebarApiKeys": "Chaves API", - "sidebarSettings": "Confirgurações", - "sidebarAllUsers": "Todos os usuários", + "sidebarSettings": "Configurações", + "sidebarAllUsers": "Todos os utilizadores", "sidebarIdentityProviders": "Provedores de identidade", "sidebarLicense": "Tipo:", "sidebarClients": "Clientes (Beta)", @@ -1190,7 +1190,7 @@ "loading": "Carregando", "restart": "Reiniciar", "domains": "Domínios", - "domainsDescription": "Gerencie domínios para sua organização", + "domainsDescription": "Gerir domínios para sua organização", "domainsSearch": "Pesquisar domínios...", "domainAdd": "Adicionar Domínio", "domainAddDescription": "Registre um novo domínio com sua organização", @@ -1218,7 +1218,7 @@ "pending": "Pendente", "sidebarBilling": "Faturamento", "billing": "Faturamento", - "orgBillingDescription": "Gerencie suas informações de faturamento e assinaturas", + "orgBillingDescription": "Gerir suas informações de faturação e assinaturas", "github": "GitHub", "pangolinHosted": "Hospedagem Pangolin", "fossorial": "Fossorial", @@ -1233,7 +1233,7 @@ "completeSetup": "Configuração Completa", "accountSetupSuccess": "Configuração da conta concluída! Bem-vindo ao Pangolin!", "documentation": "Documentação", - "saveAllSettings": "Salvar Todas as Configurações", + "saveAllSettings": "Guardar Todas as Configurações", "settingsUpdated": "Configurações atualizadas", "settingsUpdatedDescription": "Todas as configurações foram atualizadas com sucesso", "settingsErrorUpdate": "Falha ao atualizar configurações", @@ -1258,55 +1258,55 @@ "domainPickerSubdomain": "Subdomínio: {subdomain}", "domainPickerNamespace": "Namespace: {namespace}", "domainPickerShowMore": "Mostrar Mais", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Selecionar Região", + "regionSelectorInfo": "Selecionar uma região nos ajuda a fornecer melhor desempenho para sua localização. Você não precisa estar na mesma região que seu servidor.", + "regionSelectorPlaceholder": "Escolher uma região", + "regionSelectorComingSoon": "Em breve", + "billingLoadingSubscription": "Carregando assinatura...", + "billingFreeTier": "Plano Gratuito", + "billingWarningOverLimit": "Aviso: Você ultrapassou um ou mais limites de uso. Seus sites não se conectarão até você modificar sua assinatura ou ajustar seu uso.", + "billingUsageLimitsOverview": "Visão Geral dos Limites de Uso", + "billingMonitorUsage": "Monitore seu uso em relação aos limites configurados. Se precisar aumentar esses limites, entre em contato conosco support@fossorial.io.", + "billingDataUsage": "Uso de Dados", + "billingOnlineTime": "Tempo Online do Site", + "billingUsers": "Usuários Ativos", + "billingDomains": "Domínios Ativos", + "billingRemoteExitNodes": "Nodos Auto-Hospedados Ativos", + "billingNoLimitConfigured": "Nenhum limite configurado", + "billingEstimatedPeriod": "Período Estimado de Cobrança", + "billingIncludedUsage": "Uso Incluído", + "billingIncludedUsageDescription": "Uso incluído no seu plano de assinatura atual", + "billingFreeTierIncludedUsage": "Limites de uso do plano gratuito", + "billingIncluded": "incluído", + "billingEstimatedTotal": "Total Estimado:", + "billingNotes": "Notas", + "billingEstimateNote": "Esta é uma estimativa baseada no seu uso atual.", + "billingActualChargesMayVary": "As cobranças reais podem variar.", + "billingBilledAtEnd": "Sua cobrança será feita ao final do período de cobrança.", + "billingModifySubscription": "Modificar Assinatura", + "billingStartSubscription": "Iniciar Assinatura", + "billingRecurringCharge": "Cobrança Recorrente", + "billingManageSubscriptionSettings": "Gerenciar as configurações e preferências da sua assinatura", + "billingNoActiveSubscription": "Você não tem uma assinatura ativa. Inicie sua assinatura para aumentar os limites de uso.", + "billingFailedToLoadSubscription": "Falha ao carregar assinatura", + "billingFailedToLoadUsage": "Falha ao carregar uso", + "billingFailedToGetCheckoutUrl": "Falha ao obter URL de checkout", + "billingPleaseTryAgainLater": "Por favor, tente novamente mais tarde.", + "billingCheckoutError": "Erro de Checkout", + "billingFailedToGetPortalUrl": "Falha ao obter URL do portal", + "billingPortalError": "Erro do Portal", + "billingDataUsageInfo": "Você é cobrado por todos os dados transferidos através de seus túneis seguros quando conectado à nuvem. Isso inclui o tráfego de entrada e saída em todos os seus sites. Quando você atingir o seu limite, seus sites desconectarão até que você atualize seu plano ou reduza o uso. Os dados não serão cobrados ao usar os nós.", + "billingOnlineTimeInfo": "Cobrança de acordo com o tempo em que seus sites permanecem conectados à nuvem. Por exemplo, 44,640 minutos é igual a um site que roda 24/7 para um mês inteiro. Quando você atinge o seu limite, seus sites desconectarão até que você faça o upgrade do seu plano ou reduza o uso. O tempo não é cobrado ao usar nós.", + "billingUsersInfo": "Você será cobrado por cada usuário em sua organização. A cobrança é calculada diariamente com base no número de contas de usuário ativas em sua organização.", + "billingDomainInfo": "Você será cobrado por cada domínio em sua organização. A cobrança é calculada diariamente com base no número de contas de domínio ativas em sua organização.", + "billingRemoteExitNodesInfo": "Você será cobrado por cada Nodo gerenciado em sua organização. A cobrança é calculada diariamente com base no número de Nodos gerenciados ativos em sua organização.", "domainNotFound": "Domínio Não Encontrado", "domainNotFoundDescription": "Este recurso está desativado porque o domínio não existe mais em nosso sistema. Defina um novo domínio para este recurso.", "failed": "Falhou", "createNewOrgDescription": "Crie uma nova organização", "organization": "Organização", "port": "Porta", - "securityKeyManage": "Gerenciar chaves de segurança", + "securityKeyManage": "Gerir chaves de segurança", "securityKeyDescription": "Adicionar ou remover chaves de segurança para autenticação sem senha", "securityKeyRegister": "Registrar nova chave de segurança", "securityKeyList": "Suas chaves de segurança", @@ -1357,13 +1357,13 @@ "createDomainARecords": "Registros A", "createDomainRecordNumber": "Registrar {number}", "createDomainTxtRecords": "Registros TXT", - "createDomainSaveTheseRecords": "Salvar Esses Registros", + "createDomainSaveTheseRecords": "Guardar Esses Registros", "createDomainSaveTheseRecordsDescription": "Certifique-se de salvar esses registros DNS, pois você não os verá novamente.", "createDomainDnsPropagation": "Propagação DNS", "createDomainDnsPropagationDescription": "Alterações no DNS podem levar algum tempo para se propagar pela internet. Pode levar de alguns minutos a 48 horas, dependendo do seu provedor de DNS e das configurações de TTL.", "resourcePortRequired": "Número da porta é obrigatório para recursos não-HTTP", "resourcePortNotAllowed": "Número da porta não deve ser definido para recursos HTTP", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Calculadora de Preços", "signUpTerms": { "IAgreeToThe": "Concordo com", "termsOfService": "os termos de serviço", @@ -1412,41 +1412,41 @@ "addNewTarget": "Adicionar Novo Alvo", "targetsList": "Lista de Alvos", "targetErrorDuplicateTargetFound": "Alvo duplicado encontrado", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckHealthy": "Saudável", + "healthCheckUnhealthy": "Não Saudável", + "healthCheckUnknown": "Desconhecido", + "healthCheck": "Verificação de Saúde", + "configureHealthCheck": "Configurar Verificação de Saúde", + "configureHealthCheckDescription": "Configure a monitorização de saúde para {target}", + "enableHealthChecks": "Ativar Verificações de Saúde", + "enableHealthChecksDescription": "Monitore a saúde deste alvo. Você pode monitorar um ponto de extremidade diferente do alvo, se necessário.", + "healthScheme": "Método", + "healthSelectScheme": "Selecione o Método", + "healthCheckPath": "Caminho", + "healthHostname": "IP / Nome do Host", + "healthPort": "Porta", + "healthCheckPathDescription": "O caminho para verificar o estado de saúde.", + "healthyIntervalSeconds": "Intervalo Saudável", + "unhealthyIntervalSeconds": "Intervalo Não Saudável", + "IntervalSeconds": "Intervalo Saudável", + "timeoutSeconds": "Tempo Limite", + "timeIsInSeconds": "O tempo está em segundos", + "retryAttempts": "Tentativas de Repetição", + "expectedResponseCodes": "Códigos de Resposta Esperados", + "expectedResponseCodesDescription": "Código de status HTTP que indica estado saudável. Se deixado em branco, 200-300 é considerado saudável.", "customHeaders": "Cabeçalhos Personalizados", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Separados por cabeçalhos da nova linha: Nome do Cabeçalho: valor", + "headersValidationError": "Cabeçalhos devem estar no formato: Nome do Cabeçalho: valor.", + "saveHealthCheck": "Salvar Verificação de Saúde", + "healthCheckSaved": "Verificação de Saúde Salva", + "healthCheckSavedDescription": "Configuração de verificação de saúde salva com sucesso", + "healthCheckError": "Erro de Verificação de Saúde", + "healthCheckErrorDescription": "Ocorreu um erro ao salvar a configuração de verificação de saúde", + "healthCheckPathRequired": "O caminho de verificação de saúde é obrigatório", + "healthCheckMethodRequired": "O método HTTP é obrigatório", + "healthCheckIntervalMin": "O intervalo de verificação deve ser de pelo menos 5 segundos", + "healthCheckTimeoutMin": "O tempo limite deve ser de pelo menos 1 segundo", + "healthCheckRetryMin": "As tentativas de repetição devem ser pelo menos 1", "httpMethod": "Método HTTP", "selectHttpMethod": "Selecionar método HTTP", "domainPickerSubdomainLabel": "Subdomínio", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Digite um subdomínio para buscar e selecionar entre os domínios gratuitos disponíveis.", "domainPickerFreeDomains": "Domínios Gratuitos", "domainPickerSearchForAvailableDomains": "Pesquise por domínios disponíveis", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Nota: Domínios gratuitos fornecidos não estão disponíveis para instâncias auto-hospedadas no momento.", "resourceDomain": "Domínio", "resourceEditDomain": "Editar Domínio", "siteName": "Nome do Site", @@ -1481,7 +1481,7 @@ "editInternalResourceDialogSitePort": "Porta do Site", "editInternalResourceDialogTargetConfiguration": "Configuração do Alvo", "editInternalResourceDialogCancel": "Cancelar", - "editInternalResourceDialogSaveResource": "Salvar Recurso", + "editInternalResourceDialogSaveResource": "Guardar Recurso", "editInternalResourceDialogSuccess": "Sucesso", "editInternalResourceDialogInternalResourceUpdatedSuccessfully": "Recurso interno atualizado com sucesso", "editInternalResourceDialogError": "Erro", @@ -1508,7 +1508,7 @@ "createInternalResourceDialogTcp": "TCP", "createInternalResourceDialogUdp": "UDP", "createInternalResourceDialogSitePort": "Porta do Site", - "createInternalResourceDialogSitePortDescription": "Use esta porta para acessar o recurso no site quando conectado com um cliente.", + "createInternalResourceDialogSitePortDescription": "Use esta porta para aceder o recurso no site quando conectado com um cliente.", "createInternalResourceDialogTargetConfiguration": "Configuração do Alvo", "createInternalResourceDialogDestinationIPDescription": "O IP ou endereço do hostname do recurso na rede do site.", "createInternalResourceDialogDestinationPortDescription": "A porta no IP de destino onde o recurso está acessível.", @@ -1532,7 +1532,7 @@ "siteAddress": "Endereço do Site", "siteAddressDescription": "Especificar o endereço IP do host para que os clientes se conectem. Este é o endereço interno do site na rede Pangolin para os clientes endereçarem. Deve estar dentro da sub-rede da Organização.", "autoLoginExternalIdp": "Login Automático com IDP Externo", - "autoLoginExternalIdpDescription": "Redirecionar imediatamente o usuário para o IDP externo para autenticação.", + "autoLoginExternalIdpDescription": "Redirecionar imediatamente o utilizador para o IDP externo para autenticação.", "selectIdp": "Selecionar IDP", "selectIdpPlaceholder": "Escolher um IDP...", "selectIdpRequired": "Por favor, selecione um IDP quando o login automático estiver ativado.", @@ -1543,72 +1543,72 @@ "autoLoginError": "Erro de Login Automático", "autoLoginErrorNoRedirectUrl": "Nenhum URL de redirecionamento recebido do provedor de identidade.", "autoLoginErrorGeneratingUrl": "Falha ao gerar URL de autenticação.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Gerenciar Auto-Hospedados", + "remoteExitNodeDescription": "Gerencie os nós para estender sua conectividade de rede", + "remoteExitNodes": "Nós", + "searchRemoteExitNodes": "Buscar nós...", + "remoteExitNodeAdd": "Adicionar node", + "remoteExitNodeErrorDelete": "Erro ao excluir nó", + "remoteExitNodeQuestionRemove": "Tem certeza que deseja remover o nó {selectedNode} da organização?", + "remoteExitNodeMessageRemove": "Uma vez removido, o nó não estará mais acessível.", + "remoteExitNodeMessageConfirm": "Para confirmar, por favor, digite o nome do nó abaixo.", + "remoteExitNodeConfirmDelete": "Confirmar exclusão do nó", + "remoteExitNodeDelete": "Excluir nó", + "sidebarRemoteExitNodes": "Nós", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Criar nó", + "description": "Crie um novo nó para estender sua conectividade de rede", + "viewAllButton": "Ver Todos os Nós", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Estratégia de Criação", + "description": "Escolha isto para configurar o seu nó manualmente ou gerar novas credenciais.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Adotar Nodo", + "description": "Escolha isto se você já tem credenciais para o nó." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Gerar Chaves", + "description": "Escolha esta opção se você quer gerar novas chaves para o nó" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Adotar Nodo Existente", + "description": "Digite as credenciais do nó existente que deseja adoptar", + "nodeIdLabel": "Nó ID", + "nodeIdDescription": "O ID do nó existente que você deseja adoptar", + "secretLabel": "Chave Secreta", + "secretDescription": "A chave secreta do nó existente", + "submitButton": "Nó Adotado" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Credenciais Geradas", + "description": "Use estas credenciais geradas para configurar o seu nó", + "nodeIdTitle": "Nó ID", + "secretTitle": "Chave Secreta", + "saveCredentialsTitle": "Adicionar Credenciais à Configuração", + "saveCredentialsDescription": "Adicione essas credenciais ao arquivo de configuração do seu nodo de Pangolin auto-hospedado para completar a conexão.", + "submitButton": "Criar nó" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "ID do nó e Segredo são necessários ao adotar um nó existente" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Falha ao carregar padrões", + "defaultsNotLoaded": "Padrões não carregados", + "createFailed": "Falha ao criar nó" }, "success": { - "created": "Node created successfully" + "created": "Nó criado com sucesso" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Seleção de nó", + "remoteExitNodeSelectionDescription": "Selecione um nó para encaminhar o tráfego para este site local", + "remoteExitNodeRequired": "Um nó deve ser seleccionado para sites locais", + "noRemoteExitNodesAvailable": "Nenhum nó disponível", + "noRemoteExitNodesAvailableDescription": "Nenhum nó está disponível para esta organização. Crie um nó primeiro para usar sites locais.", + "exitNode": "Nodo de Saída", + "country": "País", + "rulesMatchCountry": "Atualmente baseado no IP de origem", "managedSelfHosted": { "title": "Gerenciado Auto-Hospedado", "description": "Servidor Pangolin auto-hospedado mais confiável e com baixa manutenção com sinos extras e assobiamentos", @@ -1625,7 +1625,7 @@ }, "benefitLessMaintenance": { "title": "Menos manutenção", - "description": "Sem migrações, backups ou infraestrutura extra para gerenciar. Lidamos com isso na nuvem." + "description": "Sem migrações, backups ou infraestrutura extra para gerir. Lidamos com isso na nuvem." }, "benefitCloudFailover": { "title": "Falha na nuvem", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Domínio Internacional Detectado", "willbestoredas": "Será armazenado como:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Determinar como as funções são atribuídas aos usuários quando eles fazem login quando Auto Provisão está habilitada.", + "selectRole": "Selecione uma função", + "roleMappingExpression": "Expressão", + "selectRolePlaceholder": "Escolha uma função", + "selectRoleDescription": "Selecione uma função para atribuir a todos os usuários deste provedor de identidade", + "roleMappingExpressionDescription": "Insira uma expressão JMESPath para extrair informações da função do token de ID", + "idpTenantIdRequired": "ID do inquilino é necessária", + "invalidValue": "Valor Inválido", + "idpTypeLabel": "Tipo de provedor de identidade", + "roleMappingExpressionPlaceholder": "ex.: Contem (grupos, 'administrador') && 'Administrador' 「'Membro'", + "idpGoogleConfiguration": "Configuração do Google", + "idpGoogleConfigurationDescription": "Configurar suas credenciais do Google OAuth2", + "idpGoogleClientIdDescription": "Seu ID de Cliente OAuth2 do Google", + "idpGoogleClientSecretDescription": "Seu Segredo de Cliente OAuth2 do Google", + "idpAzureConfiguration": "Configuração de ID do Azure Entra", + "idpAzureConfigurationDescription": "Configure as suas credenciais do Azure Entra ID OAuth2", + "idpTenantId": "ID do Inquilino", + "idpTenantIdPlaceholder": "seu-tenente-id", + "idpAzureTenantIdDescription": "Seu ID do tenant Azure (encontrado na visão geral do diretório ativo Azure)", + "idpAzureClientIdDescription": "Seu ID de Cliente de Registro do App Azure", + "idpAzureClientSecretDescription": "Seu segredo de cliente de registro de aplicativos Azure", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Configuração do Google", + "idpAzureConfigurationTitle": "Configuração de ID do Azure Entra", + "idpTenantIdLabel": "ID do Inquilino", + "idpAzureClientIdDescription2": "Seu ID de Cliente de Registro do App Azure", + "idpAzureClientSecretDescription2": "Seu segredo de cliente de registro de aplicativos Azure", "idpGoogleDescription": "Provedor Google OAuth2/OIDC", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Sub-rede", + "subnetDescription": "A sub-rede para a configuração de rede dessa organização.", + "authPage": "Página de Autenticação", + "authPageDescription": "Configurar a página de autenticação para sua organização", + "authPageDomain": "Domínio de Página Autenticação", + "noDomainSet": "Nenhum domínio definido", + "changeDomain": "Alterar domínio", + "selectDomain": "Selecionar domínio", + "restartCertificate": "Reiniciar Certificado", + "editAuthPageDomain": "Editar Página de Autenticação", + "setAuthPageDomain": "Definir domínio da página de autenticação", + "failedToFetchCertificate": "Falha ao buscar o certificado", + "failedToRestartCertificate": "Falha ao reiniciar o certificado", + "addDomainToEnableCustomAuthPages": "Adicione um domínio para habilitar páginas de autenticação personalizadas para sua organização", + "selectDomainForOrgAuthPage": "Selecione um domínio para a página de autenticação da organização", "domainPickerProvidedDomain": "Domínio fornecido", "domainPickerFreeProvidedDomain": "Domínio fornecido grátis", "domainPickerVerified": "Verificada", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" não pôde ser válido para {domain}.", "domainPickerSubdomainSanitized": "Subdomínio banalizado", "domainPickerSubdomainCorrected": "\"{sub}\" foi corrigido para \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Entrar na sua organização", + "orgAuthChooseIdpDescription": "Escolha o seu provedor de identidade para continuar", + "orgAuthNoIdpConfigured": "Esta organização não tem nenhum provedor de identidade configurado. Você pode entrar com a identidade do seu Pangolin.", + "orgAuthSignInWithPangolin": "Entrar com o Pangolin", + "subscriptionRequiredToUse": "Uma assinatura é necessária para usar esse recurso.", + "idpDisabled": "Provedores de identidade estão desabilitados.", + "orgAuthPageDisabled": "A página de autenticação da organização está desativada.", + "domainRestartedDescription": "Verificação de domínio reiniciado com sucesso", "resourceAddEntrypointsEditFile": "Editar arquivo: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Editar arquivo: docker-compose.yml", "emailVerificationRequired": "Verificação de e-mail é necessária. Por favor, faça login novamente via {dashboardUrl}/auth/login conclui esta etapa. Em seguida, volte aqui.", "twoFactorSetupRequired": "Configuração de autenticação de dois fatores é necessária. Por favor, entre novamente via {dashboardUrl}/auth/login conclua este passo. Em seguida, volte aqui.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Ocorreu um erro ao atualizar as configurações da página de autenticação", + "authPageUpdated": "Página de autenticação atualizada com sucesso", + "healthCheckNotAvailable": "Localização", + "rewritePath": "Reescrever Caminho", + "rewritePathDescription": "Opcionalmente reescreva o caminho antes de encaminhar ao destino." } From 87f1cf6730dc82b6b206eba28b43b14d4cc050a4 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:17:04 -0700 Subject: [PATCH 24/28] New translations en-us.json (Russian) --- messages/ru-RU.json | 374 ++++++++++++++++++++++---------------------- 1 file changed, 187 insertions(+), 187 deletions(-) diff --git a/messages/ru-RU.json b/messages/ru-RU.json index a2508d47..80be36dd 100644 --- a/messages/ru-RU.json +++ b/messages/ru-RU.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Простейший способ создать точку входа в вашу сеть. Дополнительная настройка не требуется.", "siteWg": "Базовый WireGuard", "siteWgDescription": "Используйте любой клиент WireGuard для открытия туннеля. Требуется ручная настройка NAT.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Используйте любой клиент WireGuard для создания туннеля. Требуется ручная настройка NAT. РАБОТАЕТ ТОЛЬКО НА САМОСТОЯТЕЛЬНО РАЗМЕЩЕННЫХ УЗЛАХ", "siteLocalDescription": "Только локальные ресурсы. Без туннелирования.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Только локальные ресурсы. Без туннелирования. РАБОТАЕТ ТОЛЬКО НА САМОСТОЯТЕЛЬНО РАЗМЕЩЕННЫХ УЗЛАХ", "siteSeeAll": "Просмотреть все сайты", "siteTunnelDescription": "Выберите способ подключения к вашему сайту", "siteNewtCredentials": "Учётные данные Newt", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS-ресурс", "resourceHTTPDescription": "Проксирование запросов к вашему приложению через HTTPS с использованием поддомена или базового домена.", "resourceRaw": "Сырой TCP/UDP-ресурс", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Проксирование запросов к вашему приложению через TCP/UDP с использованием по номеру порта.", "resourceCreate": "Создание ресурса", "resourceCreateDescription": "Следуйте инструкциям ниже для создания нового ресурса", "resourceSeeAll": "Посмотреть все ресурсы", @@ -168,9 +168,9 @@ "siteSelect": "Выберите сайт", "siteSearch": "Поиск сайта", "siteNotFound": "Сайт не найден.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Выберите страну", + "searchCountries": "Поиск стран...", + "noCountryFound": "Страна не найдена.", "siteSelectionDescription": "Этот сайт предоставит подключение к цели.", "resourceType": "Тип ресурса", "resourceTypeDescription": "Определите, как вы хотите получать доступ к вашему ресурсу", @@ -239,7 +239,7 @@ "accessUserCreate": "Создать пользователя", "accessUserRemove": "Удалить пользователя", "username": "Имя пользователя", - "identityProvider": "Identity Provider", + "identityProvider": "Поставщик удостоверений", "role": "Роль", "nameRequired": "Имя обязательно", "accessRolesManage": "Управление ролями", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Поддомен: {subdomain}", "domainPickerNamespace": "Пространство имен: {namespace}", "domainPickerShowMore": "Показать еще", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Выберите регион", + "regionSelectorInfo": "Выбор региона помогает нам обеспечить лучшее качество обслуживания для вашего расположения. Вам необязательно находиться в том же регионе, что и ваш сервер.", + "regionSelectorPlaceholder": "Выбор региона", + "regionSelectorComingSoon": "Скоро будет", + "billingLoadingSubscription": "Загрузка подписки...", + "billingFreeTier": "Бесплатный уровень", + "billingWarningOverLimit": "Предупреждение: Вы превысили одну или несколько границ использования. Ваши сайты не подключатся, пока вы не измените подписку или не скорректируете использование.", + "billingUsageLimitsOverview": "Обзор лимитов использования", + "billingMonitorUsage": "Контролируйте использование в соответствии с установленными лимитами. Если вам требуется увеличение лимитов, пожалуйста, свяжитесь с нами support@fossorial.io.", + "billingDataUsage": "Использование данных", + "billingOnlineTime": "Время работы сайта", + "billingUsers": "Активные пользователи", + "billingDomains": "Активные домены", + "billingRemoteExitNodes": "Активные самоуправляемые узлы", + "billingNoLimitConfigured": "Лимит не установлен", + "billingEstimatedPeriod": "Предполагаемый период выставления счетов", + "billingIncludedUsage": "Включенное использование", + "billingIncludedUsageDescription": "Использование, включенное в ваш текущий план подписки", + "billingFreeTierIncludedUsage": "Бесплатное использование ограничений", + "billingIncluded": "включено", + "billingEstimatedTotal": "Предполагаемая сумма:", + "billingNotes": "Заметки", + "billingEstimateNote": "Это приблизительная оценка на основании вашего текущего использования.", + "billingActualChargesMayVary": "Фактические начисления могут отличаться.", + "billingBilledAtEnd": "С вас будет выставлен счет в конце периода выставления счетов.", + "billingModifySubscription": "Изменить подписку", + "billingStartSubscription": "Начать подписку", + "billingRecurringCharge": "Периодический взнос", + "billingManageSubscriptionSettings": "Управляйте настройками и предпочтениями вашей подписки", + "billingNoActiveSubscription": "У вас нет активной подписки. Начните подписку, чтобы увеличить лимиты использования.", + "billingFailedToLoadSubscription": "Не удалось загрузить подписку", + "billingFailedToLoadUsage": "Не удалось загрузить использование", + "billingFailedToGetCheckoutUrl": "Не удалось получить URL-адрес для оплаты", + "billingPleaseTryAgainLater": "Пожалуйста, повторите попытку позже.", + "billingCheckoutError": "Ошибка при оформлении заказа", + "billingFailedToGetPortalUrl": "Не удалось получить URL-адрес портала", + "billingPortalError": "Ошибка портала", + "billingDataUsageInfo": "Вы несете ответственность за все данные, переданные через безопасные туннели при подключении к облаку. Это включает как входящий, так и исходящий трафик на всех ваших сайтах. При достижении лимита ваши сайты будут отключаться до тех пор, пока вы не обновите план или не уменьшите его использование. При использовании узлов не взимается плата.", + "billingOnlineTimeInfo": "Вы тарифицируете на то, как долго ваши сайты будут подключены к облаку. Например, 44 640 минут равны одному сайту, работающему круглосуточно за весь месяц. Когда вы достигните лимита, ваши сайты будут отключаться до тех пор, пока вы не обновите тарифный план или не сократите нагрузку. При использовании узлов не тарифицируется.", + "billingUsersInfo": "С вас взимается плата за каждого пользователя в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных учетных записей пользователей в вашей организации.", + "billingDomainInfo": "С вас взимается плата за каждый домен в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных учетных записей доменов в вашей организации.", + "billingRemoteExitNodesInfo": "С вас взимается плата за каждый управляемый узел в вашей организации. Оплата рассчитывается ежедневно исходя из количества активных управляемых узлов в вашей организации.", "domainNotFound": "Домен не найден", "domainNotFoundDescription": "Этот ресурс отключен, так как домен больше не существует в нашей системе. Пожалуйста, установите новый домен для этого ресурса.", "failed": "Ошибка", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Изменения DNS могут занять некоторое время для распространения через интернет. Это может занять от нескольких минут до 48 часов в зависимости от вашего DNS провайдера и настроек TTL.", "resourcePortRequired": "Номер порта необходим для не-HTTP ресурсов", "resourcePortNotAllowed": "Номер порта не должен быть установлен для HTTP ресурсов", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Калькулятор расценок", "signUpTerms": { "IAgreeToThe": "Я согласен с", "termsOfService": "условия использования", @@ -1412,41 +1412,41 @@ "addNewTarget": "Добавить новую цель", "targetsList": "Список целей", "targetErrorDuplicateTargetFound": "Обнаружена дублирующаяся цель", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckHealthy": "Здоровый", + "healthCheckUnhealthy": "Нездоровый", + "healthCheckUnknown": "Неизвестно", + "healthCheck": "Проверка здоровья", + "configureHealthCheck": "Настроить проверку здоровья", + "configureHealthCheckDescription": "Настройте мониторинг состояния для {target}", + "enableHealthChecks": "Включить проверки здоровья", + "enableHealthChecksDescription": "Мониторинг здоровья этой цели. При необходимости можно контролировать другую конечную точку.", + "healthScheme": "Метод", + "healthSelectScheme": "Выберите метод", + "healthCheckPath": "Путь", + "healthHostname": "IP / хост", + "healthPort": "Порт", + "healthCheckPathDescription": "Путь к проверке состояния здоровья.", + "healthyIntervalSeconds": "Интервал здоровых состояний", + "unhealthyIntervalSeconds": "Интервал нездоровых состояний", + "IntervalSeconds": "Интервал здоровых состояний", + "timeoutSeconds": "Тайм-аут", + "timeIsInSeconds": "Время указано в секундах", + "retryAttempts": "Количество попыток повторного запроса", + "expectedResponseCodes": "Ожидаемые коды ответов", + "expectedResponseCodesDescription": "HTTP-код состояния, указывающий на здоровое состояние. Если оставить пустым, 200-300 считается здоровым.", "customHeaders": "Пользовательские заголовки", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Заголовки новой строки, разделённые: название заголовка: значение", + "headersValidationError": "Заголовки должны быть в формате: Название заголовка: значение.", + "saveHealthCheck": "Сохранить проверку здоровья", + "healthCheckSaved": "Проверка здоровья сохранена", + "healthCheckSavedDescription": "Конфигурация проверки состояния успешно сохранена", + "healthCheckError": "Ошибка проверки состояния", + "healthCheckErrorDescription": "Произошла ошибка при сохранении конфигурации проверки состояния", + "healthCheckPathRequired": "Требуется путь проверки состояния", + "healthCheckMethodRequired": "Требуется метод HTTP", + "healthCheckIntervalMin": "Интервал проверки должен составлять не менее 5 секунд", + "healthCheckTimeoutMin": "Тайм-аут должен составлять не менее 1 секунды", + "healthCheckRetryMin": "Количество попыток должно быть не менее 1", "httpMethod": "HTTP метод", "selectHttpMethod": "Выберите HTTP метод", "domainPickerSubdomainLabel": "Поддомен", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Введите поддомен для поиска и выбора из доступных свободных доменов.", "domainPickerFreeDomains": "Свободные домены", "domainPickerSearchForAvailableDomains": "Поиск доступных доменов", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Примечание: бесплатные предоставляемые домены в данный момент недоступны для самоуправляемых экземпляров.", "resourceDomain": "Домен", "resourceEditDomain": "Редактировать домен", "siteName": "Имя сайта", @@ -1543,72 +1543,72 @@ "autoLoginError": "Ошибка автоматического входа", "autoLoginErrorNoRedirectUrl": "URL-адрес перенаправления не получен от провайдера удостоверения.", "autoLoginErrorGeneratingUrl": "Не удалось сгенерировать URL-адрес аутентификации.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Управление самоуправляемым", + "remoteExitNodeDescription": "Управляйте узлами для расширения сетевого подключения", + "remoteExitNodes": "Узлы", + "searchRemoteExitNodes": "Поиск узлов...", + "remoteExitNodeAdd": "Добавить узел", + "remoteExitNodeErrorDelete": "Ошибка удаления узла", + "remoteExitNodeQuestionRemove": "Вы уверены, что хотите удалить узел {selectedNode} из организации?", + "remoteExitNodeMessageRemove": "После удаления узел больше не будет доступен.", + "remoteExitNodeMessageConfirm": "Для подтверждения введите имя узла ниже.", + "remoteExitNodeConfirmDelete": "Подтвердите удаление узла", + "remoteExitNodeDelete": "Удалить узел", + "sidebarRemoteExitNodes": "Узлы", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Создать узел", + "description": "Создайте новый узел, чтобы расширить сетевое подключение", + "viewAllButton": "Все узлы", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Стратегия создания", + "description": "Выберите эту опцию для настройки вашего узла или создания новых учетных данных.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Принять узел", + "description": "Выберите это, если у вас уже есть учетные данные для узла." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Сгенерировать ключи", + "description": "Выберите это, если вы хотите создать новые ключи для узла" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Принять существующий узел", + "description": "Введите учетные данные существующего узла, который вы хотите принять", + "nodeIdLabel": "ID узла", + "nodeIdDescription": "ID существующего узла, который вы хотите принять", + "secretLabel": "Секретный ключ", + "secretDescription": "Секретный ключ существующего узла", + "submitButton": "Принять узел" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Сгенерированные учетные данные", + "description": "Используйте эти учётные данные для настройки вашего узла", + "nodeIdTitle": "ID узла", + "secretTitle": "Секретный ключ", + "saveCredentialsTitle": "Добавить учетные данные в конфигурацию", + "saveCredentialsDescription": "Добавьте эти учетные данные в файл конфигурации вашего самоуправляемого узла Pangolin, чтобы завершить подключение.", + "submitButton": "Создать узел" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "ID узла и секрет требуются при установке существующего узла" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Не удалось загрузить параметры по умолчанию", + "defaultsNotLoaded": "Параметры по умолчанию не загружены", + "createFailed": "Не удалось создать узел" }, "success": { - "created": "Node created successfully" + "created": "Узел успешно создан" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Выбор узла", + "remoteExitNodeSelectionDescription": "Выберите узел для маршрутизации трафика для этого локального сайта", + "remoteExitNodeRequired": "Узел должен быть выбран для локальных сайтов", + "noRemoteExitNodesAvailable": "Нет доступных узлов", + "noRemoteExitNodesAvailableDescription": "Для этой организации узлы не доступны. Сначала создайте узел, чтобы использовать локальные сайты.", + "exitNode": "Узел выхода", + "country": "Страна", + "rulesMatchCountry": "В настоящее время основано на исходном IP", "managedSelfHosted": { "title": "Управляемый с самовывоза", "description": "Более надежный и низко обслуживаемый сервер Pangolin с дополнительными колокольнями и свистками", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Обнаружен международный домен", "willbestoredas": "Будет храниться как:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Определите, как роли, назначаемые пользователям, когда они войдут в систему автоматического профиля.", + "selectRole": "Выберите роль", + "roleMappingExpression": "Выражение", + "selectRolePlaceholder": "Выберите роль", + "selectRoleDescription": "Выберите роль, чтобы назначить всем пользователям этого поставщика идентификации", + "roleMappingExpressionDescription": "Введите выражение JMESPath, чтобы извлечь информацию о роли из ID токена", + "idpTenantIdRequired": "Требуется ID владельца", + "invalidValue": "Неверное значение", + "idpTypeLabel": "Тип поставщика удостоверений", + "roleMappingExpressionPlaceholder": "например, contains(groups, 'admin') && 'Admin' || 'Member'", + "idpGoogleConfiguration": "Конфигурация Google", + "idpGoogleConfigurationDescription": "Настройка учетных данных Google OAuth2", + "idpGoogleClientIdDescription": "Ваш Google OAuth2 ID клиента", + "idpGoogleClientSecretDescription": "Ваш Google OAuth2 Секрет", + "idpAzureConfiguration": "Конфигурация Azure Entra ID", + "idpAzureConfigurationDescription": "Настройте учетные данные Azure Entra ID OAuth2", + "idpTenantId": "Идентификатор арендатора", + "idpTenantIdPlaceholder": "ваш тенант-id", + "idpAzureTenantIdDescription": "Идентификатор арендатора Azure (найден в обзоре Active Directory Azure)", + "idpAzureClientIdDescription": "Ваш идентификатор клиента Azure App", + "idpAzureClientSecretDescription": "Секрет регистрации клиента Azure App", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Конфигурация Google", + "idpAzureConfigurationTitle": "Конфигурация Azure Entra ID", + "idpTenantIdLabel": "Идентификатор арендатора", + "idpAzureClientIdDescription2": "Ваш идентификатор клиента Azure App", + "idpAzureClientSecretDescription2": "Секрет регистрации клиента Azure App", "idpGoogleDescription": "Google OAuth2/OIDC провайдер", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Подсеть", + "subnetDescription": "Подсеть для конфигурации сети этой организации.", + "authPage": "Страница авторизации", + "authPageDescription": "Настройка страницы авторизации для вашей организации", + "authPageDomain": "Домен страницы авторизации", + "noDomainSet": "Домен не установлен", + "changeDomain": "Изменить домен", + "selectDomain": "Выберите домен", + "restartCertificate": "Перезапустить сертификат", + "editAuthPageDomain": "Редактировать домен страницы авторизации", + "setAuthPageDomain": "Установить домен страницы авторизации", + "failedToFetchCertificate": "Не удалось получить сертификат", + "failedToRestartCertificate": "Не удалось перезапустить сертификат", + "addDomainToEnableCustomAuthPages": "Добавьте домен для включения пользовательских страниц аутентификации для вашей организации", + "selectDomainForOrgAuthPage": "Выберите домен для страницы аутентификации организации", "domainPickerProvidedDomain": "Домен предоставлен", "domainPickerFreeProvidedDomain": "Бесплатный домен", "domainPickerVerified": "Подтверждено", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" не может быть действительным для {domain}.", "domainPickerSubdomainSanitized": "Субдомен очищен", "domainPickerSubdomainCorrected": "\"{sub}\" был исправлен на \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Войдите в свою организацию", + "orgAuthChooseIdpDescription": "Выберите своего поставщика удостоверений личности для продолжения", + "orgAuthNoIdpConfigured": "Эта организация не имеет настроенных поставщиков идентификационных данных. Вместо этого вы можете войти в свой Pangolin.", + "orgAuthSignInWithPangolin": "Войти через Pangolin", + "subscriptionRequiredToUse": "Для использования этой функции требуется подписка.", + "idpDisabled": "Провайдеры идентификации отключены.", + "orgAuthPageDisabled": "Страница авторизации организации отключена.", + "domainRestartedDescription": "Проверка домена успешно перезапущена", "resourceAddEntrypointsEditFile": "Редактировать файл: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Редактировать файл: docker-compose.yml", "emailVerificationRequired": "Требуется подтверждение адреса электронной почты. Пожалуйста, войдите снова через {dashboardUrl}/auth/login завершить этот шаг. Затем вернитесь сюда.", "twoFactorSetupRequired": "Требуется настройка двухфакторной аутентификации. Пожалуйста, войдите снова через {dashboardUrl}/auth/login завершить этот шаг. Затем вернитесь сюда.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Произошла ошибка при обновлении настроек страницы авторизации", + "authPageUpdated": "Страница авторизации успешно обновлена", + "healthCheckNotAvailable": "Локальный", + "rewritePath": "Переписать путь", + "rewritePathDescription": "При необходимости, измените путь перед пересылкой к целевому адресу." } From 67ac01b31a931a6c76e6f3baaf9285400204561e Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:17:05 -0700 Subject: [PATCH 25/28] New translations en-us.json (Turkish) --- messages/tr-TR.json | 376 ++++++++++++++++++++++---------------------- 1 file changed, 188 insertions(+), 188 deletions(-) diff --git a/messages/tr-TR.json b/messages/tr-TR.json index 62991e05..b84bef19 100644 --- a/messages/tr-TR.json +++ b/messages/tr-TR.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Ağınıza giriş noktası oluşturmanın en kolay yolu. Ekstra kurulum gerekmez.", "siteWg": "Temel WireGuard", "siteWgDescription": "Bir tünel oluşturmak için herhangi bir WireGuard istemcisi kullanın. Manuel NAT kurulumu gereklidir.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Bir tünel oluşturmak için herhangi bir WireGuard istemcisi kullanın. Manuel NAT kurulumu gereklidir. YALNIZCA SELF HOSTED DÜĞÜMLERDE ÇALIŞIR", "siteLocalDescription": "Yalnızca yerel kaynaklar. Tünelleme yok.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Yalnızca yerel kaynaklar. Tünel yok. YALNIZCA SELF HOSTED DÜĞÜMLERDE ÇALIŞIR", "siteSeeAll": "Tüm Siteleri Gör", "siteTunnelDescription": "Sitenize nasıl bağlanmak istediğinizi belirleyin", "siteNewtCredentials": "Newt Kimlik Bilgileri", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS Kaynağı", "resourceHTTPDescription": "Bir alt alan adı veya temel alan adı kullanarak uygulamanıza HTTPS üzerinden vekil istek gönderin.", "resourceRaw": "Ham TCP/UDP Kaynağı", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Uygulamanıza TCP/UDP üzerinden port numarası ile vekil istek gönderin.", "resourceCreate": "Kaynak Oluştur", "resourceCreateDescription": "Yeni bir kaynak oluşturmak için aşağıdaki adımları izleyin", "resourceSeeAll": "Tüm Kaynakları Gör", @@ -168,9 +168,9 @@ "siteSelect": "Site seç", "siteSearch": "Site ara", "siteNotFound": "Herhangi bir site bulunamadı.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Ülke Seç", + "searchCountries": "Ülkeleri ara...", + "noCountryFound": "Ülke bulunamadı.", "siteSelectionDescription": "Bu site hedefe bağlantı sağlayacaktır.", "resourceType": "Kaynak Türü", "resourceTypeDescription": "Kaynağınıza nasıl erişmek istediğinizi belirleyin", @@ -817,7 +817,7 @@ "redirectUrl": "Yönlendirme URL'si", "redirectUrlAbout": "Yönlendirme URL'si Hakkında", "redirectUrlAboutDescription": "Bu, kimlik doğrulamasından sonra kullanıcıların yönlendirileceği URL'dir. Bu URL'yi kimlik sağlayıcınızın ayarlarında yapılandırmanız gerekir.", - "pangolinAuth": "Auth - Pangolin", + "pangolinAuth": "Yetkilendirme - Pangolin", "verificationCodeLengthRequirements": "Doğrulama kodunuz 8 karakter olmalıdır.", "errorOccurred": "Bir hata oluştu", "emailErrorVerify": "E-posta doğrulanamadı: ", @@ -1242,7 +1242,7 @@ "sidebarExpand": "Genişlet", "newtUpdateAvailable": "Güncelleme Mevcut", "newtUpdateAvailableInfo": "Newt'in yeni bir versiyonu mevcut. En iyi deneyim için lütfen en son sürüme güncelleyin.", - "domainPickerEnterDomain": "Domain", + "domainPickerEnterDomain": "Alan Adı", "domainPickerPlaceholder": "myapp.example.com", "domainPickerDescription": "Mevcut seçenekleri görmek için kaynağın tam etki alanını girin.", "domainPickerDescriptionSaas": "Mevcut seçenekleri görmek için tam etki alanı, alt etki alanı veya sadece bir isim girin", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Alt Alan: {subdomain}", "domainPickerNamespace": "Ad Alanı: {namespace}", "domainPickerShowMore": "Daha Fazla Göster", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Bölge Seç", + "regionSelectorInfo": "Bir bölge seçmek, konumunuz için daha iyi performans sağlamamıza yardımcı olur. Sunucunuzla aynı bölgede olmanıza gerek yoktur.", + "regionSelectorPlaceholder": "Bölge Seçin", + "regionSelectorComingSoon": "Yakında Geliyor", + "billingLoadingSubscription": "Abonelik yükleniyor...", + "billingFreeTier": "Ücretsiz Dilim", + "billingWarningOverLimit": "Uyarı: Bir veya daha fazla kullanım limitini aştınız. Aboneliğinizi değiştirmediğiniz veya kullanımı ayarlamadığınız sürece siteleriniz bağlanmayacaktır.", + "billingUsageLimitsOverview": "Kullanım Limitleri Genel Görünümü", + "billingMonitorUsage": "Kullanımınızı yapılandırılmış limitlerle karşılaştırın. Limitlerin artırılmasına ihtiyacınız varsa, lütfen support@fossorial.io adresinden bizimle iletişime geçin.", + "billingDataUsage": "Veri Kullanımı", + "billingOnlineTime": "Site Çevrimiçi Süresi", + "billingUsers": "Aktif Kullanıcılar", + "billingDomains": "Aktif Alanlar", + "billingRemoteExitNodes": "Aktif Öz-Host Düğümleri", + "billingNoLimitConfigured": "Hiçbir limit yapılandırılmadı", + "billingEstimatedPeriod": "Tahmini Fatura Dönemi", + "billingIncludedUsage": "Dahil Kullanım", + "billingIncludedUsageDescription": "Mevcut abonelik planınıza bağlı kullanım", + "billingFreeTierIncludedUsage": "Ücretsiz dilim kullanım hakları", + "billingIncluded": "dahil", + "billingEstimatedTotal": "Tahmini Toplam:", + "billingNotes": "Notlar", + "billingEstimateNote": "Bu, mevcut kullanımınıza dayalı bir tahmindir.", + "billingActualChargesMayVary": "Asıl ücretler farklılık gösterebilir.", + "billingBilledAtEnd": "Fatura döneminin sonunda fatura düzenlenecektir.", + "billingModifySubscription": "Aboneliği Düzenle", + "billingStartSubscription": "Aboneliği Başlat", + "billingRecurringCharge": "Yinelenen Ücret", + "billingManageSubscriptionSettings": "Abonelik ayarlarınızı ve tercihlerinizi yönetin", + "billingNoActiveSubscription": "Aktif bir aboneliğiniz yok. Kullanım limitlerini artırmak için aboneliğinizi başlatın.", + "billingFailedToLoadSubscription": "Abonelik yüklenemedi", + "billingFailedToLoadUsage": "Kullanım yüklenemedi", + "billingFailedToGetCheckoutUrl": "Ödeme URL'si alınamadı", + "billingPleaseTryAgainLater": "Lütfen daha sonra tekrar deneyin.", + "billingCheckoutError": "Ödeme Hatası", + "billingFailedToGetPortalUrl": "Portal URL'si alınamadı", + "billingPortalError": "Portal Hatası", + "billingDataUsageInfo": "Buluta bağlandığınızda, güvenli tünellerinizden aktarılan tüm verilerden ücret alınırsınız. Bu, tüm sitelerinizdeki gelen ve giden trafiği içerir. Limitinize ulaştığınızda, planınızı yükseltmeli veya kullanımı azaltmalısınız, aksi takdirde siteleriniz bağlantıyı keser. Düğümler kullanırken verilerden ücret alınmaz.", + "billingOnlineTimeInfo": "Sitelerinizin buluta ne kadar süre bağlı kaldığına göre ücretlendirilirsiniz. Örneğin, 44,640 dakika, bir sitenin 24/7 boyunca tam bir ay boyunca çalışması anlamına gelir. Limitinize ulaştığınızda, planınızı yükseltmeyip kullanımı azaltmazsanız siteleriniz bağlantıyı keser. Düğümler kullanırken zamandan ücret alınmaz.", + "billingUsersInfo": "Kuruluşunuzdaki her kullanıcı için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif kullanıcı hesaplarının sayısına göre günlük olarak hesaplanır.", + "billingDomainInfo": "Kuruluşunuzdaki her alan adı için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif alan adları hesaplarının sayısına göre günlük olarak hesaplanır.", + "billingRemoteExitNodesInfo": "Kuruluşunuzdaki her yönetilen Düğüm için ücretlendirilirsiniz. Faturalandırma, hesabınızdaki aktif yönetilen Düğümler sayısına göre günlük olarak hesaplanır.", "domainNotFound": "Alan Adı Bulunamadı", "domainNotFoundDescription": "Bu kaynak devre dışıdır çünkü alan adı sistemimizde artık mevcut değil. Bu kaynak için yeni bir alan adı belirleyin.", "failed": "Başarısız", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS değişikliklerinin internet genelinde yayılması zaman alabilir. DNS sağlayıcınız ve TTL ayarlarına bağlı olarak bu birkaç dakika ile 48 saat arasında değişebilir.", "resourcePortRequired": "HTTP dışı kaynaklar için bağlantı noktası numarası gereklidir", "resourcePortNotAllowed": "HTTP kaynakları için bağlantı noktası numarası ayarlanmamalı", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Fiyat Hesaplayıcı", "signUpTerms": { "IAgreeToThe": "Kabul ediyorum", "termsOfService": "hizmet şartları", @@ -1412,41 +1412,41 @@ "addNewTarget": "Yeni Hedef Ekle", "targetsList": "Hedefler Listesi", "targetErrorDuplicateTargetFound": "Yinelenen hedef bulundu", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckHealthy": "Sağlıklı", + "healthCheckUnhealthy": "Sağlıksız", + "healthCheckUnknown": "Bilinmiyor", + "healthCheck": "Sağlık Kontrolü", + "configureHealthCheck": "Sağlık Kontrolünü Yapılandır", + "configureHealthCheckDescription": "{hedef} için sağlık izleme kurun", + "enableHealthChecks": "Sağlık Kontrollerini Etkinleştir", + "enableHealthChecksDescription": "Bu hedefin sağlığını izleyin. Gerekirse hedef dışındaki bir son noktayı izleyebilirsiniz.", + "healthScheme": "Yöntem", + "healthSelectScheme": "Yöntem Seç", + "healthCheckPath": "Yol", + "healthHostname": "IP / Hostname", + "healthPort": "Bağlantı Noktası", + "healthCheckPathDescription": "Sağlık durumunu kontrol etmek için yol.", + "healthyIntervalSeconds": "Sağlıklı Aralık", + "unhealthyIntervalSeconds": "Sağlıksız Aralık", + "IntervalSeconds": "Sağlıklı Aralık", + "timeoutSeconds": "Zaman Aşımı", + "timeIsInSeconds": "Zaman saniye cinsindendir", + "retryAttempts": "Tekrar Deneme Girişimleri", + "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.", "customHeaders": "Özel Başlıklar", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Başlıklar yeni satırla ayrılmış: Başlık-Adı: değer", + "headersValidationError": "Başlıklar şu formatta olmalıdır: Başlık-Adı: değer.", + "saveHealthCheck": "Sağlık Kontrolünü Kaydet", + "healthCheckSaved": "Sağlık Kontrolü Kaydedildi", + "healthCheckSavedDescription": "Sağlık kontrol yapılandırması başarıyla kaydedildi", + "healthCheckError": "Sağlık Kontrol Hatası", + "healthCheckErrorDescription": "Sağlık kontrol yapılandırması kaydedilirken bir hata oluştu", + "healthCheckPathRequired": "Sağlık kontrol yolu gereklidir", + "healthCheckMethodRequired": "HTTP yöntemi gereklidir", + "healthCheckIntervalMin": "Kontrol aralığı en az 5 saniye olmalıdır", + "healthCheckTimeoutMin": "Zaman aşımı en az 1 saniye olmalıdır", + "healthCheckRetryMin": "Tekrar deneme girişimleri en az 1 olmalıdır", "httpMethod": "HTTP Yöntemi", "selectHttpMethod": "HTTP yöntemini seçin", "domainPickerSubdomainLabel": "Alt Alan Adı", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Mevcut ücretsiz alan adları arasından aramak ve seçmek için bir alt alan adı girin.", "domainPickerFreeDomains": "Ücretsiz Alan Adları", "domainPickerSearchForAvailableDomains": "Mevcut alan adlarını ara", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Not: Ücretsiz sağlanan alan adları şu anda öz-host edilmiş örnekler için kullanılabilir değildir.", "resourceDomain": "Alan Adı", "resourceEditDomain": "Alan Adını Düzenle", "siteName": "Site Adı", @@ -1543,72 +1543,72 @@ "autoLoginError": "Otomatik Giriş Hatası", "autoLoginErrorNoRedirectUrl": "Kimlik sağlayıcıdan yönlendirme URL'si alınamadı.", "autoLoginErrorGeneratingUrl": "Kimlik doğrulama URL'si oluşturulamadı.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Öz-Host Yönetim", + "remoteExitNodeDescription": "Ağ bağlantınızı genişletmek için düğümleri yönetin", + "remoteExitNodes": "Düğümler", + "searchRemoteExitNodes": "Düğüm ara...", + "remoteExitNodeAdd": "Düğüm Ekle", + "remoteExitNodeErrorDelete": "Düğüm silinirken hata oluştu", + "remoteExitNodeQuestionRemove": "{selectedNode} düğümünü organizasyondan kaldırmak istediğinizden emin misiniz?", + "remoteExitNodeMessageRemove": "Kaldırıldığında, düğüm artık erişilebilir olmayacaktır.", + "remoteExitNodeMessageConfirm": "Onaylamak için lütfen aşağıya düğümün adını yazın.", + "remoteExitNodeConfirmDelete": "Düğüm Silmeyi Onayla", + "remoteExitNodeDelete": "Düğümü Sil", + "sidebarRemoteExitNodes": "Düğümler", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Düğüm Oluştur", + "description": "Ağ bağlantınızı genişletmek için yeni bir düğüm oluşturun", + "viewAllButton": "Tüm Düğümleri Gör", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Oluşturma Stratejisi", + "description": "Düğümünüzü manuel olarak yapılandırmak veya yeni kimlik bilgileri oluşturmak için bunu seçin.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Düğüm Benimse", + "description": "Zaten düğüm için kimlik bilgilerine sahipseniz bunu seçin." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Anahtarları Oluştur", + "description": "Düğüm için yeni anahtarlar oluşturmak istiyorsanız bunu seçin" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Mevcut Düğümü Benimse", + "description": "Adayacağınız mevcut düğümün kimlik bilgilerini girin", + "nodeIdLabel": "Düğüm ID", + "nodeIdDescription": "Adayacağınız mevcut düğümün ID'si", + "secretLabel": "Gizli", + "secretDescription": "Mevcut düğümün gizli anahtarı", + "submitButton": "Düğümü Benimse" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Oluşturulan Kimlik Bilgileri", + "description": "Düğümünüzü yapılandırmak için oluşturulan bu kimlik bilgilerini kullanın", + "nodeIdTitle": "Düğüm ID", + "secretTitle": "Gizli", + "saveCredentialsTitle": "Kimlik Bilgilerini Yapılandırmaya Ekle", + "saveCredentialsDescription": "Bağlantıyı tamamlamak için bu kimlik bilgilerini öz-host Pangolin düğüm yapılandırma dosyanıza ekleyin.", + "submitButton": "Düğüm Oluştur" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "Mevcut bir düğümü benimserken Düğüm ID ve Gizli anahtar gereklidir" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Varsayılanlar yüklenemedi", + "defaultsNotLoaded": "Varsayılanlar yüklenmedi", + "createFailed": "Düğüm oluşturulamadı" }, "success": { - "created": "Node created successfully" + "created": "Düğüm başarıyla oluşturuldu" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Düğüm Seçimi", + "remoteExitNodeSelectionDescription": "Yerel site için trafiği yönlendirecek düğümü seçin", + "remoteExitNodeRequired": "Yerel siteler için bir düğüm seçilmelidir", + "noRemoteExitNodesAvailable": "Düğüm Bulunamadı", + "noRemoteExitNodesAvailableDescription": "Bu organizasyon için düğüm mevcut değil. Yerel siteleri kullanmak için önce bir düğüm oluşturun.", + "exitNode": "Çıkış Düğümü", + "country": "Ülke", + "rulesMatchCountry": "Şu anda kaynak IP'ye dayanarak", "managedSelfHosted": { "title": "Yönetilen Self-Hosted", "description": "Daha güvenilir ve düşük bakım gerektiren, ekstra özelliklere sahip kendi kendine barındırabileceğiniz Pangolin sunucusu", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Uluslararası Alan Adı Tespit Edildi", "willbestoredas": "Şu şekilde depolanacak:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Otomatik Sağlama etkinleştirildiğinde kullanıcıların oturum açarken rollerin nasıl atandığını belirleyin.", + "selectRole": "Bir Rol Seçin", + "roleMappingExpression": "İfade", + "selectRolePlaceholder": "Bir rol seçin", + "selectRoleDescription": "Bu kimlik sağlayıcısından tüm kullanıcılara atanacak bir rol seçin", + "roleMappingExpressionDescription": "Rol bilgilerini ID tokeninden çıkarmak için bir JMESPath ifadesi girin", + "idpTenantIdRequired": "Kiracı Kimliği gereklidir", + "invalidValue": "Geçersiz değer", + "idpTypeLabel": "Kimlik Sağlayıcı Türü", + "roleMappingExpressionPlaceholder": "örn., contains(gruplar, 'yönetici') && 'Yönetici' || 'Üye'", + "idpGoogleConfiguration": "Google Yapılandırması", + "idpGoogleConfigurationDescription": "Google OAuth2 kimlik bilgilerinizi yapılandırın", + "idpGoogleClientIdDescription": "Google OAuth2 İstemci Kimliğiniz", + "idpGoogleClientSecretDescription": "Google OAuth2 İstemci Sırrınız", + "idpAzureConfiguration": "Azure Entra ID Yapılandırması", + "idpAzureConfigurationDescription": "Azure Entra ID OAuth2 kimlik bilgilerinizi yapılandırın", + "idpTenantId": "Kiracı Kimliği", + "idpTenantIdPlaceholder": "kiraci-kimliginiz", + "idpAzureTenantIdDescription": "Azure kiracı kimliğiniz (Azure Active Directory genel bakışında bulunur)", + "idpAzureClientIdDescription": "Azure Uygulama Kaydı İstemci Kimliğiniz", + "idpAzureClientSecretDescription": "Azure Uygulama Kaydı İstemci Sırrınız", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Google Yapılandırması", + "idpAzureConfigurationTitle": "Azure Entra ID Yapılandırması", + "idpTenantIdLabel": "Kiracı Kimliği", + "idpAzureClientIdDescription2": "Azure Uygulama Kaydı İstemci Kimliğiniz", + "idpAzureClientSecretDescription2": "Azure Uygulama Kaydı İstemci Sırrınız", "idpGoogleDescription": "Google OAuth2/OIDC sağlayıcısı", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC sağlayıcısı", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Alt ağ", + "subnetDescription": "Bu organizasyonun ağ yapılandırması için alt ağ.", + "authPage": "Yetkilendirme Sayfası", + "authPageDescription": "Kuruluşunuz için yetkilendirme sayfasını yapılandırın", + "authPageDomain": "Yetkilendirme Sayfası Alanı", + "noDomainSet": "Alan belirlenmedi", + "changeDomain": "Alanı Değiştir", + "selectDomain": "Alan Seçin", + "restartCertificate": "Sertifikayı Yenile", + "editAuthPageDomain": "Yetkilendirme Sayfası Alanını Düzenle", + "setAuthPageDomain": "Yetkilendirme Sayfası Alanını Ayarla", + "failedToFetchCertificate": "Sertifika getirilemedi", + "failedToRestartCertificate": "Sertifika yeniden başlatılamadı", + "addDomainToEnableCustomAuthPages": "Kuruluşunuz için özel kimlik doğrulama sayfalarını etkinleştirmek için bir alan ekleyin", + "selectDomainForOrgAuthPage": "Kuruluşun kimlik doğrulama sayfası için bir alan seçin", "domainPickerProvidedDomain": "Sağlanan Alan Adı", "domainPickerFreeProvidedDomain": "Ücretsiz Sağlanan Alan Adı", "domainPickerVerified": "Doğrulandı", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" {domain} için geçerli yapılamadı.", "domainPickerSubdomainSanitized": "Alt alan adı temizlendi", "domainPickerSubdomainCorrected": "\"{sub}\" \"{sanitized}\" olarak düzeltildi", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Kuruluşunuza giriş yapın", + "orgAuthChooseIdpDescription": "Devam etmek için kimlik sağlayıcınızı seçin", + "orgAuthNoIdpConfigured": "Bu kuruluşta yapılandırılmış kimlik sağlayıcı yok. Bunun yerine Pangolin kimliğinizle giriş yapabilirsiniz.", + "orgAuthSignInWithPangolin": "Pangolin ile Giriş Yap", + "subscriptionRequiredToUse": "Bu özelliği kullanmak için abonelik gerekmektedir.", + "idpDisabled": "Kimlik sağlayıcılar devre dışı bırakılmıştır.", + "orgAuthPageDisabled": "Kuruluş kimlik doğrulama sayfası devre dışı bırakılmıştır.", + "domainRestartedDescription": "Alan doğrulaması başarıyla yeniden başlatıldı", "resourceAddEntrypointsEditFile": "Dosyayı düzenle: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Dosyayı düzenle: docker-compose.yml", "emailVerificationRequired": "E-posta doğrulaması gereklidir. Bu adımı tamamlamak için lütfen tekrar {dashboardUrl}/auth/login üzerinden oturum açın. Sonra buraya geri dönün.", "twoFactorSetupRequired": "İki faktörlü kimlik doğrulama ayarı gereklidir. Bu adımı tamamlamak için lütfen tekrar {dashboardUrl}/auth/login üzerinden oturum açın. Sonra buraya geri dönün.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Kimlik doğrulama sayfası ayarları güncellenirken bir hata oluştu.", + "authPageUpdated": "Kimlik doğrulama sayfası başarıyla güncellendi", + "healthCheckNotAvailable": "Yerel", + "rewritePath": "Yolu Yeniden Yaz", + "rewritePathDescription": "Seçenek olarak hedefe iletmeden önce yolu yeniden yazın." } From 346d886f8a4111658b6a9a315acfbf842901dce0 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:17:06 -0700 Subject: [PATCH 26/28] New translations en-us.json (Chinese Simplified) --- messages/zh-CN.json | 380 ++++++++++++++++++++++---------------------- 1 file changed, 190 insertions(+), 190 deletions(-) diff --git a/messages/zh-CN.json b/messages/zh-CN.json index 8314f092..94ccd9ae 100644 --- a/messages/zh-CN.json +++ b/messages/zh-CN.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "最简单的方式来连接到您的网络。不需要任何额外设置。", "siteWg": "基本 WireGuard", "siteWgDescription": "使用任何 WireGuard 客户端来建立隧道。需要手动配置 NAT。", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "使用任何WireGuard客户端建立隧道。需要手动配置NAT。仅适用于自托管节点。", "siteLocalDescription": "仅限本地资源。不需要隧道。", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "仅本地资源。无需隧道。仅适用于自托管节点。", "siteSeeAll": "查看所有站点", "siteTunnelDescription": "确定如何连接到您的网站", "siteNewtCredentials": "Newt 凭据", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS 资源", "resourceHTTPDescription": "使用子域或根域名通过 HTTPS 向您的应用程序提出代理请求。", "resourceRaw": "TCP/UDP 资源", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "使用 TCP/UDP 使用端口号向您的应用提出代理请求。", "resourceCreate": "创建资源", "resourceCreateDescription": "按照下面的步骤创建新资源", "resourceSeeAll": "查看所有资源", @@ -168,9 +168,9 @@ "siteSelect": "选择站点", "siteSearch": "搜索站点", "siteNotFound": "未找到站点。", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "选择国家", + "searchCountries": "搜索国家...", + "noCountryFound": "找不到国家。", "siteSelectionDescription": "此站点将为目标提供连接。", "resourceType": "资源类型", "resourceTypeDescription": "确定如何访问您的资源", @@ -598,7 +598,7 @@ "newtErrorFetchReleases": "无法获取版本信息: {err}", "newtErrorFetchLatest": "无法获取最新版信息: {err}", "newtEndpoint": "Newt 端点", - "newtId": "Newt ID", + "newtId": "Newt ID", "newtSecretKey": "Newt 私钥", "architecture": "架构", "sites": "站点", @@ -1156,7 +1156,7 @@ "containerLabels": "标签", "containerLabelsCount": "{count, plural, other {# 标签}}", "containerLabelsTitle": "容器标签", - "containerLabelEmpty": "", + "containerLabelEmpty": "<为空>", "containerPorts": "端口", "containerPortsMore": "+{count} 更多", "containerActions": "行动", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "子域:{subdomain}", "domainPickerNamespace": "命名空间:{namespace}", "domainPickerShowMore": "显示更多", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "选择区域", + "regionSelectorInfo": "选择区域以帮助提升您所在地的性能。您不必与服务器在相同的区域。", + "regionSelectorPlaceholder": "选择一个区域", + "regionSelectorComingSoon": "即将推出", + "billingLoadingSubscription": "正在加载订阅...", + "billingFreeTier": "免费层", + "billingWarningOverLimit": "警告:您已超出一个或多个使用限制。在您修改订阅或调整使用情况之前,您的站点将无法连接。", + "billingUsageLimitsOverview": "使用限制概览", + "billingMonitorUsage": "监控您的使用情况以对比已配置的限制。如需提高限制请联系我们 support@fossorial.io。", + "billingDataUsage": "数据使用情况", + "billingOnlineTime": "站点在线时间", + "billingUsers": "活跃用户", + "billingDomains": "活跃域", + "billingRemoteExitNodes": "活跃自托管节点", + "billingNoLimitConfigured": "未配置限制", + "billingEstimatedPeriod": "估计结算周期", + "billingIncludedUsage": "包含的使用量", + "billingIncludedUsageDescription": "您当前订阅计划中包含的使用量", + "billingFreeTierIncludedUsage": "免费层使用额度", + "billingIncluded": "包含", + "billingEstimatedTotal": "预计总额:", + "billingNotes": "备注", + "billingEstimateNote": "这是根据您当前使用情况的估算。", + "billingActualChargesMayVary": "实际费用可能会有变化。", + "billingBilledAtEnd": "您将在结算周期结束时被计费。", + "billingModifySubscription": "修改订阅", + "billingStartSubscription": "开始订阅", + "billingRecurringCharge": "周期性收费", + "billingManageSubscriptionSettings": "管理您的订阅设置和偏好", + "billingNoActiveSubscription": "您没有活跃的订阅。开始订阅以增加使用限制。", + "billingFailedToLoadSubscription": "无法加载订阅", + "billingFailedToLoadUsage": "无法加载使用情况", + "billingFailedToGetCheckoutUrl": "无法获取结账网址", + "billingPleaseTryAgainLater": "请稍后再试。", + "billingCheckoutError": "结账错误", + "billingFailedToGetPortalUrl": "无法获取门户网址", + "billingPortalError": "门户错误", + "billingDataUsageInfo": "当连接到云端时,您将为通过安全隧道传输的所有数据收取费用。 这包括您所有站点的进出流量。 当您达到上限时,您的站点将断开连接,直到您升级计划或减少使用。使用节点时不收取数据。", + "billingOnlineTimeInfo": "您要根据您的网站连接到云端的时间长短收取费用。 例如,44,640分钟等于一个24/7全月运行的网站。 当您达到上限时,您的站点将断开连接,直到您升级计划或减少使用。使用节点时不收取费用。", + "billingUsersInfo": "根据您组织中的活跃用户数量收费。按日计算账单。", + "billingDomainInfo": "根据组织中活跃域的数量收费。按日计算账单。", + "billingRemoteExitNodesInfo": "根据您组织中已管理节点的数量收费。按日计算账单。", "domainNotFound": "域未找到", "domainNotFoundDescription": "此资源已禁用,因为该域不再在我们的系统中存在。请为此资源设置一个新域。", "failed": "失败", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS 更改可能需要一些时间才能在互联网上传播。这可能需要从几分钟到 48 小时,具体取决于您的 DNS 提供商和 TTL 设置。", "resourcePortRequired": "非 HTTP 资源必须输入端口号", "resourcePortNotAllowed": "HTTP 资源不应设置端口号", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "价格计算器", "signUpTerms": { "IAgreeToThe": "我同意", "termsOfService": "服务条款", @@ -1390,7 +1390,7 @@ "clientOlmCredentials": "Olm 凭据", "clientOlmCredentialsDescription": "这是 Olm 服务器的身份验证方式", "olmEndpoint": "Olm 端点", - "olmId": "Olm ID", + "olmId": "Olm ID", "olmSecretKey": "Olm 私钥", "clientCredentialsSave": "保存您的凭据", "clientCredentialsSaveDescription": "该信息仅会显示一次,请确保将其复制到安全位置。", @@ -1412,41 +1412,41 @@ "addNewTarget": "添加新目标", "targetsList": "目标列表", "targetErrorDuplicateTargetFound": "找到重复的目标", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckHealthy": "正常", + "healthCheckUnhealthy": "不正常", + "healthCheckUnknown": "未知", + "healthCheck": "健康检查", + "configureHealthCheck": "配置健康检查", + "configureHealthCheckDescription": "为 {target} 设置健康监控", + "enableHealthChecks": "启用健康检查", + "enableHealthChecksDescription": "监视此目标的健康状况。如果需要,您可以监视一个不同的终点。", + "healthScheme": "方法", + "healthSelectScheme": "选择方法", + "healthCheckPath": "路径", + "healthHostname": "IP / 主机", + "healthPort": "端口", + "healthCheckPathDescription": "用于检查健康状态的路径。", + "healthyIntervalSeconds": "正常间隔", + "unhealthyIntervalSeconds": "不正常间隔", + "IntervalSeconds": "正常间隔", + "timeoutSeconds": "超时", + "timeIsInSeconds": "时间以秒为单位", + "retryAttempts": "重试次数", + "expectedResponseCodes": "期望响应代码", + "expectedResponseCodesDescription": "HTTP 状态码表示健康状态。如留空,200-300 被视为健康。", "customHeaders": "自定义标题", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "头部新行分隔:头部名称:值", + "headersValidationError": "头部必须是格式:头部名称:值。", + "saveHealthCheck": "保存健康检查", + "healthCheckSaved": "健康检查已保存", + "healthCheckSavedDescription": "健康检查配置已成功保存。", + "healthCheckError": "健康检查错误", + "healthCheckErrorDescription": "保存健康检查配置时出错", + "healthCheckPathRequired": "健康检查路径为必填项", + "healthCheckMethodRequired": "HTTP 方法为必填项", + "healthCheckIntervalMin": "检查间隔必须至少为 5 秒", + "healthCheckTimeoutMin": "超时必须至少为 1 秒", + "healthCheckRetryMin": "重试次数必须至少为 1 次", "httpMethod": "HTTP 方法", "selectHttpMethod": "选择 HTTP 方法", "domainPickerSubdomainLabel": "子域名", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "输入一个子域名以搜索并从可用免费域名中选择。", "domainPickerFreeDomains": "免费域名", "domainPickerSearchForAvailableDomains": "搜索可用域名", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "注意:自托管实例当前不提供免费的域名。", "resourceDomain": "域名", "resourceEditDomain": "编辑域名", "siteName": "站点名称", @@ -1543,72 +1543,72 @@ "autoLoginError": "自动登录错误", "autoLoginErrorNoRedirectUrl": "未从身份提供商收到重定向URL。", "autoLoginErrorGeneratingUrl": "生成身份验证URL失败。", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "管理自托管", + "remoteExitNodeDescription": "管理节点以扩展您的网络连接", + "remoteExitNodes": "节点", + "searchRemoteExitNodes": "搜索节点...", + "remoteExitNodeAdd": "添加节点", + "remoteExitNodeErrorDelete": "删除节点时出错", + "remoteExitNodeQuestionRemove": "您确定要从组织中删除 {selectedNode} 节点吗?", + "remoteExitNodeMessageRemove": "一旦删除,该节点将不再能够访问。", + "remoteExitNodeMessageConfirm": "要确认,请输入以下节点的名称。", + "remoteExitNodeConfirmDelete": "确认删除节点", + "remoteExitNodeDelete": "删除节点", + "sidebarRemoteExitNodes": "节点", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "创建节点", + "description": "创建一个新节点来扩展您的网络连接", + "viewAllButton": "查看所有节点", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "创建策略", + "description": "选择此选项以手动配置您的节点或生成新凭据。", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "采纳节点", + "description": "如果您已经拥有该节点的凭据,请选择此项。" }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "生成密钥", + "description": "如果您想为节点生成新密钥,请选择此选项" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "采纳现有节点", + "description": "输入您想要采用的现有节点的凭据", + "nodeIdLabel": "节点 ID", + "nodeIdDescription": "您想要采用的现有节点的 ID", + "secretLabel": "密钥", + "secretDescription": "现有节点的秘密密钥", + "submitButton": "采用节点" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "生成的凭据", + "description": "使用这些生成的凭据来配置您的节点", + "nodeIdTitle": "节点 ID", + "secretTitle": "密钥", + "saveCredentialsTitle": "将凭据添加到配置中", + "saveCredentialsDescription": "将这些凭据添加到您的自托管 Pangolin 节点配置文件中以完成连接。", + "submitButton": "创建节点" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "在通过现有节点时需要节点ID和密钥" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "无法加载默认值", + "defaultsNotLoaded": "默认值未加载", + "createFailed": "创建节点失败" }, "success": { - "created": "Node created successfully" + "created": "节点创建成功" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "节点选择", + "remoteExitNodeSelectionDescription": "为此本地站点选择要路由流量的节点", + "remoteExitNodeRequired": "必须为本地站点选择节点", + "noRemoteExitNodesAvailable": "无可用节点", + "noRemoteExitNodesAvailableDescription": "此组织没有可用的节点。首先创建一个节点来使用本地站点。", + "exitNode": "出口节点", + "country": "国家", + "rulesMatchCountry": "当前基于源 IP", "managedSelfHosted": { "title": "托管自托管", "description": "更可靠和低维护自我托管的 Pangolin 服务器,带有额外的铃声和告密器", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "检测到国际域", "willbestoredas": "储存为:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", - "idpGoogleTitle": "Google", + "roleMappingDescription": "确定当用户启用自动配送时如何分配他们的角色。", + "selectRole": "选择角色", + "roleMappingExpression": "表达式", + "selectRolePlaceholder": "选择角色", + "selectRoleDescription": "选择一个角色,从此身份提供商分配给所有用户", + "roleMappingExpressionDescription": "输入一个 JMESPath 表达式来从 ID 令牌提取角色信息", + "idpTenantIdRequired": "租户ID是必需的", + "invalidValue": "无效的值", + "idpTypeLabel": "身份提供者类型", + "roleMappingExpressionPlaceholder": "例如: contains(group, 'admin' &'Admin' || 'Member'", + "idpGoogleConfiguration": "Google 配置", + "idpGoogleConfigurationDescription": "配置您的 Google OAuth2 凭据", + "idpGoogleClientIdDescription": "您的 Google OAuth2 客户端 ID", + "idpGoogleClientSecretDescription": "您的 Google OAuth2 客户端密钥", + "idpAzureConfiguration": "Azure Entra ID 配置", + "idpAzureConfigurationDescription": "配置您的 Azure Entra ID OAuth2 凭据", + "idpTenantId": "租户 ID", + "idpTenantIdPlaceholder": "您的租户ID", + "idpAzureTenantIdDescription": "您的 Azure 租户ID (在 Azure Active Directory 概览中发现)", + "idpAzureClientIdDescription": "您的 Azure 应用程序注册客户端 ID", + "idpAzureClientSecretDescription": "您的 Azure 应用程序注册客户端密钥", + "idpGoogleTitle": "谷歌", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Google 配置", + "idpAzureConfigurationTitle": "Azure Entra ID 配置", + "idpTenantIdLabel": "租户 ID", + "idpAzureClientIdDescription2": "您的 Azure 应用程序注册客户端 ID", + "idpAzureClientSecretDescription2": "您的 Azure 应用程序注册客户端密钥", "idpGoogleDescription": "Google OAuth2/OIDC 提供商", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "子网", + "subnetDescription": "此组织网络配置的子网。", + "authPage": "认证页面", + "authPageDescription": "配置您的组织认证页面", + "authPageDomain": "认证页面域", + "noDomainSet": "没有域设置", + "changeDomain": "更改域", + "selectDomain": "选择域", + "restartCertificate": "重新启动证书", + "editAuthPageDomain": "编辑认证页面域", + "setAuthPageDomain": "设置认证页面域", + "failedToFetchCertificate": "获取证书失败", + "failedToRestartCertificate": "重新启动证书失败", + "addDomainToEnableCustomAuthPages": "为您的组织添加域名以启用自定义认证页面", + "selectDomainForOrgAuthPage": "选择组织认证页面的域", "domainPickerProvidedDomain": "提供的域", "domainPickerFreeProvidedDomain": "免费提供的域", "domainPickerVerified": "已验证", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" 无法为 {domain} 变为有效。", "domainPickerSubdomainSanitized": "子域已净化", "domainPickerSubdomainCorrected": "\"{sub}\" 已被更正为 \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "登录到您的组织", + "orgAuthChooseIdpDescription": "选择您的身份提供商以继续", + "orgAuthNoIdpConfigured": "此机构没有配置任何身份提供者。您可以使用您的 Pangolin 身份登录。", + "orgAuthSignInWithPangolin": "使用 Pangolin 登录", + "subscriptionRequiredToUse": "需要订阅才能使用此功能。", + "idpDisabled": "身份提供者已禁用。", + "orgAuthPageDisabled": "组织认证页面已禁用。", + "domainRestartedDescription": "域验证重新启动成功", "resourceAddEntrypointsEditFile": "编辑文件:config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "编辑文件:docker-compose.yml", "emailVerificationRequired": "需要电子邮件验证。 请通过 {dashboardUrl}/auth/login 再次登录以完成此步骤。 然后,回到这里。", "twoFactorSetupRequired": "需要设置双因素身份验证。 请通过 {dashboardUrl}/auth/login 再次登录以完成此步骤。 然后,回到这里。", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "更新身份验证页面设置时出错", + "authPageUpdated": "身份验证页面更新成功", + "healthCheckNotAvailable": "本地的", + "rewritePath": "重写路径", + "rewritePathDescription": "在转发到目标之前,可以选择重写路径。" } From 0624087373bce7a6926c8ed4dbee22bb540eafae Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:17:08 -0700 Subject: [PATCH 27/28] New translations en-us.json (Norwegian Bokmal) --- messages/nb-NO.json | 372 ++++++++++++++++++++++---------------------- 1 file changed, 186 insertions(+), 186 deletions(-) diff --git a/messages/nb-NO.json b/messages/nb-NO.json index 8d789949..84dc5266 100644 --- a/messages/nb-NO.json +++ b/messages/nb-NO.json @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "Enkleste måte å opprette et inngangspunkt i nettverket ditt. Ingen ekstra oppsett.", "siteWg": "Grunnleggende WireGuard", "siteWgDescription": "Bruk hvilken som helst WireGuard-klient for å etablere en tunnel. Manuell NAT-oppsett kreves.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Bruk hvilken som helst WireGuard-klient for å etablere en tunnel. Manuell NAT-oppsett er nødvendig. FUNGERER KUN PÅ SELVHOSTEDE NODER", "siteLocalDescription": "Kun lokale ressurser. Ingen tunnelering.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Kun lokale ressurser. Ingen tunneling. FUNGERER KUN PÅ SELVHOSTEDE NODER", "siteSeeAll": "Se alle områder", "siteTunnelDescription": "Bestem hvordan du vil koble deg til ditt område", "siteNewtCredentials": "Newt påloggingsinformasjon", @@ -118,7 +118,7 @@ "usageExamples": "Brukseksempler", "tokenId": "Token-ID", "requestHeades": "Request Headers", - "queryParameter": "Query Parameter", + "queryParameter": "Forespørsel Params", "importantNote": "Viktig merknad", "shareImportantDescription": "Av sikkerhetsgrunner anbefales det å bruke headere fremfor query parametere der det er mulig, da query parametere kan logges i serverlogger eller nettleserhistorikk.", "token": "Token", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS-ressurs", "resourceHTTPDescription": "Proxy-forespørsler til appen din over HTTPS ved bruk av et underdomene eller grunndomene.", "resourceRaw": "Rå TCP/UDP-ressurs", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Proxyer forespørsler til appen din over TCP/UDP ved å bruke et portnummer.", "resourceCreate": "Opprett ressurs", "resourceCreateDescription": "Følg trinnene nedenfor for å opprette en ny ressurs", "resourceSeeAll": "Se alle ressurser", @@ -168,9 +168,9 @@ "siteSelect": "Velg område", "siteSearch": "Søk i område", "siteNotFound": "Ingen område funnet.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Velg land", + "searchCountries": "Søk land...", + "noCountryFound": "Ingen land funnet.", "siteSelectionDescription": "Dette området vil gi tilkobling til mål.", "resourceType": "Ressurstype", "resourceTypeDescription": "Bestem hvordan du vil få tilgang til ressursen din", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Underdomene: {subdomain}", "domainPickerNamespace": "Navnerom: {namespace}", "domainPickerShowMore": "Vis mer", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Velg Region", + "regionSelectorInfo": "Å velge en region hjelper oss med å gi bedre ytelse for din lokasjon. Du trenger ikke være i samme region som serveren.", + "regionSelectorPlaceholder": "Velg en region", + "regionSelectorComingSoon": "Kommer snart", + "billingLoadingSubscription": "Laster abonnement...", + "billingFreeTier": "Gratis nivå", + "billingWarningOverLimit": "Advarsel: Du har overskredet en eller flere bruksgrenser. Nettstedene dine vil ikke koble til før du endrer abonnementet ditt eller justerer bruken.", + "billingUsageLimitsOverview": "Oversikt over bruksgrenser", + "billingMonitorUsage": "Overvåk bruken din i forhold til konfigurerte grenser. Hvis du trenger økte grenser, vennligst kontakt support@fossorial.io.", + "billingDataUsage": "Databruk", + "billingOnlineTime": "Online tid for nettsteder", + "billingUsers": "Aktive brukere", + "billingDomains": "Aktive domener", + "billingRemoteExitNodes": "Aktive selvstyrte noder", + "billingNoLimitConfigured": "Ingen grense konfigurert", + "billingEstimatedPeriod": "Estimert faktureringsperiode", + "billingIncludedUsage": "Inkludert Bruk", + "billingIncludedUsageDescription": "Bruk inkludert i din nåværende abonnementsplan", + "billingFreeTierIncludedUsage": "Gratis nivå bruksgrenser", + "billingIncluded": "inkludert", + "billingEstimatedTotal": "Estimert Totalt:", + "billingNotes": "Notater", + "billingEstimateNote": "Dette er et estimat basert på din nåværende bruk.", + "billingActualChargesMayVary": "Faktiske kostnader kan variere.", + "billingBilledAtEnd": "Du vil bli fakturert ved slutten av faktureringsperioden.", + "billingModifySubscription": "Endre abonnement", + "billingStartSubscription": "Start abonnement", + "billingRecurringCharge": "Innkommende Avgift", + "billingManageSubscriptionSettings": "Administrer abonnementsinnstillinger og preferanser", + "billingNoActiveSubscription": "Du har ikke et aktivt abonnement. Start abonnementet ditt for å øke bruksgrensene.", + "billingFailedToLoadSubscription": "Klarte ikke å laste abonnement", + "billingFailedToLoadUsage": "Klarte ikke å laste bruksdata", + "billingFailedToGetCheckoutUrl": "Mislyktes å få betalingslenke", + "billingPleaseTryAgainLater": "Vennligst prøv igjen senere.", + "billingCheckoutError": "Kasserror", + "billingFailedToGetPortalUrl": "Mislyktes å hente portal URL", + "billingPortalError": "Portalfeil", + "billingDataUsageInfo": "Du er ladet for all data som overføres gjennom dine sikre tunneler når du er koblet til skyen. Dette inkluderer både innkommende og utgående trafikk på alle dine nettsteder. Når du når grensen din, vil sidene koble fra til du oppgraderer planen eller reduserer bruken. Data belastes ikke ved bruk av EK-grupper.", + "billingOnlineTimeInfo": "Du er ladet på hvor lenge sidene dine forblir koblet til skyen. For eksempel tilsvarer 44,640 minutter ett nettsted som går 24/7 i en hel måned. Når du når grensen din, vil sidene koble fra til du oppgraderer planen eller reduserer bruken. Tid belastes ikke når du bruker noder.", + "billingUsersInfo": "Du belastes for hver bruker i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive brukerkontoer i organisasjonen din.", + "billingDomainInfo": "Du belastes for hvert domene i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive domenekontoer i organisasjonen din.", + "billingRemoteExitNodesInfo": "Du belastes for hver styrt node i organisasjonen din. Faktureringen beregnes daglig basert på antall aktive styrte noder i organisasjonen din.", "domainNotFound": "Domene ikke funnet", "domainNotFoundDescription": "Denne ressursen er deaktivert fordi domenet ikke lenger eksisterer i systemet vårt. Vennligst angi et nytt domene for denne ressursen.", "failed": "Mislyktes", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "DNS-endringer kan ta litt tid å propagere over internett. Dette kan ta fra noen få minutter til 48 timer, avhengig av din DNS-leverandør og TTL-innstillinger.", "resourcePortRequired": "Portnummer er påkrevd for ikke-HTTP-ressurser", "resourcePortNotAllowed": "Portnummer skal ikke angis for HTTP-ressurser", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Pris Kalkulator", "signUpTerms": { "IAgreeToThe": "Jeg godtar", "termsOfService": "brukervilkårene", @@ -1412,41 +1412,41 @@ "addNewTarget": "Legg til nytt mål", "targetsList": "Liste over mål", "targetErrorDuplicateTargetFound": "Duplikat av mål funnet", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", + "healthCheckHealthy": "Sunn", + "healthCheckUnhealthy": "Usunn", + "healthCheckUnknown": "Ukjent", + "healthCheck": "Helsekontroll", + "configureHealthCheck": "Konfigurer Helsekontroll", + "configureHealthCheckDescription": "Sett opp helsekontroll for {target}", + "enableHealthChecks": "Aktiver Helsekontroller", + "enableHealthChecksDescription": "Overvåk helsen til dette målet. Du kan overvåke et annet endepunkt enn målet hvis nødvendig.", + "healthScheme": "Metode", + "healthSelectScheme": "Velg metode", + "healthCheckPath": "Sti", + "healthHostname": "IP / Vert", "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckPathDescription": "Stien for å sjekke helsestatus.", + "healthyIntervalSeconds": "Sunt intervall", + "unhealthyIntervalSeconds": "Usunt intervall", + "IntervalSeconds": "Sunt intervall", + "timeoutSeconds": "Tidsavbrudd", + "timeIsInSeconds": "Tid er i sekunder", + "retryAttempts": "Forsøk på nytt", + "expectedResponseCodes": "Forventede svarkoder", + "expectedResponseCodesDescription": "HTTP-statuskode som indikerer sunn status. Hvis den blir stående tom, regnes 200-300 som sunn.", "customHeaders": "Egendefinerte topptekster", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Overskrifter som er adskilt med linje: Overskriftsnavn: verdi", + "headersValidationError": "Topptekst må være i formatet: header-navn: verdi.", + "saveHealthCheck": "Lagre Helsekontroll", + "healthCheckSaved": "Helsekontroll Lagret", + "healthCheckSavedDescription": "Helsekontrollkonfigurasjonen ble lagret", + "healthCheckError": "Helsekontrollfeil", + "healthCheckErrorDescription": "Det oppstod en feil under lagring av helsekontrollkonfigurasjonen", + "healthCheckPathRequired": "Helsekontrollsti er påkrevd", + "healthCheckMethodRequired": "HTTP-metode er påkrevd", + "healthCheckIntervalMin": "Sjekkeintervallet må være minst 5 sekunder", + "healthCheckTimeoutMin": "Timeout må være minst 1 sekund", + "healthCheckRetryMin": "Forsøk på nytt må være minst 1", "httpMethod": "HTTP-metode", "selectHttpMethod": "Velg HTTP-metode", "domainPickerSubdomainLabel": "Underdomene", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Skriv inn et underdomene for å søke og velge blant tilgjengelige gratis domener.", "domainPickerFreeDomains": "Gratis domener", "domainPickerSearchForAvailableDomains": "Søk etter tilgjengelige domener", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Merk: Gratis tilbudte domener er ikke tilgjengelig for selv-hostede instanser akkurat nå.", "resourceDomain": "Domene", "resourceEditDomain": "Rediger domene", "siteName": "Områdenavn", @@ -1543,72 +1543,72 @@ "autoLoginError": "Feil ved automatisk innlogging", "autoLoginErrorNoRedirectUrl": "Ingen omdirigerings-URL mottatt fra identitetsleverandøren.", "autoLoginErrorGeneratingUrl": "Kunne ikke generere autentiserings-URL.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Administrer Selv-Hostet", + "remoteExitNodeDescription": "Administrer noder for å forlenge nettverkstilkoblingen din", + "remoteExitNodes": "Noder", + "searchRemoteExitNodes": "Søk noder...", + "remoteExitNodeAdd": "Legg til Node", + "remoteExitNodeErrorDelete": "Feil ved sletting av node", + "remoteExitNodeQuestionRemove": "Er du sikker på at du vil fjerne noden {selectedNode} fra organisasjonen?", + "remoteExitNodeMessageRemove": "Når noden er fjernet, vil ikke lenger være tilgjengelig.", + "remoteExitNodeMessageConfirm": "For å bekrefte, skriv inn navnet på noden nedenfor.", + "remoteExitNodeConfirmDelete": "Bekreft sletting av Node", + "remoteExitNodeDelete": "Slett Node", + "sidebarRemoteExitNodes": "Noder", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Opprett node", + "description": "Opprett en ny node for å utvide nettverkstilkoblingen din", + "viewAllButton": "Vis alle koder", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Opprettelsesstrategi", + "description": "Velg denne for manuelt å konfigurere noden eller generere nye legitimasjoner.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Adopter Node", + "description": "Velg dette hvis du allerede har legitimasjon til noden." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Generer Nøkler", + "description": "Velg denne hvis du vil generere nye nøkler for noden" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Adopter Eksisterende Node", + "description": "Skriv inn opplysningene til den eksisterende noden du vil adoptere", + "nodeIdLabel": "Node-ID", + "nodeIdDescription": "ID-en til den eksisterende noden du vil adoptere", + "secretLabel": "Sikkerhetsnøkkel", + "secretDescription": "Den hemmelige nøkkelen til en eksisterende node", + "submitButton": "Adopter Node" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Genererte Legitimasjoner", + "description": "Bruk disse genererte opplysningene for å konfigurere noden din", + "nodeIdTitle": "Node-ID", + "secretTitle": "Sikkerhet", + "saveCredentialsTitle": "Legg til Legitimasjoner til Config", + "saveCredentialsDescription": "Legg til disse legitimasjonene i din selv-hostede Pangolin node-konfigurasjonsfil for å fullføre koblingen.", + "submitButton": "Opprett node" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "Node ID og Secret er påkrevd når du adopterer en eksisterende node" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Feil ved lasting av standarder", + "defaultsNotLoaded": "Standarder ikke lastet", + "createFailed": "Kan ikke opprette node" }, "success": { - "created": "Node created successfully" + "created": "Node opprettet" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Noden utvalg", + "remoteExitNodeSelectionDescription": "Velg en node for å sende trafikk gjennom for dette lokale nettstedet", + "remoteExitNodeRequired": "En node må velges for lokale nettsteder", + "noRemoteExitNodesAvailable": "Ingen noder tilgjengelig", + "noRemoteExitNodesAvailableDescription": "Ingen noder er tilgjengelige for denne organisasjonen. Opprett en node først for å bruke lokale nettsteder.", + "exitNode": "Utgangsnode", + "country": "Land", + "rulesMatchCountry": "For tiden basert på kilde IP", "managedSelfHosted": { "title": "Administrert selv-hostet", "description": "Sikre og lavvedlikeholdsservere, selvbetjente Pangolin med ekstra klokker, og understell", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Internasjonalt domene oppdaget", "willbestoredas": "Vil bli lagret som:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Bestem hvordan roller tilordnes brukere når innloggingen er aktivert når autog-rapportering er aktivert.", + "selectRole": "Velg en rolle", + "roleMappingExpression": "Uttrykk", + "selectRolePlaceholder": "Velg en rolle", + "selectRoleDescription": "Velg en rolle å tilordne alle brukere fra denne identitet leverandøren", + "roleMappingExpressionDescription": "Skriv inn et JMESPath uttrykk for å hente rolleinformasjon fra ID-nøkkelen", + "idpTenantIdRequired": "Bedriftens ID kreves", + "invalidValue": "Ugyldig verdi", + "idpTypeLabel": "Identitet leverandør type", + "roleMappingExpressionPlaceholder": "F.eks. inneholder(grupper, 'admin') && 'Admin' ⋅'Medlem'", + "idpGoogleConfiguration": "Google Konfigurasjon", + "idpGoogleConfigurationDescription": "Konfigurer din Google OAuth2 legitimasjon", + "idpGoogleClientIdDescription": "Din Google OAuth2-klient-ID", + "idpGoogleClientSecretDescription": "Google OAuth2-klienten din hemmelig", + "idpAzureConfiguration": "Azure Entra ID konfigurasjon", + "idpAzureConfigurationDescription": "Konfigurere din Azure Entra ID OAuth2 legitimasjon", + "idpTenantId": "Leietaker-ID", + "idpTenantIdPlaceholder": "din-tenant-id", + "idpAzureTenantIdDescription": "Din Azure leie-ID (funnet i Azure Active Directory-oversikten)", + "idpAzureClientIdDescription": "Din Azure App registrerings klient-ID", + "idpAzureClientSecretDescription": "Din Azure App registrerings klient hemmelig", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Google Konfigurasjon", + "idpAzureConfigurationTitle": "Azure Entra ID konfigurasjon", + "idpTenantIdLabel": "Leietaker-ID", + "idpAzureClientIdDescription2": "Din Azure App registrerings klient-ID", + "idpAzureClientSecretDescription2": "Din Azure App registrerings klient hemmelig", "idpGoogleDescription": "Google OAuth2/OIDC leverandør", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Subnett", + "subnetDescription": "Undernettverket for denne organisasjonens nettverkskonfigurasjon.", + "authPage": "Autentiseringsside", + "authPageDescription": "Konfigurer autoriseringssiden for din organisasjon", + "authPageDomain": "Autentiseringsside domene", + "noDomainSet": "Ingen domene valgt", + "changeDomain": "Endre domene", + "selectDomain": "Velg domene", + "restartCertificate": "Omstart sertifikat", + "editAuthPageDomain": "Rediger auth sidedomene", + "setAuthPageDomain": "Angi autoriseringsside domene", + "failedToFetchCertificate": "Kunne ikke hente sertifikat", + "failedToRestartCertificate": "Kan ikke starte sertifikat", + "addDomainToEnableCustomAuthPages": "Legg til et domene for å aktivere egendefinerte autentiseringssider for organisasjonen din", + "selectDomainForOrgAuthPage": "Velg et domene for organisasjonens autentiseringsside", "domainPickerProvidedDomain": "Gitt domene", "domainPickerFreeProvidedDomain": "Gratis oppgitt domene", "domainPickerVerified": "Bekreftet", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "\"{sub}\" kunne ikke gjøres gyldig for {domain}.", "domainPickerSubdomainSanitized": "Underdomenet som ble sanivert", "domainPickerSubdomainCorrected": "\"{sub}\" var korrigert til \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Logg inn på din organisasjon", + "orgAuthChooseIdpDescription": "Velg din identitet leverandør for å fortsette", + "orgAuthNoIdpConfigured": "Denne organisasjonen har ikke noen identitetstjeneste konfigurert. Du kan i stedet logge inn med Pangolin identiteten din.", + "orgAuthSignInWithPangolin": "Logg inn med Pangolin", + "subscriptionRequiredToUse": "Et abonnement er påkrevd for å bruke denne funksjonen.", + "idpDisabled": "Identitetsleverandører er deaktivert.", + "orgAuthPageDisabled": "Informasjons-siden for organisasjon er deaktivert.", + "domainRestartedDescription": "Domene-verifiseringen ble startet på nytt", "resourceAddEntrypointsEditFile": "Rediger fil: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Rediger fil: docker-compose.yml", "emailVerificationRequired": "E-postbekreftelse er nødvendig. Logg inn på nytt via {dashboardUrl}/auth/login og fullfør dette trinnet. Kom deretter tilbake her.", "twoFactorSetupRequired": "To-faktor autentiseringsoppsett er nødvendig. Vennligst logg inn igjen via {dashboardUrl}/auth/login og fullfør dette steget. Kom deretter tilbake her.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", - "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "authPageErrorUpdateMessage": "Det oppstod en feil under oppdatering av innstillingene for godkjenningssiden", + "authPageUpdated": "Godkjenningsside oppdatert", + "healthCheckNotAvailable": "Lokal", + "rewritePath": "Omskriv sti", + "rewritePathDescription": "Valgfritt omskrive stien før videresending til målet." } From 033653e2343ad0c4c73b5762d68291474a4db608 Mon Sep 17 00:00:00 2001 From: Owen Schwartz Date: Sat, 4 Oct 2025 22:17:09 -0700 Subject: [PATCH 28/28] New translations en-us.json (Spanish) --- messages/es-ES.json | 376 ++++++++++++++++++++++---------------------- 1 file changed, 188 insertions(+), 188 deletions(-) diff --git a/messages/es-ES.json b/messages/es-ES.json index c816ca6c..a1b92f8b 100644 --- a/messages/es-ES.json +++ b/messages/es-ES.json @@ -67,7 +67,7 @@ "siteDocker": "Expandir para detalles de despliegue de Docker", "toggle": "Cambiar", "dockerCompose": "Componer Docker", - "dockerRun": "Docker Run", + "dockerRun": "Ejecutar Docker", "siteLearnLocal": "Los sitios locales no tienen túnel, aprender más", "siteConfirmCopy": "He copiado la configuración", "searchSitesProgress": "Buscar sitios...", @@ -94,9 +94,9 @@ "siteNewtTunnelDescription": "La forma más fácil de crear un punto de entrada en tu red. Sin configuración adicional.", "siteWg": "Wirex Guardia Básica", "siteWgDescription": "Utilice cualquier cliente Wirex Guard para establecer un túnel. Se requiere una configuración manual de NAT.", - "siteWgDescriptionSaas": "Use any WireGuard client to establish a tunnel. Manual NAT setup required.", + "siteWgDescriptionSaas": "Utilice cualquier cliente de WireGuard para establecer un túnel. Se requiere configuración manual de NAT. SOLO FUNCIONA EN NODOS AUTOGESTIONADOS", "siteLocalDescription": "Solo recursos locales. Sin túneles.", - "siteLocalDescriptionSaas": "Local resources only. No tunneling.", + "siteLocalDescriptionSaas": "Solo recursos locales. Sin túneles. SOLO FUNCIONA EN NODOS AUTOGESTIONADOS", "siteSeeAll": "Ver todos los sitios", "siteTunnelDescription": "Determina cómo quieres conectarte a tu sitio", "siteNewtCredentials": "Credenciales nuevas", @@ -159,7 +159,7 @@ "resourceHTTP": "HTTPS Recurso", "resourceHTTPDescription": "Solicitudes de proxy a tu aplicación sobre HTTPS usando un subdominio o dominio base.", "resourceRaw": "Recurso TCP/UDP sin procesar", - "resourceRawDescription": "Proxy requests to your app over TCP/UDP using a port number. This only works when sites are connected to nodes.", + "resourceRawDescription": "Solicitudes de proxy a tu aplicación a través de TCP/UDP usando un número de puerto.", "resourceCreate": "Crear Recurso", "resourceCreateDescription": "Siga los siguientes pasos para crear un nuevo recurso", "resourceSeeAll": "Ver todos los recursos", @@ -168,9 +168,9 @@ "siteSelect": "Seleccionar sitio", "siteSearch": "Buscar sitio", "siteNotFound": "Sitio no encontrado.", - "selectCountry": "Select country", - "searchCountries": "Search countries...", - "noCountryFound": "No country found.", + "selectCountry": "Seleccionar país", + "searchCountries": "Buscar países...", + "noCountryFound": "Ningún país encontrado.", "siteSelectionDescription": "Este sitio proporcionará conectividad al objetivo.", "resourceType": "Tipo de recurso", "resourceTypeDescription": "Determina cómo quieres acceder a tu recurso", @@ -817,7 +817,7 @@ "redirectUrl": "URL de redirección", "redirectUrlAbout": "Acerca de la URL de redirección", "redirectUrlAboutDescription": "Esta es la URL a la que los usuarios serán redireccionados después de la autenticación. Necesitas configurar esta URL en la configuración de tu proveedor de identidad.", - "pangolinAuth": "Auth - Pangolin", + "pangolinAuth": "Autenticación - Pangolin", "verificationCodeLengthRequirements": "Tu código de verificación debe tener 8 caracteres.", "errorOccurred": "Se ha producido un error", "emailErrorVerify": "No se pudo verificar el email:", @@ -1220,7 +1220,7 @@ "billing": "Facturación", "orgBillingDescription": "Gestiona tu información de facturación y suscripciones", "github": "GitHub", - "pangolinHosted": "Pangolin Hosted", + "pangolinHosted": "Pangolin Alojado", "fossorial": "Fossorial", "completeAccountSetup": "Completar configuración de cuenta", "completeAccountSetupDescription": "Establece tu contraseña para comenzar", @@ -1258,48 +1258,48 @@ "domainPickerSubdomain": "Subdominio: {subdomain}", "domainPickerNamespace": "Espacio de nombres: {namespace}", "domainPickerShowMore": "Mostrar más", - "regionSelectorTitle": "Select Region", - "regionSelectorInfo": "Selecting a region helps us provide better performance for your location. You do not have to be in the same region as your server.", - "regionSelectorPlaceholder": "Choose a region", - "regionSelectorComingSoon": "Coming Soon", - "billingLoadingSubscription": "Loading subscription...", - "billingFreeTier": "Free Tier", - "billingWarningOverLimit": "Warning: You have exceeded one or more usage limits. Your sites will not connect until you modify your subscription or adjust your usage.", - "billingUsageLimitsOverview": "Usage Limits Overview", - "billingMonitorUsage": "Monitor your usage against configured limits. If you need limits increased please contact us support@fossorial.io.", - "billingDataUsage": "Data Usage", - "billingOnlineTime": "Site Online Time", - "billingUsers": "Active Users", - "billingDomains": "Active Domains", - "billingRemoteExitNodes": "Active Self-hosted Nodes", - "billingNoLimitConfigured": "No limit configured", - "billingEstimatedPeriod": "Estimated Billing Period", - "billingIncludedUsage": "Included Usage", - "billingIncludedUsageDescription": "Usage included with your current subscription plan", - "billingFreeTierIncludedUsage": "Free tier usage allowances", - "billingIncluded": "included", - "billingEstimatedTotal": "Estimated Total:", - "billingNotes": "Notes", - "billingEstimateNote": "This is an estimate based on your current usage.", - "billingActualChargesMayVary": "Actual charges may vary.", - "billingBilledAtEnd": "You will be billed at the end of the billing period.", - "billingModifySubscription": "Modify Subscription", - "billingStartSubscription": "Start Subscription", - "billingRecurringCharge": "Recurring Charge", - "billingManageSubscriptionSettings": "Manage your subscription settings and preferences", - "billingNoActiveSubscription": "You don't have an active subscription. Start your subscription to increase usage limits.", - "billingFailedToLoadSubscription": "Failed to load subscription", - "billingFailedToLoadUsage": "Failed to load usage", - "billingFailedToGetCheckoutUrl": "Failed to get checkout URL", - "billingPleaseTryAgainLater": "Please try again later.", - "billingCheckoutError": "Checkout Error", - "billingFailedToGetPortalUrl": "Failed to get portal URL", - "billingPortalError": "Portal Error", - "billingDataUsageInfo": "You're charged for all data transferred through your secure tunnels when connected to the cloud. This includes both incoming and outgoing traffic across all your sites. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Data is not charged when using nodes.", - "billingOnlineTimeInfo": "You're charged based on how long your sites stay connected to the cloud. For example, 44,640 minutes equals one site running 24/7 for a full month. When you reach your limit, your sites will disconnect until you upgrade your plan or reduce usage. Time is not charged when using nodes.", - "billingUsersInfo": "You're charged for each user in your organization. Billing is calculated daily based on the number of active user accounts in your org.", - "billingDomainInfo": "You're charged for each domain in your organization. Billing is calculated daily based on the number of active domain accounts in your org.", - "billingRemoteExitNodesInfo": "You're charged for each managed Node in your organization. Billing is calculated daily based on the number of active managed Nodes in your org.", + "regionSelectorTitle": "Seleccionar Región", + "regionSelectorInfo": "Seleccionar una región nos ayuda a brindar un mejor rendimiento para tu ubicación. No tienes que estar en la misma región que tu servidor.", + "regionSelectorPlaceholder": "Elige una región", + "regionSelectorComingSoon": "Próximamente", + "billingLoadingSubscription": "Cargando suscripción...", + "billingFreeTier": "Nivel Gratis", + "billingWarningOverLimit": "Advertencia: Has excedido uno o más límites de uso. Tus sitios no se conectarán hasta que modifiques tu suscripción o ajustes tu uso.", + "billingUsageLimitsOverview": "Descripción general de los límites de uso", + "billingMonitorUsage": "Monitorea tu uso comparado con los límites configurados. Si necesitas que aumenten los límites, contáctanos a soporte@fossorial.io.", + "billingDataUsage": "Uso de datos", + "billingOnlineTime": "Tiempo en línea del sitio", + "billingUsers": "Usuarios activos", + "billingDomains": "Dominios activos", + "billingRemoteExitNodes": "Nodos autogestionados activos", + "billingNoLimitConfigured": "No se ha configurado ningún límite", + "billingEstimatedPeriod": "Período de facturación estimado", + "billingIncludedUsage": "Uso incluido", + "billingIncludedUsageDescription": "Uso incluido con su plan de suscripción actual", + "billingFreeTierIncludedUsage": "Permisos de uso del nivel gratuito", + "billingIncluded": "incluido", + "billingEstimatedTotal": "Total Estimado:", + "billingNotes": "Notas", + "billingEstimateNote": "Esta es una estimación basada en tu uso actual.", + "billingActualChargesMayVary": "Los cargos reales pueden variar.", + "billingBilledAtEnd": "Se te facturará al final del período de facturación.", + "billingModifySubscription": "Modificar Suscripción", + "billingStartSubscription": "Iniciar Suscripción", + "billingRecurringCharge": "Cargo Recurrente", + "billingManageSubscriptionSettings": "Administra la configuración y preferencias de tu suscripción", + "billingNoActiveSubscription": "No tienes una suscripción activa. Inicia tu suscripción para aumentar los límites de uso.", + "billingFailedToLoadSubscription": "Error al cargar la suscripción", + "billingFailedToLoadUsage": "Error al cargar el uso", + "billingFailedToGetCheckoutUrl": "Error al obtener la URL de pago", + "billingPleaseTryAgainLater": "Por favor, inténtelo de nuevo más tarde.", + "billingCheckoutError": "Error de pago", + "billingFailedToGetPortalUrl": "Error al obtener la URL del portal", + "billingPortalError": "Error del portal", + "billingDataUsageInfo": "Se le cobran todos los datos transferidos a través de sus túneles seguros cuando se conectan a la nube. Esto incluye tanto tráfico entrante como saliente a través de todos sus sitios. Cuando alcance su límite, sus sitios se desconectarán hasta que actualice su plan o reduzca el uso. Los datos no se cargan cuando se usan nodos.", + "billingOnlineTimeInfo": "Se te cobrará en función del tiempo que tus sitios permanezcan conectados a la nube. Por ejemplo, 44.640 minutos equivale a un sitio que funciona 24/7 durante un mes completo. Cuando alcance su límite, sus sitios se desconectarán hasta que mejore su plan o reduzca el uso. No se cargará el tiempo al usar nodos.", + "billingUsersInfo": "Se te cobra por cada usuario en tu organización. La facturación se calcula diariamente según la cantidad de cuentas de usuario activas en tu organización.", + "billingDomainInfo": "Se te cobra por cada dominio en tu organización. La facturación se calcula diariamente según la cantidad de cuentas de dominio activas en tu organización.", + "billingRemoteExitNodesInfo": "Se te cobra por cada nodo gestionado en tu organización. La facturación se calcula diariamente según la cantidad de nodos gestionados activos en tu organización.", "domainNotFound": "Dominio no encontrado", "domainNotFoundDescription": "Este recurso está deshabilitado porque el dominio ya no existe en nuestro sistema. Por favor, establece un nuevo dominio para este recurso.", "failed": "Fallido", @@ -1363,7 +1363,7 @@ "createDomainDnsPropagationDescription": "Los cambios de DNS pueden tardar un tiempo en propagarse a través de internet. Esto puede tardar desde unos pocos minutos hasta 48 horas, dependiendo de tu proveedor de DNS y la configuración de TTL.", "resourcePortRequired": "Se requiere número de puerto para recursos no HTTP", "resourcePortNotAllowed": "El número de puerto no debe establecerse para recursos HTTP", - "billingPricingCalculatorLink": "Pricing Calculator", + "billingPricingCalculatorLink": "Calculadora de Precios", "signUpTerms": { "IAgreeToThe": "Estoy de acuerdo con los", "termsOfService": "términos del servicio", @@ -1412,41 +1412,41 @@ "addNewTarget": "Agregar nuevo destino", "targetsList": "Lista de destinos", "targetErrorDuplicateTargetFound": "Se encontró un destino duplicado", - "healthCheckHealthy": "Healthy", - "healthCheckUnhealthy": "Unhealthy", - "healthCheckUnknown": "Unknown", - "healthCheck": "Health Check", - "configureHealthCheck": "Configure Health Check", - "configureHealthCheckDescription": "Set up health monitoring for {target}", - "enableHealthChecks": "Enable Health Checks", - "enableHealthChecksDescription": "Monitor the health of this target. You can monitor a different endpoint than the target if required.", - "healthScheme": "Method", - "healthSelectScheme": "Select Method", - "healthCheckPath": "Path", - "healthHostname": "IP / Host", - "healthPort": "Port", - "healthCheckPathDescription": "The path to check for health status.", - "healthyIntervalSeconds": "Healthy Interval", - "unhealthyIntervalSeconds": "Unhealthy Interval", - "IntervalSeconds": "Healthy Interval", - "timeoutSeconds": "Timeout", - "timeIsInSeconds": "Time is in seconds", - "retryAttempts": "Retry Attempts", - "expectedResponseCodes": "Expected Response Codes", - "expectedResponseCodesDescription": "HTTP status code that indicates healthy status. If left blank, 200-300 is considered healthy.", + "healthCheckHealthy": "Saludable", + "healthCheckUnhealthy": "No saludable", + "healthCheckUnknown": "Desconocido", + "healthCheck": "Chequeo de salud", + "configureHealthCheck": "Configurar Chequeo de Salud", + "configureHealthCheckDescription": "Configura la monitorización de salud para {target}", + "enableHealthChecks": "Activar Chequeos de Salud", + "enableHealthChecksDescription": "Controlar la salud de este objetivo. Puedes supervisar un punto final diferente al objetivo si es necesario.", + "healthScheme": "Método", + "healthSelectScheme": "Seleccionar método", + "healthCheckPath": "Ruta", + "healthHostname": "IP / Nombre del host", + "healthPort": "Puerto", + "healthCheckPathDescription": "La ruta para comprobar el estado de salud.", + "healthyIntervalSeconds": "Intervalo Saludable", + "unhealthyIntervalSeconds": "Intervalo No Saludable", + "IntervalSeconds": "Intervalo Saludable", + "timeoutSeconds": "Tiempo de Espera", + "timeIsInSeconds": "El tiempo está en segundos", + "retryAttempts": "Intentos de Reintento", + "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.", "customHeaders": "Cabeceras personalizadas", - "customHeadersDescription": "Headers new line separated: Header-Name: value", - "headersValidationError": "Headers must be in the format: Header-Name: value", - "saveHealthCheck": "Save Health Check", - "healthCheckSaved": "Health Check Saved", - "healthCheckSavedDescription": "Health check configuration has been saved successfully", - "healthCheckError": "Health Check Error", - "healthCheckErrorDescription": "An error occurred while saving the health check configuration", - "healthCheckPathRequired": "Health check path is required", - "healthCheckMethodRequired": "HTTP method is required", - "healthCheckIntervalMin": "Check interval must be at least 5 seconds", - "healthCheckTimeoutMin": "Timeout must be at least 1 second", - "healthCheckRetryMin": "Retry attempts must be at least 1", + "customHeadersDescription": "Nueva línea de cabeceras separada: Nombre de cabecera: valor", + "headersValidationError": "Los encabezados deben estar en el formato: Nombre de cabecera: valor.", + "saveHealthCheck": "Guardar Chequeo de Salud", + "healthCheckSaved": "Chequeo de Salud Guardado", + "healthCheckSavedDescription": "La configuración del chequeo de salud se ha guardado correctamente", + "healthCheckError": "Error en el Chequeo de Salud", + "healthCheckErrorDescription": "Ocurrió un error al guardar la configuración del chequeo de salud", + "healthCheckPathRequired": "Se requiere la ruta del chequeo de salud", + "healthCheckMethodRequired": "Se requiere el método HTTP", + "healthCheckIntervalMin": "El intervalo de comprobación debe ser de al menos 5 segundos", + "healthCheckTimeoutMin": "El tiempo de espera debe ser de al menos 1 segundo", + "healthCheckRetryMin": "Los intentos de reintento deben ser de al menos 1", "httpMethod": "Método HTTP", "selectHttpMethod": "Seleccionar método HTTP", "domainPickerSubdomainLabel": "Subdominio", @@ -1460,7 +1460,7 @@ "domainPickerEnterSubdomainToSearch": "Ingrese un subdominio para buscar y seleccionar entre dominios gratuitos disponibles.", "domainPickerFreeDomains": "Dominios gratuitos", "domainPickerSearchForAvailableDomains": "Buscar dominios disponibles", - "domainPickerNotWorkSelfHosted": "Note: Free provided domains are not available for self-hosted instances right now.", + "domainPickerNotWorkSelfHosted": "Nota: Los dominios gratuitos proporcionados no están disponibles para instancias autogestionadas por ahora.", "resourceDomain": "Dominio", "resourceEditDomain": "Editar dominio", "siteName": "Nombre del sitio", @@ -1543,72 +1543,72 @@ "autoLoginError": "Error de inicio de sesión automático", "autoLoginErrorNoRedirectUrl": "No se recibió URL de redirección del proveedor de identidad.", "autoLoginErrorGeneratingUrl": "Error al generar URL de autenticación.", - "remoteExitNodeManageRemoteExitNodes": "Manage Self-Hosted", - "remoteExitNodeDescription": "Manage nodes to extend your network connectivity", - "remoteExitNodes": "Nodes", - "searchRemoteExitNodes": "Search nodes...", - "remoteExitNodeAdd": "Add Node", - "remoteExitNodeErrorDelete": "Error deleting node", - "remoteExitNodeQuestionRemove": "Are you sure you want to remove the node {selectedNode} from the organization?", - "remoteExitNodeMessageRemove": "Once removed, the node will no longer be accessible.", - "remoteExitNodeMessageConfirm": "To confirm, please type the name of the node below.", - "remoteExitNodeConfirmDelete": "Confirm Delete Node", - "remoteExitNodeDelete": "Delete Node", - "sidebarRemoteExitNodes": "Nodes", + "remoteExitNodeManageRemoteExitNodes": "Administrar Nodos Autogestionados", + "remoteExitNodeDescription": "Administrar nodos para extender la conectividad de red", + "remoteExitNodes": "Nodos", + "searchRemoteExitNodes": "Buscar nodos...", + "remoteExitNodeAdd": "Añadir Nodo", + "remoteExitNodeErrorDelete": "Error al eliminar el nodo", + "remoteExitNodeQuestionRemove": "¿Está seguro de que desea eliminar el nodo {selectedNode} de la organización?", + "remoteExitNodeMessageRemove": "Una vez eliminado, el nodo ya no será accesible.", + "remoteExitNodeMessageConfirm": "Para confirmar, por favor escriba el nombre del nodo a continuación.", + "remoteExitNodeConfirmDelete": "Confirmar eliminar nodo", + "remoteExitNodeDelete": "Eliminar Nodo", + "sidebarRemoteExitNodes": "Nodos", "remoteExitNodeCreate": { - "title": "Create Node", - "description": "Create a new node to extend your network connectivity", - "viewAllButton": "View All Nodes", + "title": "Crear Nodo", + "description": "Crear un nuevo nodo para extender la conectividad de red", + "viewAllButton": "Ver todos los nodos", "strategy": { - "title": "Creation Strategy", - "description": "Choose this to manually configure your node or generate new credentials.", + "title": "Estrategia de Creación", + "description": "Elija esto para configurar manualmente su nodo o generar nuevas credenciales.", "adopt": { - "title": "Adopt Node", - "description": "Choose this if you already have the credentials for the node." + "title": "Adoptar Nodo", + "description": "Elija esto si ya tiene las credenciales para el nodo." }, "generate": { - "title": "Generate Keys", - "description": "Choose this if you want to generate new keys for the node" + "title": "Generar Claves", + "description": "Elija esto si desea generar nuevas claves para el nodo" } }, "adopt": { - "title": "Adopt Existing Node", - "description": "Enter the credentials of the existing node you want to adopt", - "nodeIdLabel": "Node ID", - "nodeIdDescription": "The ID of the existing node you want to adopt", - "secretLabel": "Secret", - "secretDescription": "The secret key of the existing node", - "submitButton": "Adopt Node" + "title": "Adoptar Nodo Existente", + "description": "Introduzca las credenciales del nodo existente que desea adoptar", + "nodeIdLabel": "ID del nodo", + "nodeIdDescription": "El ID del nodo existente que desea adoptar", + "secretLabel": "Secreto", + "secretDescription": "La clave secreta del nodo existente", + "submitButton": "Adoptar Nodo" }, "generate": { - "title": "Generated Credentials", - "description": "Use these generated credentials to configure your node", - "nodeIdTitle": "Node ID", - "secretTitle": "Secret", - "saveCredentialsTitle": "Add Credentials to Config", - "saveCredentialsDescription": "Add these credentials to your self-hosted Pangolin node configuration file to complete the connection.", - "submitButton": "Create Node" + "title": "Credenciales Generadas", + "description": "Utilice estas credenciales generadas para configurar su nodo", + "nodeIdTitle": "ID del nodo", + "secretTitle": "Secreto", + "saveCredentialsTitle": "Agregar Credenciales a la Configuración", + "saveCredentialsDescription": "Agrega estas credenciales a tu archivo de configuración del nodo Pangolin autogestionado para completar la conexión.", + "submitButton": "Crear Nodo" }, "validation": { - "adoptRequired": "Node ID and Secret are required when adopting an existing node" + "adoptRequired": "El ID del nodo y el secreto son necesarios al adoptar un nodo existente" }, "errors": { - "loadDefaultsFailed": "Failed to load defaults", - "defaultsNotLoaded": "Defaults not loaded", - "createFailed": "Failed to create node" + "loadDefaultsFailed": "Falló al cargar los valores predeterminados", + "defaultsNotLoaded": "Valores predeterminados no cargados", + "createFailed": "Error al crear el nodo" }, "success": { - "created": "Node created successfully" + "created": "Nodo creado correctamente" } }, - "remoteExitNodeSelection": "Node Selection", - "remoteExitNodeSelectionDescription": "Select a node to route traffic through for this local site", - "remoteExitNodeRequired": "A node must be selected for local sites", - "noRemoteExitNodesAvailable": "No Nodes Available", - "noRemoteExitNodesAvailableDescription": "No nodes are available for this organization. Create a node first to use local sites.", - "exitNode": "Exit Node", - "country": "Country", - "rulesMatchCountry": "Currently based on source IP", + "remoteExitNodeSelection": "Selección de nodo", + "remoteExitNodeSelectionDescription": "Seleccione un nodo a través del cual enrutar el tráfico para este sitio local", + "remoteExitNodeRequired": "Un nodo debe ser seleccionado para sitios locales", + "noRemoteExitNodesAvailable": "No hay nodos disponibles", + "noRemoteExitNodesAvailableDescription": "No hay nodos disponibles para esta organización. Crea un nodo primero para usar sitios locales.", + "exitNode": "Nodo de Salida", + "country": "País", + "rulesMatchCountry": "Actualmente basado en IP de origen", "managedSelfHosted": { "title": "Autogestionado", "description": "Servidor Pangolin autoalojado más fiable y de bajo mantenimiento con campanas y silbidos extra", @@ -1647,53 +1647,53 @@ }, "internationaldomaindetected": "Dominio Internacional detectado", "willbestoredas": "Se almacenará como:", - "roleMappingDescription": "Determine how roles are assigned to users when they sign in when Auto Provision is enabled.", - "selectRole": "Select a Role", - "roleMappingExpression": "Expression", - "selectRolePlaceholder": "Choose a role", - "selectRoleDescription": "Select a role to assign to all users from this identity provider", - "roleMappingExpressionDescription": "Enter a JMESPath expression to extract role information from the ID token", - "idpTenantIdRequired": "Tenant ID is required", - "invalidValue": "Invalid value", - "idpTypeLabel": "Identity Provider Type", - "roleMappingExpressionPlaceholder": "e.g., contains(groups, 'admin') && 'Admin' || 'Member'", - "idpGoogleConfiguration": "Google Configuration", - "idpGoogleConfigurationDescription": "Configure your Google OAuth2 credentials", - "idpGoogleClientIdDescription": "Your Google OAuth2 Client ID", - "idpGoogleClientSecretDescription": "Your Google OAuth2 Client Secret", - "idpAzureConfiguration": "Azure Entra ID Configuration", - "idpAzureConfigurationDescription": "Configure your Azure Entra ID OAuth2 credentials", - "idpTenantId": "Tenant ID", - "idpTenantIdPlaceholder": "your-tenant-id", - "idpAzureTenantIdDescription": "Your Azure tenant ID (found in Azure Active Directory overview)", - "idpAzureClientIdDescription": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription": "Your Azure App Registration Client Secret", + "roleMappingDescription": "Determinar cómo se asignan los roles a los usuarios cuando se registran cuando está habilitada la provisión automática.", + "selectRole": "Seleccione un rol", + "roleMappingExpression": "Expresión", + "selectRolePlaceholder": "Elija un rol", + "selectRoleDescription": "Seleccione un rol para asignar a todos los usuarios de este proveedor de identidad", + "roleMappingExpressionDescription": "Introduzca una expresión JMESPath para extraer información de rol del token de ID", + "idpTenantIdRequired": "El ID del cliente es obligatorio", + "invalidValue": "Valor inválido", + "idpTypeLabel": "Tipo de proveedor de identidad", + "roleMappingExpressionPlaceholder": "e.g., contiene(grupos, 'administrador') && 'administrador' || 'miembro'", + "idpGoogleConfiguration": "Configuración de Google", + "idpGoogleConfigurationDescription": "Configura tus credenciales de Google OAuth2", + "idpGoogleClientIdDescription": "Tu ID de cliente de Google OAuth2", + "idpGoogleClientSecretDescription": "Tu secreto de cliente de Google OAuth2", + "idpAzureConfiguration": "Configuración de Azure Entra ID", + "idpAzureConfigurationDescription": "Configure sus credenciales de Azure Entra ID OAuth2", + "idpTenantId": "ID del inquilino", + "idpTenantIdPlaceholder": "su-inquilino-id", + "idpAzureTenantIdDescription": "Su ID de inquilino de Azure (encontrado en el resumen de Azure Active Directory)", + "idpAzureClientIdDescription": "Tu ID de Cliente de Registro de Azure App", + "idpAzureClientSecretDescription": "Tu Azure App Registro Cliente secreto", "idpGoogleTitle": "Google", "idpGoogleAlt": "Google", "idpAzureTitle": "Azure Entra ID", "idpAzureAlt": "Azure", - "idpGoogleConfigurationTitle": "Google Configuration", - "idpAzureConfigurationTitle": "Azure Entra ID Configuration", - "idpTenantIdLabel": "Tenant ID", - "idpAzureClientIdDescription2": "Your Azure App Registration Client ID", - "idpAzureClientSecretDescription2": "Your Azure App Registration Client Secret", + "idpGoogleConfigurationTitle": "Configuración de Google", + "idpAzureConfigurationTitle": "Configuración de Azure Entra ID", + "idpTenantIdLabel": "ID del inquilino", + "idpAzureClientIdDescription2": "Tu ID de Cliente de Registro de Azure App", + "idpAzureClientSecretDescription2": "Tu Azure App Registro Cliente secreto", "idpGoogleDescription": "Proveedor OAuth2/OIDC de Google", "idpAzureDescription": "Microsoft Azure OAuth2/OIDC provider", - "subnet": "Subnet", - "subnetDescription": "The subnet for this organization's network configuration.", - "authPage": "Auth Page", - "authPageDescription": "Configure the auth page for your organization", - "authPageDomain": "Auth Page Domain", - "noDomainSet": "No domain set", - "changeDomain": "Change Domain", - "selectDomain": "Select Domain", - "restartCertificate": "Restart Certificate", - "editAuthPageDomain": "Edit Auth Page Domain", - "setAuthPageDomain": "Set Auth Page Domain", - "failedToFetchCertificate": "Failed to fetch certificate", - "failedToRestartCertificate": "Failed to restart certificate", - "addDomainToEnableCustomAuthPages": "Add a domain to enable custom authentication pages for your organization", - "selectDomainForOrgAuthPage": "Select a domain for the organization's authentication page", + "subnet": "Subred", + "subnetDescription": "La subred para la configuración de red de esta organización.", + "authPage": "Página Auth", + "authPageDescription": "Configurar la página de autenticación de su organización", + "authPageDomain": "Dominio de la página Auth", + "noDomainSet": "Ningún dominio establecido", + "changeDomain": "Cambiar dominio", + "selectDomain": "Seleccionar dominio", + "restartCertificate": "Reiniciar certificado", + "editAuthPageDomain": "Editar dominio Auth Page", + "setAuthPageDomain": "Establecer dominio Auth Page", + "failedToFetchCertificate": "Error al obtener el certificado", + "failedToRestartCertificate": "Error al reiniciar el certificado", + "addDomainToEnableCustomAuthPages": "Añadir un dominio para habilitar páginas de autenticación personalizadas para su organización", + "selectDomainForOrgAuthPage": "Seleccione un dominio para la página de autenticación de la organización", "domainPickerProvidedDomain": "Dominio proporcionado", "domainPickerFreeProvidedDomain": "Dominio proporcionado gratis", "domainPickerVerified": "Verificado", @@ -1707,21 +1707,21 @@ "domainPickerInvalidSubdomainCannotMakeValid": "No se ha podido hacer válido \"{sub}\" para {domain}.", "domainPickerSubdomainSanitized": "Subdominio saneado", "domainPickerSubdomainCorrected": "\"{sub}\" fue corregido a \"{sanitized}\"", - "orgAuthSignInTitle": "Sign in to your organization", - "orgAuthChooseIdpDescription": "Choose your identity provider to continue", - "orgAuthNoIdpConfigured": "This organization doesn't have any identity providers configured. You can log in with your Pangolin identity instead.", - "orgAuthSignInWithPangolin": "Sign in with Pangolin", - "subscriptionRequiredToUse": "A subscription is required to use this feature.", - "idpDisabled": "Identity providers are disabled.", - "orgAuthPageDisabled": "Organization auth page is disabled.", - "domainRestartedDescription": "Domain verification restarted successfully", + "orgAuthSignInTitle": "Inicia sesión en tu organización", + "orgAuthChooseIdpDescription": "Elige tu proveedor de identidad para continuar", + "orgAuthNoIdpConfigured": "Esta organización no tiene ningún proveedor de identidad configurado. En su lugar puedes iniciar sesión con tu identidad de Pangolin.", + "orgAuthSignInWithPangolin": "Iniciar sesión con Pangolin", + "subscriptionRequiredToUse": "Se requiere una suscripción para utilizar esta función.", + "idpDisabled": "Los proveedores de identidad están deshabilitados.", + "orgAuthPageDisabled": "La página de autenticación de la organización está deshabilitada.", + "domainRestartedDescription": "Verificación de dominio reiniciada con éxito", "resourceAddEntrypointsEditFile": "Editar archivo: config/traefik/traefik_config.yml", "resourceExposePortsEditFile": "Editar archivo: docker-compose.yml", "emailVerificationRequired": "Se requiere verificación de correo electrónico. Por favor, inicie sesión de nuevo a través de {dashboardUrl}/auth/login complete este paso. Luego, vuelva aquí.", "twoFactorSetupRequired": "La configuración de autenticación de doble factor es requerida. Por favor, inicia sesión de nuevo a través de {dashboardUrl}/auth/login completa este paso. Luego, vuelve aquí.", - "authPageErrorUpdateMessage": "An error occurred while updating the auth page settings", - "authPageUpdated": "Auth page updated successfully", + "authPageErrorUpdateMessage": "Ocurrió un error mientras se actualizaban los ajustes de la página auth", + "authPageUpdated": "Página auth actualizada correctamente", "healthCheckNotAvailable": "Local", - "rewritePath": "Rewrite Path", - "rewritePathDescription": "Optionally rewrite the path before forwarding to the target." + "rewritePath": "Reescribir Ruta", + "rewritePathDescription": "Opcionalmente reescribe la ruta antes de reenviar al destino." }