Add forms for Worker and ClusterSettings with translations and workers list template

This commit is contained in:
Eduardo Silva
2025-08-14 22:43:18 -03:00
parent a78dc65da1
commit 7c5cbe51be
15 changed files with 1717 additions and 394 deletions

139
cluster/forms.py Normal file
View File

@@ -0,0 +1,139 @@
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Column, HTML, Layout, Row, Submit
from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
from .models import ClusterSettings, Worker
class WorkerForm(forms.ModelForm):
class Meta:
model = Worker
fields = ['name', 'enabled', 'ip_lock', 'ip_address', 'country', 'city', 'hostname']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['name'].label = _("Name")
self.fields['enabled'].label = _("Enabled")
self.fields['ip_lock'].label = _("IP Lock")
self.fields['ip_address'].label = _("IP Address")
self.fields['country'].label = _("Country")
self.fields['city'].label = _("City")
self.fields['hostname'].label = _("Hostname")
back_label = _("Back")
delete_label = _("Delete")
self.helper = FormHelper()
self.helper.form_method = 'post'
if self.instance.pk:
delete_html = f"<a href='javascript:void(0)' class='btn btn-outline-danger' data-command='delete' onclick='openCommandDialog(this)'>{delete_label}</a>"
else:
delete_html = ''
self.helper.layout = Layout(
Row(
Column('name', css_class='form-group col-md-6 mb-0'),
Column('enabled', css_class='form-group col-md-6 mb-0'),
css_class='form-row'
),
Row(
Column('ip_lock', css_class='form-group col-md-6 mb-0'),
Column('ip_address', css_class='form-group col-md-6 mb-0'),
css_class='form-row'
),
Row(
Column('country', css_class='form-group col-md-4 mb-0'),
Column('city', css_class='form-group col-md-4 mb-0'),
Column('hostname', css_class='form-group col-md-4 mb-0'),
css_class='form-row'
),
Row(
Column(
Submit('submit', _('Save'), css_class='btn btn-success'),
HTML(f' <a class="btn btn-secondary" href="/cluster/">{back_label}</a> '),
HTML(delete_html),
css_class='col-md-12'),
css_class='form-row'
)
)
def clean(self):
cleaned_data = super().clean()
name = cleaned_data.get('name')
ip_lock = cleaned_data.get('ip_lock')
ip_address = cleaned_data.get('ip_address')
if Worker.objects.filter(name=name).exclude(pk=self.instance.pk if self.instance else None).exists():
raise ValidationError(_("A worker with that name already exists."))
if ip_lock and not ip_address:
raise ValidationError(_("IP Address is required when IP Lock is enabled."))
return cleaned_data
class ClusterSettingsForm(forms.ModelForm):
class Meta:
model = ClusterSettings
fields = [
'enabled', 'primary_enable_wireguard', 'stats_sync_interval',
'stats_cache_interval', 'cluster_mode', 'restart_mode', 'worker_display'
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['enabled'].label = _("Cluster Enabled")
self.fields['primary_enable_wireguard'].label = _("Primary Enable WireGuard")
self.fields['stats_sync_interval'].label = _("Stats Sync Interval (seconds)")
self.fields['stats_cache_interval'].label = _("Stats Cache Interval (seconds)")
self.fields['cluster_mode'].label = _("Cluster Mode")
self.fields['restart_mode'].label = _("Restart Mode")
self.fields['worker_display'].label = _("Worker Display")
back_label = _("Back")
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.layout = Layout(
Row(
Column('enabled', css_class='form-group col-md-6 mb-0'),
Column('primary_enable_wireguard', css_class='form-group col-md-6 mb-0'),
css_class='form-row'
),
Row(
Column('stats_sync_interval', css_class='form-group col-md-6 mb-0'),
Column('stats_cache_interval', css_class='form-group col-md-6 mb-0'),
css_class='form-row'
),
Row(
Column('cluster_mode', css_class='form-group col-md-6 mb-0'),
Column('restart_mode', css_class='form-group col-md-6 mb-0'),
css_class='form-row'
),
Row(
Column('worker_display', css_class='form-group col-md-12 mb-0'),
css_class='form-row'
),
Row(
Column(
Submit('submit', _('Save'), css_class='btn btn-success'),
HTML(f' <a class="btn btn-secondary" href="/cluster/">{back_label}</a> '),
css_class='col-md-12'),
css_class='form-row'
)
)
def clean(self):
cleaned_data = super().clean()
stats_sync_interval = cleaned_data.get('stats_sync_interval')
stats_cache_interval = cleaned_data.get('stats_cache_interval')
if stats_sync_interval and stats_sync_interval < 10:
raise ValidationError(_("Stats sync interval must be at least 10 seconds."))
if stats_cache_interval and stats_cache_interval < 10:
raise ValidationError(_("Stats cache interval must be at least 10 seconds."))
return cleaned_data

View File

@@ -1 +1,134 @@
# Create your views here. from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, redirect, render
from django.utils.translation import gettext_lazy as _
from user_manager.models import UserAcl
from .forms import WorkerForm, ClusterSettingsForm
from .models import ClusterSettings, Worker
@login_required
def cluster_main(request):
"""Main cluster page with workers list"""
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists():
return render(request, 'access_denied.html', {'page_title': _('Access Denied')})
page_title = _('Cluster')
workers = Worker.objects.all().order_by('name')
context = {'page_title': page_title, 'workers': workers}
return render(request, 'cluster/workers_list.html', context)
@login_required
def worker_manage(request):
"""Add/Edit worker view"""
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists():
return render(request, 'access_denied.html', {'page_title': _('Access Denied')})
worker = None
if 'uuid' in request.GET:
worker = get_object_or_404(Worker, uuid=request.GET['uuid'])
form = WorkerForm(instance=worker)
page_title = _('Edit Worker: ') + worker.name
if request.GET.get('action') == 'delete':
worker_name = worker.name
if request.GET.get('confirmation') == 'delete':
worker.delete()
messages.success(request, _('Worker deleted|Worker deleted: ') + worker_name)
return redirect('/cluster/')
else:
messages.warning(request, _('Worker not deleted|Invalid confirmation.'))
return redirect('/cluster/')
else:
form = WorkerForm()
page_title = _('Add Worker')
if request.method == 'POST':
if worker:
form = WorkerForm(request.POST, instance=worker)
else:
form = WorkerForm(request.POST)
if form.is_valid():
worker = form.save()
if worker.pk:
messages.success(request, _('Worker updated|Worker updated: ') + worker.name)
else:
messages.success(request, _('Worker created|Worker created: ') + worker.name)
return redirect('/cluster/')
form_description = {
'size': 'col-lg-6',
'content': _('''
<h5>Worker Configuration</h5>
<p>Configure a cluster worker node that will synchronize with this primary instance.</p>
<h5>Name</h5>
<p>A unique name to identify this worker.</p>
<h5>IP Address</h5>
<p>The IP address of the worker node. Leave empty if IP lock is disabled.</p>
<h5>IP Lock</h5>
<p>When enabled, the worker can only connect from the specified IP address.</p>
<h5>Location Information</h5>
<p>Optional location details for this worker (country, city, hostname).</p>
''')
}
context = {
'page_title': page_title,
'form': form,
'worker': worker,
'instance': worker,
'form_description': form_description
}
return render(request, 'generic_form.html', context)
@login_required
def cluster_settings(request):
"""Cluster settings configuration"""
if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=50).exists():
return render(request, 'access_denied.html', {'page_title': _('Access Denied')})
cluster_settings, created = ClusterSettings.objects.get_or_create(name='cluster_settings')
page_title = _('Cluster Settings')
if request.method == 'POST':
form = ClusterSettingsForm(request.POST, instance=cluster_settings)
if form.is_valid():
form.save()
messages.success(request, _('Cluster settings updated successfully.'))
return redirect('/cluster/')
else:
form = ClusterSettingsForm(instance=cluster_settings)
form_description = {
'size': 'col-lg-6',
'content': _('''
<h5>Cluster Mode</h5>
<p>Configure how the cluster operates and synchronizes configurations between nodes.</p>
<h5>Sync Intervals</h5>
<p>Configure how frequently statistics and cache data are synchronized between cluster nodes.</p>
<h5>Restart Mode</h5>
<p>Choose whether WireGuard services should be automatically restarted when configurations change, or if manual intervention is required.</p>
<h5>Worker Display</h5>
<p>Select how workers should be identified in the interface - by name, server address, location, or a combination.</p>
''')
}
context = {
'page_title': page_title,
'form': form,
'cluster_settings': cluster_settings,
'instance': cluster_settings,
'form_description': form_description
}
return render(request, 'generic_form.html', context)

Binary file not shown.

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-12 11:30-0300\n" "POT-Creation-Date: 2025-08-14 22:07-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,208 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cluster/forms.py:17 dns/forms.py:111 templates/cluster/workers_list.html:8
#: templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Name"
#: cluster/forms.py:18 templates/cluster/workers_list.html:24
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Aktiviert"
#: cluster/forms.py:19
msgid "IP Lock"
msgstr ""
#: cluster/forms.py:20 dns/forms.py:66 templates/cluster/workers_list.html:10
#: templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "IPAdresse"
#: cluster/forms.py:21
msgid "Country"
msgstr ""
#: cluster/forms.py:22
msgid "City"
msgstr ""
#: cluster/forms.py:23 dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Hostname"
#: cluster/forms.py:25 cluster/forms.py:95 dns/forms.py:25 dns/forms.py:67
#: dns/forms.py:109 templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Zurück"
#: cluster/forms.py:26 dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Löschen"
#: cluster/forms.py:54 cluster/forms.py:121 dns/forms.py:37 dns/forms.py:83
#: dns/forms.py:134 templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Speichern"
#: cluster/forms.py:69
msgid "A worker with that name already exists."
msgstr "Ein Worker mit diesem Namen existiert bereits."
#: cluster/forms.py:72
msgid "IP Address is required when IP Lock is enabled."
msgstr ""
#: cluster/forms.py:87
msgid "Cluster Enabled"
msgstr "Cluster aktiviert"
#: cluster/forms.py:88
msgid "Primary Enable WireGuard"
msgstr ""
#: cluster/forms.py:89
msgid "Stats Sync Interval (seconds)"
msgstr ""
#: cluster/forms.py:90
msgid "Stats Cache Interval (seconds)"
msgstr ""
#: cluster/forms.py:91
msgid "Cluster Mode"
msgstr ""
#: cluster/forms.py:92
msgid "Restart Mode"
msgstr "Neustart-Modus"
#: cluster/forms.py:93
msgid "Worker Display"
msgstr ""
#: cluster/forms.py:134
msgid "Stats sync interval must be at least 10 seconds."
msgstr "Statistik-Synchronisationsintervall muss mindestens 10 Sekunden betragen."
"Aktualisierungsintervall der PeerListe muss mindestens 5 Sekunden betragen"
#: cluster/forms.py:137
msgid "Stats cache interval must be at least 10 seconds."
msgstr "Statistik-Cache-Intervall muss mindestens 10 Sekunden betragen."
"Aktualisierungsintervall der PeerListe muss mindestens 5 Sekunden betragen"
#: cluster/views.py:15 cluster/views.py:27 cluster/views.py:96
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Zugriff verweigert"
#: cluster/views.py:17 templates/base.html:185
msgid "Cluster"
msgstr ""
#: cluster/views.py:33
msgid "Edit Worker: "
msgstr "Worker bearbeiten: "
#: cluster/views.py:39
msgid "Worker deleted|Worker deleted: "
msgstr "Worker gelöscht|Worker gelöscht: "
#: cluster/views.py:42
msgid "Worker not deleted|Invalid confirmation."
msgstr "Worker nicht gelöscht|Ungültige Bestätigung."
#: cluster/views.py:46 templates/cluster/list_buttons.html:2
msgid "Add Worker"
msgstr "Worker hinzufügen"
#: cluster/views.py:57
msgid "Worker updated|Worker updated: "
msgstr "Worker aktualisiert|Worker aktualisiert: "
#: cluster/views.py:59
msgid "Worker created|Worker created: "
msgstr "Worker erstellt|Worker erstellt: "
#: cluster/views.py:64
msgid ""
"\n"
" <h5>Worker Configuration</h5>\n"
" <p>Configure a cluster worker node that will synchronize with this "
"primary instance.</p>\n"
" \n"
" <h5>Name</h5>\n"
" <p>A unique name to identify this worker.</p>\n"
" \n"
" <h5>IP Address</h5>\n"
" <p>The IP address of the worker node. Leave empty if IP lock is "
"disabled.</p>\n"
" \n"
" <h5>IP Lock</h5>\n"
" <p>When enabled, the worker can only connect from the specified IP "
"address.</p>\n"
" \n"
" <h5>Location Information</h5>\n"
" <p>Optional location details for this worker (country, city, "
"hostname).</p>\n"
" "
msgstr ""
#: cluster/views.py:99 templates/cluster/list_buttons.html:3
msgid "Cluster Settings"
msgstr "Cluster-Einstellungen"
#: cluster/views.py:105
msgid "Cluster settings updated successfully."
msgstr "Cluster-Einstellungen erfolgreich aktualisiert."
#: cluster/views.py:112
msgid ""
"\n"
" <h5>Cluster Mode</h5>\n"
" <p>Configure how the cluster operates and synchronizes "
"configurations between nodes.</p>\n"
" \n"
" <h5>Sync Intervals</h5>\n"
" <p>Configure how frequently statistics and cache data are "
"synchronized between cluster nodes.</p>\n"
" \n"
" <h5>Restart Mode</h5>\n"
" <p>Choose whether WireGuard services should be automatically "
"restarted when configurations change, or if manual intervention is required."
"</p>\n"
" \n"
" <h5>Worker Display</h5>\n"
" <p>Select how workers should be identified in the interface - by "
"name, server address, location, or a combination.</p>\n"
" "
msgstr ""
#: console/views.py:25 console/views.py:57 user_manager/forms.py:16 #: console/views.py:25 console/views.py:57 user_manager/forms.py:16
msgid "Console" msgid "Console"
msgstr "Konsole" msgstr "Konsole"
@@ -66,64 +268,14 @@ msgstr "Primärer DNS"
msgid "Secondary DNS" msgid "Secondary DNS"
msgstr "Sekundärer DNS" msgstr "Sekundärer DNS"
#: dns/forms.py:25 dns/forms.py:67 dns/forms.py:109
#: templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Zurück"
#: dns/forms.py:29 #: dns/forms.py:29
msgid "Resolver Settings" msgid "Resolver Settings"
msgstr "ResolverEinstellungen" msgstr "ResolverEinstellungen"
#: dns/forms.py:37 dns/forms.py:83 dns/forms.py:134
#: templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Speichern"
#: dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Hostname"
#: dns/forms.py:66 templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "IPAdresse"
#: dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Löschen"
#: dns/forms.py:75 #: dns/forms.py:75
msgid "Static DNS" msgid "Static DNS"
msgstr "Statischer DNS" msgstr "Statischer DNS"
#: dns/forms.py:111 templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Name"
#: dns/forms.py:112 firewall/forms.py:111 #: dns/forms.py:112 firewall/forms.py:111
#: templates/dns/static_host_list.html:69 #: templates/dns/static_host_list.html:69
#: templates/firewall/manage_redirect_rule.html:18 #: templates/firewall/manage_redirect_rule.html:18
@@ -474,10 +626,6 @@ msgstr ""
"Wenn dir bei der Übersetzung Fehler auffallen oder du eine neue Sprache " "Wenn dir bei der Übersetzung Fehler auffallen oder du eine neue Sprache "
"anfordern möchtest, öffne bitte ein" "anfordern möchtest, öffne bitte ein"
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Zugriff verweigert"
#: templates/access_denied.html:12 #: templates/access_denied.html:12
msgid "Sorry, you do not have permission to access this page." msgid "Sorry, you do not have permission to access this page."
msgstr "Sie haben leider keine Berechtigung, diese Seite aufzurufen." msgstr "Sie haben leider keine Berechtigung, diese Seite aufzurufen."
@@ -511,9 +659,10 @@ msgstr "Sie wurden erfolgreich abgemeldet."
msgid "Login again" msgid "Login again"
msgstr "Erneut anmelden" msgstr "Erneut anmelden"
#: templates/base.html:112 templates/dns/static_host_list.html:72 #: templates/base.html:112 templates/cluster/workers_list.html:9
#: vpn_invite/forms.py:78 vpn_invite/forms.py:79 vpn_invite/forms.py:80 #: templates/dns/static_host_list.html:72 vpn_invite/forms.py:78
#: vpn_invite/forms.py:81 vpn_invite/forms.py:82 #: vpn_invite/forms.py:79 vpn_invite/forms.py:80 vpn_invite/forms.py:81
#: vpn_invite/forms.py:82
msgid "Status" msgid "Status"
msgstr "Status" msgstr "Status"
@@ -526,11 +675,11 @@ msgstr "Benutzerverwaltung"
msgid "VPN Invite" msgid "VPN Invite"
msgstr "VPNEinladung" msgstr "VPNEinladung"
#: templates/base.html:254 #: templates/base.html:263
msgid "Update Required" msgid "Update Required"
msgstr "Aktualisierung erforderlich" msgstr "Aktualisierung erforderlich"
#: templates/base.html:256 #: templates/base.html:265
msgid "" msgid ""
"Your WireGuard settings have been modified. To apply these changes, please " "Your WireGuard settings have been modified. To apply these changes, please "
"update the configuration and reload the WireGuard service." "update the configuration and reload the WireGuard service."
@@ -538,22 +687,78 @@ msgstr ""
"Ihre WireGuardEinstellungen wurden geändert. Um die Änderungen anzuwenden, " "Ihre WireGuardEinstellungen wurden geändert. Um die Änderungen anzuwenden, "
"aktualisieren Sie die Konfiguration und laden Sie den WireGuardDienst neu." "aktualisieren Sie die Konfiguration und laden Sie den WireGuardDienst neu."
#: templates/base.html:265 #: templates/base.html:274
msgid "Update and restart service" msgid "Update and restart service"
msgstr "Aktualisieren und Dienst neu starten" msgstr "Aktualisieren und Dienst neu starten"
#: templates/base.html:273 #: templates/base.html:282
msgid "Update and reload service" msgid "Update and reload service"
msgstr "Aktualisieren und Dienst neu laden" msgstr "Aktualisieren und Dienst neu laden"
#: templates/base.html:286 #: templates/base.html:295
msgid "Update Available" msgid "Update Available"
msgstr "Aktualisierung verfügbar" msgstr "Aktualisierung verfügbar"
#: templates/base.html:288 #: templates/base.html:297
msgid "Version" msgid "Version"
msgstr "Version" msgstr "Version"
#: templates/cluster/workers_list.html:11
msgid "Location"
msgstr "Standort"
#: templates/cluster/workers_list.html:12
msgid "Last Seen"
msgstr "Zuletzt gesehen"
#: templates/cluster/workers_list.html:13
msgid "Config Version"
msgstr "Konfigurationsversion"
#: templates/cluster/workers_list.html:14
msgid "Options"
msgstr "Optionen"
#: templates/cluster/workers_list.html:26 vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Deaktiviert"
#: templates/cluster/workers_list.html:33
msgid "IP Lock Enabled"
msgstr "IP-Sperre aktiviert"
#: templates/cluster/workers_list.html:36
#: templates/cluster/workers_list.html:43
msgid "Not set"
msgstr "Nicht gesetzt"
#: templates/cluster/workers_list.html:50
msgid "Never"
msgstr ""
#: templates/cluster/workers_list.html:57
msgid "Config Pending"
msgstr "Konfiguration ausstehend"
#: templates/cluster/workers_list.html:65
msgid "Force Reload"
msgstr ""
#: templates/cluster/workers_list.html:70
msgid "Force Restart"
msgstr ""
#: templates/cluster/workers_list.html:74
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Bearbeiten"
#: templates/cluster/workers_list.html:79
msgid "No workers configured"
msgstr ""
#: templates/console/console.html:12 #: templates/console/console.html:12
msgid "Clear" msgid "Clear"
msgstr "Leeren" msgstr "Leeren"
@@ -594,12 +799,6 @@ msgstr "Letzte Aktualisierung"
msgid "Update" msgid "Update"
msgstr "Aktualisieren" msgstr "Aktualisieren"
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Bearbeiten"
#: templates/dns/static_host_list.html:116 #: templates/dns/static_host_list.html:116
msgid "Add Filter List" msgid "Add Filter List"
msgstr "Filterliste hinzufügen" msgstr "Filterliste hinzufügen"
@@ -1278,7 +1477,8 @@ msgid ""
"key manually in your client before using it." "key manually in your client before using it."
msgstr "" msgstr ""
"Diese Konfiguration enthält keinen privaten Schlüssel. Sie müssen den " "Diese Konfiguration enthält keinen privaten Schlüssel. Sie müssen den "
"privaten Schlüssel manuell in Ihrem Client hinzufügen, bevor Sie ihn verwenden." "privaten Schlüssel manuell in Ihrem Client hinzufügen, bevor Sie ihn "
"verwenden."
#: templates/wireguard/wireguard_peer_list.html:590 #: templates/wireguard/wireguard_peer_list.html:590
msgid "" msgid ""
@@ -1590,14 +1790,6 @@ msgstr ""
msgid "Please type the username to proceed." msgid "Please type the username to proceed."
msgstr "Bitte geben Sie den Benutzernamen ein, um fortzufahren." msgstr "Bitte geben Sie den Benutzernamen ein, um fortzufahren."
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Aktiviert"
#: vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Deaktiviert"
#: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70 #: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70
#: vpn_invite/forms.py:71 vpn_invite/forms.py:72 #: vpn_invite/forms.py:71 vpn_invite/forms.py:72
msgid "URL" msgid "URL"

Binary file not shown.

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-12 11:30-0300\n" "POT-Creation-Date: 2025-08-14 22:07-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,206 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cluster/forms.py:17 dns/forms.py:111 templates/cluster/workers_list.html:8
#: templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Nombre"
#: cluster/forms.py:18 templates/cluster/workers_list.html:24
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Habilitado"
#: cluster/forms.py:19
msgid "IP Lock"
msgstr ""
#: cluster/forms.py:20 dns/forms.py:66 templates/cluster/workers_list.html:10
#: templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "Dirección IP"
#: cluster/forms.py:21
msgid "Country"
msgstr ""
#: cluster/forms.py:22
msgid "City"
msgstr ""
#: cluster/forms.py:23 dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Nombre de host"
#: cluster/forms.py:25 cluster/forms.py:95 dns/forms.py:25 dns/forms.py:67
#: dns/forms.py:109 templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Volver"
#: cluster/forms.py:26 dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Eliminar"
#: cluster/forms.py:54 cluster/forms.py:121 dns/forms.py:37 dns/forms.py:83
#: dns/forms.py:134 templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Guardar"
#: cluster/forms.py:69
msgid "A worker with that name already exists."
msgstr "Ya existe un worker con ese nombre."
#: cluster/forms.py:72
msgid "IP Address is required when IP Lock is enabled."
msgstr ""
#: cluster/forms.py:87
msgid "Cluster Enabled"
msgstr "Cluster habilitado"
#: cluster/forms.py:88
msgid "Primary Enable WireGuard"
msgstr ""
#: cluster/forms.py:89
msgid "Stats Sync Interval (seconds)"
msgstr ""
#: cluster/forms.py:90
msgid "Stats Cache Interval (seconds)"
msgstr ""
#: cluster/forms.py:91
msgid "Cluster Mode"
msgstr ""
#: cluster/forms.py:92
msgid "Restart Mode"
msgstr "Modo de reinicio"
#: cluster/forms.py:93
msgid "Worker Display"
msgstr ""
#: cluster/forms.py:134
msgid "Stats sync interval must be at least 10 seconds."
msgstr "El intervalo de sincronización de estadísticas debe ser de al menos 10 segundos."
#: cluster/forms.py:137
msgid "Stats cache interval must be at least 10 seconds."
msgstr "El intervalo de caché de estadísticas debe ser de al menos 10 segundos."
#: cluster/views.py:15 cluster/views.py:27 cluster/views.py:96
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Acceso denegado"
#: cluster/views.py:17 templates/base.html:185
msgid "Cluster"
msgstr ""
#: cluster/views.py:33
msgid "Edit Worker: "
msgstr "Editar Worker: "
#: cluster/views.py:39
msgid "Worker deleted|Worker deleted: "
msgstr "Worker eliminado|Worker eliminado: "
#: cluster/views.py:42
msgid "Worker not deleted|Invalid confirmation."
msgstr "Worker no eliminado|Confirmación inválida."
#: cluster/views.py:46 templates/cluster/list_buttons.html:2
msgid "Add Worker"
msgstr "Agregar Worker"
#: cluster/views.py:57
msgid "Worker updated|Worker updated: "
msgstr "Worker actualizado|Worker actualizado: "
#: cluster/views.py:59
msgid "Worker created|Worker created: "
msgstr "Worker creado|Worker creado: "
#: cluster/views.py:64
msgid ""
"\n"
" <h5>Worker Configuration</h5>\n"
" <p>Configure a cluster worker node that will synchronize with this "
"primary instance.</p>\n"
" \n"
" <h5>Name</h5>\n"
" <p>A unique name to identify this worker.</p>\n"
" \n"
" <h5>IP Address</h5>\n"
" <p>The IP address of the worker node. Leave empty if IP lock is "
"disabled.</p>\n"
" \n"
" <h5>IP Lock</h5>\n"
" <p>When enabled, the worker can only connect from the specified IP "
"address.</p>\n"
" \n"
" <h5>Location Information</h5>\n"
" <p>Optional location details for this worker (country, city, "
"hostname).</p>\n"
" "
msgstr ""
#: cluster/views.py:99 templates/cluster/list_buttons.html:3
msgid "Cluster Settings"
msgstr "Configuración del Cluster"
#: cluster/views.py:105
msgid "Cluster settings updated successfully."
msgstr "Configuración del cluster actualizada exitosamente."
#: cluster/views.py:112
msgid ""
"\n"
" <h5>Cluster Mode</h5>\n"
" <p>Configure how the cluster operates and synchronizes "
"configurations between nodes.</p>\n"
" \n"
" <h5>Sync Intervals</h5>\n"
" <p>Configure how frequently statistics and cache data are "
"synchronized between cluster nodes.</p>\n"
" \n"
" <h5>Restart Mode</h5>\n"
" <p>Choose whether WireGuard services should be automatically "
"restarted when configurations change, or if manual intervention is required."
"</p>\n"
" \n"
" <h5>Worker Display</h5>\n"
" <p>Select how workers should be identified in the interface - by "
"name, server address, location, or a combination.</p>\n"
" "
msgstr ""
#: console/views.py:25 console/views.py:57 user_manager/forms.py:16 #: console/views.py:25 console/views.py:57 user_manager/forms.py:16
msgid "Console" msgid "Console"
msgstr "Consola" msgstr "Consola"
@@ -65,64 +265,14 @@ msgstr "DNS primario"
msgid "Secondary DNS" msgid "Secondary DNS"
msgstr "DNS secundario" msgstr "DNS secundario"
#: dns/forms.py:25 dns/forms.py:67 dns/forms.py:109
#: templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Volver"
#: dns/forms.py:29 #: dns/forms.py:29
msgid "Resolver Settings" msgid "Resolver Settings"
msgstr "Configuración de resolución" msgstr "Configuración de resolución"
#: dns/forms.py:37 dns/forms.py:83 dns/forms.py:134
#: templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Guardar"
#: dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Nombre de host"
#: dns/forms.py:66 templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "Dirección IP"
#: dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Eliminar"
#: dns/forms.py:75 #: dns/forms.py:75
msgid "Static DNS" msgid "Static DNS"
msgstr "DNS estático" msgstr "DNS estático"
#: dns/forms.py:111 templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Nombre"
#: dns/forms.py:112 firewall/forms.py:111 #: dns/forms.py:112 firewall/forms.py:111
#: templates/dns/static_host_list.html:69 #: templates/dns/static_host_list.html:69
#: templates/firewall/manage_redirect_rule.html:18 #: templates/firewall/manage_redirect_rule.html:18
@@ -470,10 +620,6 @@ msgstr ""
"Si encuentra algún problema con la traducción o desea solicitar un nuevo " "Si encuentra algún problema con la traducción o desea solicitar un nuevo "
"idioma, por favor abra un" "idioma, por favor abra un"
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Acceso denegado"
#: templates/access_denied.html:12 #: templates/access_denied.html:12
msgid "Sorry, you do not have permission to access this page." msgid "Sorry, you do not have permission to access this page."
msgstr "Lo siento, no tienes permiso para acceder a esta página." msgstr "Lo siento, no tienes permiso para acceder a esta página."
@@ -508,9 +654,10 @@ msgstr "Has cerrado sesión correctamente."
msgid "Login again" msgid "Login again"
msgstr "Iniciar sesión de nuevo" msgstr "Iniciar sesión de nuevo"
#: templates/base.html:112 templates/dns/static_host_list.html:72 #: templates/base.html:112 templates/cluster/workers_list.html:9
#: vpn_invite/forms.py:78 vpn_invite/forms.py:79 vpn_invite/forms.py:80 #: templates/dns/static_host_list.html:72 vpn_invite/forms.py:78
#: vpn_invite/forms.py:81 vpn_invite/forms.py:82 #: vpn_invite/forms.py:79 vpn_invite/forms.py:80 vpn_invite/forms.py:81
#: vpn_invite/forms.py:82
msgid "Status" msgid "Status"
msgstr "Estado" msgstr "Estado"
@@ -523,11 +670,11 @@ msgstr "Gestión de usuarios"
msgid "VPN Invite" msgid "VPN Invite"
msgstr "Invitación VPN" msgstr "Invitación VPN"
#: templates/base.html:254 #: templates/base.html:263
msgid "Update Required" msgid "Update Required"
msgstr "Actualización requerida" msgstr "Actualización requerida"
#: templates/base.html:256 #: templates/base.html:265
msgid "" msgid ""
"Your WireGuard settings have been modified. To apply these changes, please " "Your WireGuard settings have been modified. To apply these changes, please "
"update the configuration and reload the WireGuard service." "update the configuration and reload the WireGuard service."
@@ -535,22 +682,78 @@ msgstr ""
"Tus ajustes de WireGuard han sido modificados. Para aplicar los cambios, " "Tus ajustes de WireGuard han sido modificados. Para aplicar los cambios, "
"actualiza la configuración y recarga el servicio WireGuard." "actualiza la configuración y recarga el servicio WireGuard."
#: templates/base.html:265 #: templates/base.html:274
msgid "Update and restart service" msgid "Update and restart service"
msgstr "Actualizar y reiniciar servicio" msgstr "Actualizar y reiniciar servicio"
#: templates/base.html:273 #: templates/base.html:282
msgid "Update and reload service" msgid "Update and reload service"
msgstr "Actualizar y recargar servicio" msgstr "Actualizar y recargar servicio"
#: templates/base.html:286 #: templates/base.html:295
msgid "Update Available" msgid "Update Available"
msgstr "Actualización disponible" msgstr "Actualización disponible"
#: templates/base.html:288 #: templates/base.html:297
msgid "Version" msgid "Version"
msgstr "Versión" msgstr "Versión"
#: templates/cluster/workers_list.html:11
msgid "Location"
msgstr "Ubicación"
#: templates/cluster/workers_list.html:12
msgid "Last Seen"
msgstr "Visto por última vez"
#: templates/cluster/workers_list.html:13
msgid "Config Version"
msgstr "Versión de configuración"
#: templates/cluster/workers_list.html:14
msgid "Options"
msgstr "Opciones"
#: templates/cluster/workers_list.html:26 vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Deshabilitado"
#: templates/cluster/workers_list.html:33
msgid "IP Lock Enabled"
msgstr "Bloqueo de IP habilitado"
#: templates/cluster/workers_list.html:36
#: templates/cluster/workers_list.html:43
msgid "Not set"
msgstr "No establecido"
#: templates/cluster/workers_list.html:50
msgid "Never"
msgstr ""
#: templates/cluster/workers_list.html:57
msgid "Config Pending"
msgstr "Configuración pendiente"
#: templates/cluster/workers_list.html:65
msgid "Force Reload"
msgstr ""
#: templates/cluster/workers_list.html:70
msgid "Force Restart"
msgstr ""
#: templates/cluster/workers_list.html:74
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Editar"
#: templates/cluster/workers_list.html:79
msgid "No workers configured"
msgstr ""
#: templates/console/console.html:12 #: templates/console/console.html:12
msgid "Clear" msgid "Clear"
msgstr "Limpiar" msgstr "Limpiar"
@@ -591,12 +794,6 @@ msgstr "Última actualización"
msgid "Update" msgid "Update"
msgstr "Actualizar" msgstr "Actualizar"
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Editar"
#: templates/dns/static_host_list.html:116 #: templates/dns/static_host_list.html:116
msgid "Add Filter List" msgid "Add Filter List"
msgstr "Añadir lista de filtro" msgstr "Añadir lista de filtro"
@@ -1575,14 +1772,6 @@ msgstr ""
msgid "Please type the username to proceed." msgid "Please type the username to proceed."
msgstr "Por favor escribe el nombre de usuario para continuar." msgstr "Por favor escribe el nombre de usuario para continuar."
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Habilitado"
#: vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Deshabilitado"
#: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70 #: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70
#: vpn_invite/forms.py:71 vpn_invite/forms.py:72 #: vpn_invite/forms.py:71 vpn_invite/forms.py:72
msgid "URL" msgid "URL"

Binary file not shown.

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-12 11:30-0300\n" "POT-Creation-Date: 2025-08-14 22:07-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,210 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cluster/forms.py:17 dns/forms.py:111 templates/cluster/workers_list.html:8
#: templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Nom"
#: cluster/forms.py:18 templates/cluster/workers_list.html:24
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Activé"
#: cluster/forms.py:19
msgid "IP Lock"
msgstr ""
#: cluster/forms.py:20 dns/forms.py:66 templates/cluster/workers_list.html:10
#: templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "Adresse IP"
#: cluster/forms.py:21
msgid "Country"
msgstr ""
#: cluster/forms.py:22
msgid "City"
msgstr ""
#: cluster/forms.py:23 dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Nom dhôte"
#: cluster/forms.py:25 cluster/forms.py:95 dns/forms.py:25 dns/forms.py:67
#: dns/forms.py:109 templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Retour"
#: cluster/forms.py:26 dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Supprimer"
#: cluster/forms.py:54 cluster/forms.py:121 dns/forms.py:37 dns/forms.py:83
#: dns/forms.py:134 templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Enregistrer"
#: cluster/forms.py:69
msgid "A worker with that name already exists."
msgstr "Un worker avec ce nom existe déjà."
#: cluster/forms.py:72
msgid "IP Address is required when IP Lock is enabled."
msgstr ""
#: cluster/forms.py:87
msgid "Cluster Enabled"
msgstr "Cluster activé"
#: cluster/forms.py:88
msgid "Primary Enable WireGuard"
msgstr ""
#: cluster/forms.py:89
msgid "Stats Sync Interval (seconds)"
msgstr ""
#: cluster/forms.py:90
msgid "Stats Cache Interval (seconds)"
msgstr ""
#: cluster/forms.py:91
msgid "Cluster Mode"
msgstr ""
#: cluster/forms.py:92
msgid "Restart Mode"
msgstr "Mode de redémarrage"
#: cluster/forms.py:93
msgid "Worker Display"
msgstr ""
#: cluster/forms.py:134
msgid "Stats sync interval must be at least 10 seconds."
msgstr "L'intervalle de synchronisation des statistiques doit être d'au moins 10 secondes."
"Lintervalle dactualisation de la liste des peers doit être dau moins 5 "
"secondes."
#: cluster/forms.py:137
msgid "Stats cache interval must be at least 10 seconds."
msgstr "L'intervalle de cache des statistiques doit être d'au moins 10 secondes."
"Lintervalle dactualisation de la liste des peers doit être dau moins 5 "
"secondes."
#: cluster/views.py:15 cluster/views.py:27 cluster/views.py:96
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Accès refusé"
#: cluster/views.py:17 templates/base.html:185
msgid "Cluster"
msgstr ""
#: cluster/views.py:33
msgid "Edit Worker: "
msgstr "Modifier Worker : "
#: cluster/views.py:39
msgid "Worker deleted|Worker deleted: "
msgstr "Worker supprimé|Worker supprimé : "
#: cluster/views.py:42
msgid "Worker not deleted|Invalid confirmation."
msgstr "Worker non supprimé|Confirmation invalide."
#: cluster/views.py:46 templates/cluster/list_buttons.html:2
msgid "Add Worker"
msgstr "Ajouter Worker"
#: cluster/views.py:57
msgid "Worker updated|Worker updated: "
msgstr "Worker mis à jour|Worker mis à jour : "
#: cluster/views.py:59
msgid "Worker created|Worker created: "
msgstr "Worker créé|Worker créé : "
#: cluster/views.py:64
msgid ""
"\n"
" <h5>Worker Configuration</h5>\n"
" <p>Configure a cluster worker node that will synchronize with this "
"primary instance.</p>\n"
" \n"
" <h5>Name</h5>\n"
" <p>A unique name to identify this worker.</p>\n"
" \n"
" <h5>IP Address</h5>\n"
" <p>The IP address of the worker node. Leave empty if IP lock is "
"disabled.</p>\n"
" \n"
" <h5>IP Lock</h5>\n"
" <p>When enabled, the worker can only connect from the specified IP "
"address.</p>\n"
" \n"
" <h5>Location Information</h5>\n"
" <p>Optional location details for this worker (country, city, "
"hostname).</p>\n"
" "
msgstr ""
#: cluster/views.py:99 templates/cluster/list_buttons.html:3
msgid "Cluster Settings"
msgstr "Paramètres du Cluster"
#: cluster/views.py:105
msgid "Cluster settings updated successfully."
msgstr "Paramètres du cluster mis à jour avec succès."
#: cluster/views.py:112
msgid ""
"\n"
" <h5>Cluster Mode</h5>\n"
" <p>Configure how the cluster operates and synchronizes "
"configurations between nodes.</p>\n"
" \n"
" <h5>Sync Intervals</h5>\n"
" <p>Configure how frequently statistics and cache data are "
"synchronized between cluster nodes.</p>\n"
" \n"
" <h5>Restart Mode</h5>\n"
" <p>Choose whether WireGuard services should be automatically "
"restarted when configurations change, or if manual intervention is required."
"</p>\n"
" \n"
" <h5>Worker Display</h5>\n"
" <p>Select how workers should be identified in the interface - by "
"name, server address, location, or a combination.</p>\n"
" "
msgstr ""
#: console/views.py:25 console/views.py:57 user_manager/forms.py:16 #: console/views.py:25 console/views.py:57 user_manager/forms.py:16
msgid "Console" msgid "Console"
msgstr "Console" msgstr "Console"
@@ -65,64 +269,14 @@ msgstr "DNS primaire"
msgid "Secondary DNS" msgid "Secondary DNS"
msgstr "DNS secondaire" msgstr "DNS secondaire"
#: dns/forms.py:25 dns/forms.py:67 dns/forms.py:109
#: templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Retour"
#: dns/forms.py:29 #: dns/forms.py:29
msgid "Resolver Settings" msgid "Resolver Settings"
msgstr "Paramètres du résolveur" msgstr "Paramètres du résolveur"
#: dns/forms.py:37 dns/forms.py:83 dns/forms.py:134
#: templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Enregistrer"
#: dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Nom dhôte"
#: dns/forms.py:66 templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "Adresse IP"
#: dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Supprimer"
#: dns/forms.py:75 #: dns/forms.py:75
msgid "Static DNS" msgid "Static DNS"
msgstr "DNS statique" msgstr "DNS statique"
#: dns/forms.py:111 templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Nom"
#: dns/forms.py:112 firewall/forms.py:111 #: dns/forms.py:112 firewall/forms.py:111
#: templates/dns/static_host_list.html:69 #: templates/dns/static_host_list.html:69
#: templates/firewall/manage_redirect_rule.html:18 #: templates/firewall/manage_redirect_rule.html:18
@@ -472,10 +626,6 @@ msgstr ""
"Si vous constatez un problème dans la traduction ou souhaitez demander une " "Si vous constatez un problème dans la traduction ou souhaitez demander une "
"nouvelle langue, veuillez ouvrir une" "nouvelle langue, veuillez ouvrir une"
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Accès refusé"
#: templates/access_denied.html:12 #: templates/access_denied.html:12
msgid "Sorry, you do not have permission to access this page." msgid "Sorry, you do not have permission to access this page."
msgstr "Désolé, vous navez pas lautorisation daccéder à cette page." msgstr "Désolé, vous navez pas lautorisation daccéder à cette page."
@@ -510,9 +660,10 @@ msgstr "Vous avez été déconnecté avec succès."
msgid "Login again" msgid "Login again"
msgstr "Se reconnecter" msgstr "Se reconnecter"
#: templates/base.html:112 templates/dns/static_host_list.html:72 #: templates/base.html:112 templates/cluster/workers_list.html:9
#: vpn_invite/forms.py:78 vpn_invite/forms.py:79 vpn_invite/forms.py:80 #: templates/dns/static_host_list.html:72 vpn_invite/forms.py:78
#: vpn_invite/forms.py:81 vpn_invite/forms.py:82 #: vpn_invite/forms.py:79 vpn_invite/forms.py:80 vpn_invite/forms.py:81
#: vpn_invite/forms.py:82
msgid "Status" msgid "Status"
msgstr "Statut" msgstr "Statut"
@@ -525,11 +676,11 @@ msgstr "Gestion des utilisateurs"
msgid "VPN Invite" msgid "VPN Invite"
msgstr "Invitation VPN" msgstr "Invitation VPN"
#: templates/base.html:254 #: templates/base.html:263
msgid "Update Required" msgid "Update Required"
msgstr "Mise à jour requise" msgstr "Mise à jour requise"
#: templates/base.html:256 #: templates/base.html:265
msgid "" msgid ""
"Your WireGuard settings have been modified. To apply these changes, please " "Your WireGuard settings have been modified. To apply these changes, please "
"update the configuration and reload the WireGuard service." "update the configuration and reload the WireGuard service."
@@ -537,22 +688,78 @@ msgstr ""
"Les paramètres WireGuard ont été modifiés. Pour appliquer ces changements, " "Les paramètres WireGuard ont été modifiés. Pour appliquer ces changements, "
"mettez à jour la configuration et rechargez le service WireGuard." "mettez à jour la configuration et rechargez le service WireGuard."
#: templates/base.html:265 #: templates/base.html:274
msgid "Update and restart service" msgid "Update and restart service"
msgstr "Mettre à jour et redémarrer le service" msgstr "Mettre à jour et redémarrer le service"
#: templates/base.html:273 #: templates/base.html:282
msgid "Update and reload service" msgid "Update and reload service"
msgstr "Mettre à jour et recharger le service" msgstr "Mettre à jour et recharger le service"
#: templates/base.html:286 #: templates/base.html:295
msgid "Update Available" msgid "Update Available"
msgstr "Mise à jour disponible" msgstr "Mise à jour disponible"
#: templates/base.html:288 #: templates/base.html:297
msgid "Version" msgid "Version"
msgstr "Version" msgstr "Version"
#: templates/cluster/workers_list.html:11
msgid "Location"
msgstr "Emplacement"
#: templates/cluster/workers_list.html:12
msgid "Last Seen"
msgstr "Dernière connexion"
#: templates/cluster/workers_list.html:13
msgid "Config Version"
msgstr "Version de configuration"
#: templates/cluster/workers_list.html:14
msgid "Options"
msgstr "Options"
#: templates/cluster/workers_list.html:26 vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Désactivé"
#: templates/cluster/workers_list.html:33
msgid "IP Lock Enabled"
msgstr "Verrouillage IP activé"
#: templates/cluster/workers_list.html:36
#: templates/cluster/workers_list.html:43
msgid "Not set"
msgstr "Non défini"
#: templates/cluster/workers_list.html:50
msgid "Never"
msgstr ""
#: templates/cluster/workers_list.html:57
msgid "Config Pending"
msgstr "Configuration en attente"
#: templates/cluster/workers_list.html:65
msgid "Force Reload"
msgstr ""
#: templates/cluster/workers_list.html:70
msgid "Force Restart"
msgstr ""
#: templates/cluster/workers_list.html:74
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Modifier"
#: templates/cluster/workers_list.html:79
msgid "No workers configured"
msgstr ""
#: templates/console/console.html:12 #: templates/console/console.html:12
msgid "Clear" msgid "Clear"
msgstr "Effacer" msgstr "Effacer"
@@ -593,12 +800,6 @@ msgstr "Dernière mise à jour"
msgid "Update" msgid "Update"
msgstr "Mettre à jour" msgstr "Mettre à jour"
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Modifier"
#: templates/dns/static_host_list.html:116 #: templates/dns/static_host_list.html:116
msgid "Add Filter List" msgid "Add Filter List"
msgstr "Ajouter une liste de filtres" msgstr "Ajouter une liste de filtres"
@@ -1273,8 +1474,8 @@ msgid ""
"This configuration does not contain a private key. You must add the private " "This configuration does not contain a private key. You must add the private "
"key manually in your client before using it." "key manually in your client before using it."
msgstr "" msgstr ""
"Cette configuration ne contient pas de clé privée. Vous devez ajouter la " "Cette configuration ne contient pas de clé privée. Vous devez ajouter la clé "
"clé privée manuellement dans votre client avant de l'utiliser." "privée manuellement dans votre client avant de l'utiliser."
#: templates/wireguard/wireguard_peer_list.html:590 #: templates/wireguard/wireguard_peer_list.html:590
msgid "" msgid ""
@@ -1582,14 +1783,6 @@ msgstr ""
msgid "Please type the username to proceed." msgid "Please type the username to proceed."
msgstr "Veuillez saisir le nom dutilisateur pour continuer." msgstr "Veuillez saisir le nom dutilisateur pour continuer."
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Activé"
#: vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Désactivé"
#: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70 #: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70
#: vpn_invite/forms.py:71 vpn_invite/forms.py:72 #: vpn_invite/forms.py:71 vpn_invite/forms.py:72
msgid "URL" msgid "URL"

Binary file not shown.

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-12 11:30-0300\n" "POT-Creation-Date: 2025-08-14 22:07-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,6 +17,206 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cluster/forms.py:17 dns/forms.py:111 templates/cluster/workers_list.html:8
#: templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Nome"
#: cluster/forms.py:18 templates/cluster/workers_list.html:24
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Habilitado"
#: cluster/forms.py:19
msgid "IP Lock"
msgstr "Bloqueio de IP"
#: cluster/forms.py:20 dns/forms.py:66 templates/cluster/workers_list.html:10
#: templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "Endereço IP"
#: cluster/forms.py:21
msgid "Country"
msgstr "País"
#: cluster/forms.py:22
msgid "City"
msgstr "Cidade"
#: cluster/forms.py:23 dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Endereço do Host"
#: cluster/forms.py:25 cluster/forms.py:95 dns/forms.py:25 dns/forms.py:67
#: dns/forms.py:109 templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Voltar"
#: cluster/forms.py:26 dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Excluir"
#: cluster/forms.py:54 cluster/forms.py:121 dns/forms.py:37 dns/forms.py:83
#: dns/forms.py:134 templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Salvar"
#: cluster/forms.py:69
msgid "A worker with that name already exists."
msgstr "Um worker com esse nome já existe."
#: cluster/forms.py:72
msgid "IP Address is required when IP Lock is enabled."
msgstr "Endereço IP é obrigatório quando Bloqueio de IP está habilitado."
#: cluster/forms.py:87
msgid "Cluster Enabled"
msgstr "Cluster Habilitado"
#: cluster/forms.py:88
msgid "Primary Enable WireGuard"
msgstr "Habilitar WireGuard Principal"
#: cluster/forms.py:89
msgid "Stats Sync Interval (seconds)"
msgstr "Intervalo de Sincronização de Estatísticas (segundos)"
#: cluster/forms.py:90
msgid "Stats Cache Interval (seconds)"
msgstr "Intervalo de Cache de Estatísticas (segundos)"
#: cluster/forms.py:91
msgid "Cluster Mode"
msgstr "Modo do Cluster"
#: cluster/forms.py:92
msgid "Restart Mode"
msgstr "Modo de Reinicialização"
#: cluster/forms.py:93
msgid "Worker Display"
msgstr "Exibição do Worker"
#: cluster/forms.py:134
msgid "Stats sync interval must be at least 10 seconds."
msgstr "Intervalo de sincronização de estatísticas deve ser de pelo menos 10 segundos."
#: cluster/forms.py:137
msgid "Stats cache interval must be at least 10 seconds."
msgstr "Intervalo de cache de estatísticas deve ser de pelo menos 10 segundos."
#: cluster/views.py:15 cluster/views.py:27 cluster/views.py:96
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Acesso Negado"
#: cluster/views.py:17 templates/base.html:185
msgid "Cluster"
msgstr "Cluster"
#: cluster/views.py:33
msgid "Edit Worker: "
msgstr "Editar Worker: "
#: cluster/views.py:39
msgid "Worker deleted|Worker deleted: "
msgstr "Worker excluído|Worker excluído: "
#: cluster/views.py:42
msgid "Worker not deleted|Invalid confirmation."
msgstr "Worker não foi excluído|Confirmação inválida."
#: cluster/views.py:46 templates/cluster/list_buttons.html:2
msgid "Add Worker"
msgstr "Adicionar Worker"
#: cluster/views.py:57
msgid "Worker updated|Worker updated: "
msgstr "Worker atualizado|Worker atualizado: "
#: cluster/views.py:59
msgid "Worker created|Worker created: "
msgstr "Worker criado|Worker criado: "
#: cluster/views.py:64
msgid ""
"\n"
" <h5>Worker Configuration</h5>\n"
" <p>Configure a cluster worker node that will synchronize with this "
"primary instance.</p>\n"
" \n"
" <h5>Name</h5>\n"
" <p>A unique name to identify this worker.</p>\n"
" \n"
" <h5>IP Address</h5>\n"
" <p>The IP address of the worker node. Leave empty if IP lock is "
"disabled.</p>\n"
" \n"
" <h5>IP Lock</h5>\n"
" <p>When enabled, the worker can only connect from the specified IP "
"address.</p>\n"
" \n"
" <h5>Location Information</h5>\n"
" <p>Optional location details for this worker (country, city, "
"hostname).</p>\n"
" "
msgstr ""
#: cluster/views.py:99 templates/cluster/list_buttons.html:3
msgid "Cluster Settings"
msgstr "Configurações do Cluster"
#: cluster/views.py:105
msgid "Cluster settings updated successfully."
msgstr "Configurações do cluster atualizadas com sucesso."
#: cluster/views.py:112
msgid ""
"\n"
" <h5>Cluster Mode</h5>\n"
" <p>Configure how the cluster operates and synchronizes "
"configurations between nodes.</p>\n"
" \n"
" <h5>Sync Intervals</h5>\n"
" <p>Configure how frequently statistics and cache data are "
"synchronized between cluster nodes.</p>\n"
" \n"
" <h5>Restart Mode</h5>\n"
" <p>Choose whether WireGuard services should be automatically "
"restarted when configurations change, or if manual intervention is required."
"</p>\n"
" \n"
" <h5>Worker Display</h5>\n"
" <p>Select how workers should be identified in the interface - by "
"name, server address, location, or a combination.</p>\n"
" "
msgstr ""
#: console/views.py:25 console/views.py:57 user_manager/forms.py:16 #: console/views.py:25 console/views.py:57 user_manager/forms.py:16
msgid "Console" msgid "Console"
msgstr "Console" msgstr "Console"
@@ -65,64 +265,14 @@ msgstr "DNS Primário"
msgid "Secondary DNS" msgid "Secondary DNS"
msgstr "DNS Secundário" msgstr "DNS Secundário"
#: dns/forms.py:25 dns/forms.py:67 dns/forms.py:109
#: templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Voltar"
#: dns/forms.py:29 #: dns/forms.py:29
msgid "Resolver Settings" msgid "Resolver Settings"
msgstr "Resolução de DNS" msgstr "Resolução de DNS"
#: dns/forms.py:37 dns/forms.py:83 dns/forms.py:134
#: templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Salvar"
#: dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Endereço do Host"
#: dns/forms.py:66 templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "Endereço IP"
#: dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Excluir"
#: dns/forms.py:75 #: dns/forms.py:75
msgid "Static DNS" msgid "Static DNS"
msgstr "DNS Estático" msgstr "DNS Estático"
#: dns/forms.py:111 templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Nome"
#: dns/forms.py:112 firewall/forms.py:111 #: dns/forms.py:112 firewall/forms.py:111
#: templates/dns/static_host_list.html:69 #: templates/dns/static_host_list.html:69
#: templates/firewall/manage_redirect_rule.html:18 #: templates/firewall/manage_redirect_rule.html:18
@@ -471,10 +621,6 @@ msgstr ""
"Se encontrar algum problema na tradução ou quiser solicitar um novo idioma, " "Se encontrar algum problema na tradução ou quiser solicitar um novo idioma, "
"por favor abra uma" "por favor abra uma"
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Acesso Negado"
#: templates/access_denied.html:12 #: templates/access_denied.html:12
msgid "Sorry, you do not have permission to access this page." msgid "Sorry, you do not have permission to access this page."
msgstr "Desculpe, você não tem permissão para acessar esta página." msgstr "Desculpe, você não tem permissão para acessar esta página."
@@ -509,9 +655,10 @@ msgstr "Você foi desconectado com sucesso."
msgid "Login again" msgid "Login again"
msgstr "Acessar novamente" msgstr "Acessar novamente"
#: templates/base.html:112 templates/dns/static_host_list.html:72 #: templates/base.html:112 templates/cluster/workers_list.html:9
#: vpn_invite/forms.py:78 vpn_invite/forms.py:79 vpn_invite/forms.py:80 #: templates/dns/static_host_list.html:72 vpn_invite/forms.py:78
#: vpn_invite/forms.py:81 vpn_invite/forms.py:82 #: vpn_invite/forms.py:79 vpn_invite/forms.py:80 vpn_invite/forms.py:81
#: vpn_invite/forms.py:82
msgid "Status" msgid "Status"
msgstr "Estado" msgstr "Estado"
@@ -524,11 +671,11 @@ msgstr "Configurar Usuários"
msgid "VPN Invite" msgid "VPN Invite"
msgstr "Convite para VPN" msgstr "Convite para VPN"
#: templates/base.html:254 #: templates/base.html:263
msgid "Update Required" msgid "Update Required"
msgstr "Atualização Necessária" msgstr "Atualização Necessária"
#: templates/base.html:256 #: templates/base.html:265
msgid "" msgid ""
"Your WireGuard settings have been modified. To apply these changes, please " "Your WireGuard settings have been modified. To apply these changes, please "
"update the configuration and reload the WireGuard service." "update the configuration and reload the WireGuard service."
@@ -536,22 +683,78 @@ msgstr ""
"Suas configurações do WireGuard foram modificadas. Para aplicar essas " "Suas configurações do WireGuard foram modificadas. Para aplicar essas "
"mudanças, atualize a configuração e recarregue o serviço WireGuard." "mudanças, atualize a configuração e recarregue o serviço WireGuard."
#: templates/base.html:265 #: templates/base.html:274
msgid "Update and restart service" msgid "Update and restart service"
msgstr "Atualizar e reiniciar o serviço" msgstr "Atualizar e reiniciar o serviço"
#: templates/base.html:273 #: templates/base.html:282
msgid "Update and reload service" msgid "Update and reload service"
msgstr "Atualizar e recarregar o serviço" msgstr "Atualizar e recarregar o serviço"
#: templates/base.html:286 #: templates/base.html:295
msgid "Update Available" msgid "Update Available"
msgstr "Atualização Disponível" msgstr "Atualização Disponível"
#: templates/base.html:288 #: templates/base.html:297
msgid "Version" msgid "Version"
msgstr "Versão" msgstr "Versão"
#: templates/cluster/workers_list.html:11
msgid "Location"
msgstr "Localização"
#: templates/cluster/workers_list.html:12
msgid "Last Seen"
msgstr "Visto pela Última Vez"
#: templates/cluster/workers_list.html:13
msgid "Config Version"
msgstr "Versão da Configuração"
#: templates/cluster/workers_list.html:14
msgid "Options"
msgstr "Opções"
#: templates/cluster/workers_list.html:26 vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Desabilitado"
#: templates/cluster/workers_list.html:33
msgid "IP Lock Enabled"
msgstr "Bloqueio de IP Habilitado"
#: templates/cluster/workers_list.html:36
#: templates/cluster/workers_list.html:43
msgid "Not set"
msgstr "Não definido"
#: templates/cluster/workers_list.html:50
msgid "Never"
msgstr "Nunca"
#: templates/cluster/workers_list.html:57
msgid "Config Pending"
msgstr "Configuração Pendente"
#: templates/cluster/workers_list.html:65
msgid "Force Reload"
msgstr "Forçar Recarga"
#: templates/cluster/workers_list.html:70
msgid "Force Restart"
msgstr "Forçar Reinicialização"
#: templates/cluster/workers_list.html:74
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Editar"
#: templates/cluster/workers_list.html:79
msgid "No workers configured"
msgstr ""
#: templates/console/console.html:12 #: templates/console/console.html:12
msgid "Clear" msgid "Clear"
msgstr "Limpar" msgstr "Limpar"
@@ -592,12 +795,6 @@ msgstr "Última Atualização"
msgid "Update" msgid "Update"
msgstr "Atualizar" msgstr "Atualizar"
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Editar"
#: templates/dns/static_host_list.html:116 #: templates/dns/static_host_list.html:116
msgid "Add Filter List" msgid "Add Filter List"
msgstr "Adicionar Lista de Filtro" msgstr "Adicionar Lista de Filtro"
@@ -1590,14 +1787,6 @@ msgstr ""
msgid "Please type the username to proceed." msgid "Please type the username to proceed."
msgstr "Por favor, digite o nome de usuário para prosseguir." msgstr "Por favor, digite o nome de usuário para prosseguir."
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Habilitado"
#: vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Desabilitado"
#: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70 #: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70
#: vpn_invite/forms.py:71 vpn_invite/forms.py:72 #: vpn_invite/forms.py:71 vpn_invite/forms.py:72
msgid "URL" msgid "URL"

Binary file not shown.

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-08-12 11:30-0300\n" "POT-Creation-Date: 2025-08-14 22:07-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,6 +18,206 @@ msgstr ""
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n " "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n "
">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" ">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
#: cluster/forms.py:17 dns/forms.py:111 templates/cluster/workers_list.html:8
#: templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Názov"
#: cluster/forms.py:18 templates/cluster/workers_list.html:24
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Povolené"
#: cluster/forms.py:19
msgid "IP Lock"
msgstr ""
#: cluster/forms.py:20 dns/forms.py:66 templates/cluster/workers_list.html:10
#: templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "IP adresa"
#: cluster/forms.py:21
msgid "Country"
msgstr ""
#: cluster/forms.py:22
msgid "City"
msgstr ""
#: cluster/forms.py:23 dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Názov hostiteľa"
#: cluster/forms.py:25 cluster/forms.py:95 dns/forms.py:25 dns/forms.py:67
#: dns/forms.py:109 templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Späť"
#: cluster/forms.py:26 dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Vymazať"
#: cluster/forms.py:54 cluster/forms.py:121 dns/forms.py:37 dns/forms.py:83
#: dns/forms.py:134 templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Uložiť"
#: cluster/forms.py:69
msgid "A worker with that name already exists."
msgstr "Worker s týmto názvom už existuje."
#: cluster/forms.py:72
msgid "IP Address is required when IP Lock is enabled."
msgstr ""
#: cluster/forms.py:87
msgid "Cluster Enabled"
msgstr "Cluster povolený"
#: cluster/forms.py:88
msgid "Primary Enable WireGuard"
msgstr ""
#: cluster/forms.py:89
msgid "Stats Sync Interval (seconds)"
msgstr ""
#: cluster/forms.py:90
msgid "Stats Cache Interval (seconds)"
msgstr ""
#: cluster/forms.py:91
msgid "Cluster Mode"
msgstr ""
#: cluster/forms.py:92
msgid "Restart Mode"
msgstr "Režim reštartu"
#: cluster/forms.py:93
msgid "Worker Display"
msgstr ""
#: cluster/forms.py:134
msgid "Stats sync interval must be at least 10 seconds."
msgstr "Interval synchronizácie štatistík musí byť aspoň 10 sekúnd."
#: cluster/forms.py:137
msgid "Stats cache interval must be at least 10 seconds."
msgstr "Interval cache štatistík musí byť aspoň 10 sekúnd."
#: cluster/views.py:15 cluster/views.py:27 cluster/views.py:96
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Prístup zamietnutý"
#: cluster/views.py:17 templates/base.html:185
msgid "Cluster"
msgstr ""
#: cluster/views.py:33
msgid "Edit Worker: "
msgstr "Upraviť Worker: "
#: cluster/views.py:39
msgid "Worker deleted|Worker deleted: "
msgstr "Worker vymazaný|Worker vymazaný: "
#: cluster/views.py:42
msgid "Worker not deleted|Invalid confirmation."
msgstr "Worker nebol vymazaný|Neplatné potvrdenie."
#: cluster/views.py:46 templates/cluster/list_buttons.html:2
msgid "Add Worker"
msgstr "Pridať Worker"
#: cluster/views.py:57
msgid "Worker updated|Worker updated: "
msgstr "Worker aktualizovaný|Worker aktualizovaný: "
#: cluster/views.py:59
msgid "Worker created|Worker created: "
msgstr "Worker vytvorený|Worker vytvorený: "
#: cluster/views.py:64
msgid ""
"\n"
" <h5>Worker Configuration</h5>\n"
" <p>Configure a cluster worker node that will synchronize with this "
"primary instance.</p>\n"
" \n"
" <h5>Name</h5>\n"
" <p>A unique name to identify this worker.</p>\n"
" \n"
" <h5>IP Address</h5>\n"
" <p>The IP address of the worker node. Leave empty if IP lock is "
"disabled.</p>\n"
" \n"
" <h5>IP Lock</h5>\n"
" <p>When enabled, the worker can only connect from the specified IP "
"address.</p>\n"
" \n"
" <h5>Location Information</h5>\n"
" <p>Optional location details for this worker (country, city, "
"hostname).</p>\n"
" "
msgstr ""
#: cluster/views.py:99 templates/cluster/list_buttons.html:3
msgid "Cluster Settings"
msgstr "Nastavenia Clustra"
#: cluster/views.py:105
msgid "Cluster settings updated successfully."
msgstr "Nastavenia clustra úspešne aktualizované."
#: cluster/views.py:112
msgid ""
"\n"
" <h5>Cluster Mode</h5>\n"
" <p>Configure how the cluster operates and synchronizes "
"configurations between nodes.</p>\n"
" \n"
" <h5>Sync Intervals</h5>\n"
" <p>Configure how frequently statistics and cache data are "
"synchronized between cluster nodes.</p>\n"
" \n"
" <h5>Restart Mode</h5>\n"
" <p>Choose whether WireGuard services should be automatically "
"restarted when configurations change, or if manual intervention is required."
"</p>\n"
" \n"
" <h5>Worker Display</h5>\n"
" <p>Select how workers should be identified in the interface - by "
"name, server address, location, or a combination.</p>\n"
" "
msgstr ""
#: console/views.py:25 console/views.py:57 user_manager/forms.py:16 #: console/views.py:25 console/views.py:57 user_manager/forms.py:16
msgid "Console" msgid "Console"
msgstr "Konzola" msgstr "Konzola"
@@ -66,64 +266,14 @@ msgstr "Primárny DNS"
msgid "Secondary DNS" msgid "Secondary DNS"
msgstr "Sekundárny DNS" msgstr "Sekundárny DNS"
#: dns/forms.py:25 dns/forms.py:67 dns/forms.py:109
#: templates/firewall/manage_firewall_rule.html:380
#: templates/firewall/manage_firewall_settings.html:60
#: templates/firewall/manage_redirect_rule.html:85
#: templates/wireguard/wireguard_manage_ip.html:42
#: templates/wireguard/wireguard_manage_peer.html:170
#: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49
#: user_manager/forms.py:180 vpn_invite/forms.py:192 vpn_invite/forms.py:326
msgid "Back"
msgstr "Späť"
#: dns/forms.py:29 #: dns/forms.py:29
msgid "Resolver Settings" msgid "Resolver Settings"
msgstr "Nastavenia DNS" msgstr "Nastavenia DNS"
#: dns/forms.py:37 dns/forms.py:83 dns/forms.py:134
#: templates/firewall/manage_firewall_rule.html:379
#: templates/firewall/manage_firewall_settings.html:59
#: templates/firewall/manage_redirect_rule.html:84
#: templates/wireguard/wireguard_manage_ip.html:41
#: templates/wireguard/wireguard_manage_peer.html:168
#: templates/wireguard/wireguard_manage_server.html:130
#: user_manager/forms.py:98 user_manager/forms.py:205 vpn_invite/forms.py:191
#: vpn_invite/forms.py:325
msgid "Save"
msgstr "Uložiť"
#: dns/forms.py:65 templates/dns/static_host_list.html:17
msgid "Hostname"
msgstr "Názov hostiteľa"
#: dns/forms.py:66 templates/dns/static_host_list.html:18
#: templates/firewall/manage_redirect_rule.html:43
#: templates/firewall/manage_redirect_rule.html:67
#: templates/firewall/manage_redirect_rule.html:68
#: templates/wireguard/wireguard_status.html:45
msgid "IP Address"
msgstr "IP adresa"
#: dns/forms.py:68 dns/forms.py:110
#: templates/firewall/manage_firewall_rule.html:382
#: templates/firewall/manage_redirect_rule.html:86
#: templates/wireguard/wireguard_manage_ip.html:43
#: templates/wireguard/wireguard_peer_list.html:185 user_manager/forms.py:48
#: user_manager/forms.py:181
msgid "Delete"
msgstr "Vymazať"
#: dns/forms.py:75 #: dns/forms.py:75
msgid "Static DNS" msgid "Static DNS"
msgstr "Statický DNS" msgstr "Statický DNS"
#: dns/forms.py:111 templates/dns/static_host_list.html:68
#: templates/user_manager/peer_group_list.html:8 user_manager/forms.py:177
#: wireguard_peer/forms.py:10
msgid "Name"
msgstr "Názov"
#: dns/forms.py:112 firewall/forms.py:111 #: dns/forms.py:112 firewall/forms.py:111
#: templates/dns/static_host_list.html:69 #: templates/dns/static_host_list.html:69
#: templates/firewall/manage_redirect_rule.html:18 #: templates/firewall/manage_redirect_rule.html:18
@@ -470,10 +620,6 @@ msgstr ""
"Ak nájdete problémy s prekladom alebo si želáte požiadať o nový jazyk, " "Ak nájdete problémy s prekladom alebo si želáte požiadať o nový jazyk, "
"prosím otvorte" "prosím otvorte"
#: templates/access_denied.html:9
msgid "Access Denied"
msgstr "Prístup zamietnutý"
#: templates/access_denied.html:12 #: templates/access_denied.html:12
msgid "Sorry, you do not have permission to access this page." msgid "Sorry, you do not have permission to access this page."
msgstr "Prepáčte, nemáte oprávnenie na prístup k tejto stránke." msgstr "Prepáčte, nemáte oprávnenie na prístup k tejto stránke."
@@ -506,9 +652,10 @@ msgstr "Boli ste úspešne odhlásený."
msgid "Login again" msgid "Login again"
msgstr "Prihlásiť sa znovu" msgstr "Prihlásiť sa znovu"
#: templates/base.html:112 templates/dns/static_host_list.html:72 #: templates/base.html:112 templates/cluster/workers_list.html:9
#: vpn_invite/forms.py:78 vpn_invite/forms.py:79 vpn_invite/forms.py:80 #: templates/dns/static_host_list.html:72 vpn_invite/forms.py:78
#: vpn_invite/forms.py:81 vpn_invite/forms.py:82 #: vpn_invite/forms.py:79 vpn_invite/forms.py:80 vpn_invite/forms.py:81
#: vpn_invite/forms.py:82
msgid "Status" msgid "Status"
msgstr "Stav" msgstr "Stav"
@@ -521,11 +668,11 @@ msgstr "Správa používateľov"
msgid "VPN Invite" msgid "VPN Invite"
msgstr "VPN pozvánka" msgstr "VPN pozvánka"
#: templates/base.html:254 #: templates/base.html:263
msgid "Update Required" msgid "Update Required"
msgstr "Aktualizácia potrebná" msgstr "Aktualizácia potrebná"
#: templates/base.html:256 #: templates/base.html:265
msgid "" msgid ""
"Your WireGuard settings have been modified. To apply these changes, please " "Your WireGuard settings have been modified. To apply these changes, please "
"update the configuration and reload the WireGuard service." "update the configuration and reload the WireGuard service."
@@ -533,22 +680,78 @@ msgstr ""
"Vaše WireGuard nastavenia boli zmenené. Pre aplikovanie týchto zmien, prosím " "Vaše WireGuard nastavenia boli zmenené. Pre aplikovanie týchto zmien, prosím "
"aktualizujte konfiguráciu a reštartujte WireGuard službu." "aktualizujte konfiguráciu a reštartujte WireGuard službu."
#: templates/base.html:265 #: templates/base.html:274
msgid "Update and restart service" msgid "Update and restart service"
msgstr "Aktualizovať a reštartovať službu" msgstr "Aktualizovať a reštartovať službu"
#: templates/base.html:273 #: templates/base.html:282
msgid "Update and reload service" msgid "Update and reload service"
msgstr "Aktualizovať a znovu načítať službu" msgstr "Aktualizovať a znovu načítať službu"
#: templates/base.html:286 #: templates/base.html:295
msgid "Update Available" msgid "Update Available"
msgstr "Aktualizácia dostupná" msgstr "Aktualizácia dostupná"
#: templates/base.html:288 #: templates/base.html:297
msgid "Version" msgid "Version"
msgstr "Verzia" msgstr "Verzia"
#: templates/cluster/workers_list.html:11
msgid "Location"
msgstr "Umiestnenie"
#: templates/cluster/workers_list.html:12
msgid "Last Seen"
msgstr "Naposledy videný"
#: templates/cluster/workers_list.html:13
msgid "Config Version"
msgstr "Verzia konfigurácie"
#: templates/cluster/workers_list.html:14
msgid "Options"
msgstr "Možnosti"
#: templates/cluster/workers_list.html:26 vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Zakázané"
#: templates/cluster/workers_list.html:33
msgid "IP Lock Enabled"
msgstr "IP zámok povolený"
#: templates/cluster/workers_list.html:36
#: templates/cluster/workers_list.html:43
msgid "Not set"
msgstr "Nenastavené"
#: templates/cluster/workers_list.html:50
msgid "Never"
msgstr ""
#: templates/cluster/workers_list.html:57
msgid "Config Pending"
msgstr "Konfigurácia čaká"
#: templates/cluster/workers_list.html:65
msgid "Force Reload"
msgstr ""
#: templates/cluster/workers_list.html:70
msgid "Force Restart"
msgstr ""
#: templates/cluster/workers_list.html:74
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Upraviť"
#: templates/cluster/workers_list.html:79
msgid "No workers configured"
msgstr ""
#: templates/console/console.html:12 #: templates/console/console.html:12
msgid "Clear" msgid "Clear"
msgstr "Vymazať" msgstr "Vymazať"
@@ -589,12 +792,6 @@ msgstr "Posledná aktualizácia"
msgid "Update" msgid "Update"
msgstr "Aktualizovať" msgstr "Aktualizovať"
#: templates/dns/static_host_list.html:74 templates/user_manager/list.html:53
#: templates/user_manager/peer_group_list.html:35
#: templates/wireguard/wireguard_peer_list.html:196
msgid "Edit"
msgstr "Upraviť"
#: templates/dns/static_host_list.html:116 #: templates/dns/static_host_list.html:116
msgid "Add Filter List" msgid "Add Filter List"
msgstr "Pridať filter zoznam" msgstr "Pridať filter zoznam"
@@ -1584,14 +1781,6 @@ msgstr ""
msgid "Please type the username to proceed." msgid "Please type the username to proceed."
msgstr "Prosím zadajte používateľské meno na pokračovanie." msgstr "Prosím zadajte používateľské meno na pokračovanie."
#: vpn_invite/forms.py:49 vpn_invite/forms.py:294
msgid "Enabled"
msgstr "Povolené"
#: vpn_invite/forms.py:49
msgid "Disabled"
msgstr "Zakázané"
#: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70 #: vpn_invite/forms.py:68 vpn_invite/forms.py:69 vpn_invite/forms.py:70
#: vpn_invite/forms.py:71 vpn_invite/forms.py:72 #: vpn_invite/forms.py:71 vpn_invite/forms.py:72
msgid "URL" msgid "URL"

View File

@@ -178,6 +178,15 @@
</a> </a>
</li> </li>
<li class="nav-item">
<a href="/cluster/" class="nav-link {% if '/cluster/' in request.path %}active{% endif %}">
<i class="fas fa-server nav-icon"></i>
<p>
{% trans 'Cluster' %}
</p>
</a>
</li>
</ul> </ul>
</nav> </nav>

View File

@@ -0,0 +1,86 @@
{% extends "base.html" %}
{% load i18n %}
{% block content %}
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>{% trans 'Name' %}</th>
<th>{% trans 'Status' %}</th>
<th>{% trans 'IP Address' %}</th>
<th>{% trans 'Location' %}</th>
<th>{% trans 'Last Seen' %}</th>
<th>{% trans 'Config Version' %}</th>
<th colspan="2">{% trans 'Options' %}</th>
<th><i class="far fa-edit"></i></th>
</tr>
</thead>
<tbody>
{% for worker in workers %}
<tr>
<td>{{ worker.name }}</td>
<td style="width: 1%; white-space: nowrap;">
{% if worker.enabled %}
<span class="badge badge-success">{% trans 'Enabled' %}</span>
{% else %}
<span class="badge badge-secondary">{% trans 'Disabled' %}</span>
{% endif %}
</td>
<td>
{% if worker.ip_address %}
{{ worker.ip_address }}
{% if worker.ip_lock %}
<i class="fas fa-lock text-warning" title="{% trans 'IP Lock Enabled' %}"></i>
{% endif %}
{% else %}
<span class="text-muted">{% trans 'Not set' %}</span>
{% endif %}
</td>
<td>
{% if worker.country or worker.city %}
{% if worker.city %}{{ worker.city }}{% endif %}{% if worker.city and worker.country %}, {% endif %}{% if worker.country %}{{ worker.country }}{% endif %}
{% else %}
<span class="text-muted">{% trans 'Not set' %}</span>
{% endif %}
</td>
<td style="width: 1%; white-space: nowrap;">
{% if worker.workerstatus %}
{{ worker.workerstatus.last_seen|date:"M d, H:i" }}
{% else %}
<span class="text-muted">{% trans 'Never' %}</span>
{% endif %}
</td>
<td style="width: 1%; white-space: nowrap;">
{% if worker.workerstatus %}
{{ worker.workerstatus.config_version }}
{% if worker.workerstatus.config_pending %}
<i class="fas fa-clock text-warning" title="{% trans 'Config Pending' %}"></i>
{% endif %}
{% else %}
<span class="text-muted">0</span>
{% endif %}
</td>
<td style="width: 1%; white-space: nowrap;">
{% if worker.force_reload %}
<i class="fas fa-sync-alt text-info" title="{% trans 'Force Reload' %}"></i>
{% endif %}
</td>
<td style="width: 1%; white-space: nowrap;">
{% if worker.force_restart %}
<i class="fas fa-power-off text-danger" title="{% trans 'Force Restart' %}"></i>
{% endif %}
</td>
<td style="width: 1%; white-space: nowrap;">
<a href="/cluster/worker/manage/?uuid={{ worker.uuid }}" title="{% trans 'Edit' %}"><i class="far fa-edit"></i></a>
</td>
</tr>
{% empty %}
<tr>
<td colspan="9" class="text-center text-muted">{% trans 'No workers configured' %}</td>
</tr>
{% endfor %}
</tbody>
</table>
<a href="/cluster/worker/manage/" class="btn btn-primary">{% trans 'Add Worker' %}</a>
<a href="/cluster/settings/" class="btn btn-secondary">{% trans 'Cluster Settings' %}</a>
{% endblock %}

View File

@@ -21,6 +21,7 @@ from accounts.views import view_create_first_user, view_login, view_logout
from api.views import api_instance_info, api_peer_invite, api_peer_list, cron_check_updates, \ from api.views import api_instance_info, api_peer_invite, api_peer_list, cron_check_updates, \
cron_update_peer_latest_handshake, peer_info, routerfleet_authenticate_session, routerfleet_get_user_token, \ cron_update_peer_latest_handshake, peer_info, routerfleet_authenticate_session, routerfleet_get_user_token, \
wireguard_status wireguard_status
from cluster.views import cluster_main, cluster_settings, worker_manage
from console.views import view_console from console.views import view_console
from dns.views import view_apply_dns_config, view_manage_dns_settings, view_manage_filter_list, view_manage_static_host, \ from dns.views import view_apply_dns_config, view_manage_dns_settings, view_manage_filter_list, view_manage_static_host, \
view_static_host_list, view_toggle_dns_list, view_update_dns_list view_static_host_list, view_toggle_dns_list, view_update_dns_list
@@ -87,5 +88,8 @@ urlpatterns = [
path('vpn_invite/smtp_settings/', view_email_settings, name='email_settings'), path('vpn_invite/smtp_settings/', view_email_settings, name='email_settings'),
path('invite/', view_public_vpn_invite, name='public_vpn_invite'), path('invite/', view_public_vpn_invite, name='public_vpn_invite'),
path('invite/download_config/', download_config_or_qrcode, name='download_config_or_qrcode'), path('invite/download_config/', download_config_or_qrcode, name='download_config_or_qrcode'),
path('cluster/', cluster_main, name='cluster_main'),
path('cluster/worker/manage/', worker_manage, name='worker_manage'),
path('cluster/settings/', cluster_settings, name='cluster_settings'),
path('change_language/', view_change_language, name='change_language'), path('change_language/', view_change_language, name='change_language'),
] ]