From c60da3604784604bda8f16e29ec663c8657298a0 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Wed, 16 Apr 2025 12:34:50 -0300 Subject: [PATCH] firewall rules/settings translation --- firewall/forms.py | 8 +- firewall/models.py | 7 +- firewall/tools.py | 11 +- firewall/views.py | 14 +- locale/pt_BR/LC_MESSAGES/django.mo | Bin 37802 -> 40793 bytes locale/pt_BR/LC_MESSAGES/django.po | 152 +++++++++++++++--- templates/firewall/firewall_rule_list.html | 70 ++++---- .../firewall/manage_firewall_settings.html | 12 +- 8 files changed, 194 insertions(+), 80 deletions(-) diff --git a/firewall/forms.py b/firewall/forms.py index 2e37b7f..0651b98 100644 --- a/firewall/forms.py +++ b/firewall/forms.py @@ -153,10 +153,10 @@ class FirewallSettingsForm(forms.ModelForm): if not interface.startswith('wg') and interface != 'lo': interface_choices.append((interface, interface)) - default_forward_policy = forms.ChoiceField(label='Default Forward Policy', choices=[('accept', 'ACCEPT'), ('reject', 'REJECT'), ('drop', 'DROP')], initial='accept') - allow_peer_to_peer = forms.BooleanField(label='Allow Peer to Peer', required=False) - allow_instance_to_instance = forms.BooleanField(label='Allow Instance to Instance', required=False) - wan_interface = forms.ChoiceField(label='WAN Interface', choices=interface_choices, initial='eth0') + default_forward_policy = forms.ChoiceField(label=_('Default Forward Policy'), choices=[('accept', _('ACCEPT')), ('reject', _('REJECT')), ('drop', _('DROP'))], initial='accept') + allow_peer_to_peer = forms.BooleanField(label=_('Allow Peer to Peer'), required=False) + allow_instance_to_instance = forms.BooleanField(label=_('Allow Instance to Instance'), required=False) + wan_interface = forms.ChoiceField(label=_('WAN Interface'), choices=interface_choices, initial='eth0') class Meta: model = FirewallSettings diff --git a/firewall/models.py b/firewall/models.py index 70edf1d..cd309cc 100644 --- a/firewall/models.py +++ b/firewall/models.py @@ -1,6 +1,7 @@ import uuid from django.db import models +from django.utils.translation import gettext_lazy as _ from wireguard.models import NETMASK_CHOICES from wireguard.models import Peer, WireGuardInstance @@ -58,7 +59,7 @@ class FirewallRule(models.Model): state_untracked = models.BooleanField(default=False) not_state = models.BooleanField(default=False) - rule_action = models.CharField(max_length=10, default='accept', choices=[('accept', 'ACCEPT'), ('reject', 'REJECT'), ('drop', 'DROP'), ('masquerade', 'MASQUERADE')]) + rule_action = models.CharField(max_length=10, default='accept', choices=[('accept', _('ACCEPT')), ('reject', _('REJECT')), ('drop', _('DROP')), ('masquerade', _('MASQUERADE'))]) sort_order = models.PositiveIntegerField(default=0) created = models.DateTimeField(auto_now_add=True) @@ -71,8 +72,8 @@ class FirewallRule(models.Model): class FirewallSettings(models.Model): name = models.CharField(max_length=6, default='global', unique=True) - default_forward_policy = models.CharField(max_length=6, default='accept', choices=[('accept', 'ACCEPT'), ('reject', 'REJECT'), ('drop', 'DROP')]) - default_output_policy = models.CharField(max_length=6, default='accept', choices=[('accept', 'ACCEPT'), ('reject', 'REJECT'), ('drop', 'DROP')]) + default_forward_policy = models.CharField(max_length=6, default='accept', choices=[('accept', _('ACCEPT')), ('reject', _('REJECT')), ('drop', _('DROP'))]) + default_output_policy = models.CharField(max_length=6, default='accept', choices=[('accept', _('ACCEPT')), ('reject', _('REJECT')), ('drop', _('DROP'))]) allow_peer_to_peer = models.BooleanField(default=True) allow_instance_to_instance = models.BooleanField(default=True) wan_interface = models.CharField(max_length=12, default='eth0') diff --git a/firewall/tools.py b/firewall/tools.py index ae959e1..78f9f34 100644 --- a/firewall/tools.py +++ b/firewall/tools.py @@ -1,4 +1,5 @@ from django.utils import timezone +from django.utils.translation import gettext_lazy as _ from firewall.models import FirewallRule, FirewallSettings, RedirectRule from wireguard.models import PeerAllowedIP, WireGuardInstance @@ -40,7 +41,7 @@ def reset_firewall_to_default(): FirewallRule.objects.create( firewall_chain='postrouting', sort_order=0, out_interface=firewall_settings.wan_interface, rule_action='masquerade', - description='Masquerade traffic from VPN to WAN', + description=_('Masquerade traffic from VPN to WAN'), ) # This rule will now be fixed in the firewall header @@ -50,19 +51,19 @@ def reset_firewall_to_default(): # ) FirewallRule.objects.create( - firewall_chain='forward', sort_order=1, rule_action='reject', description='Reject traffic to private networks exiting on WAN interface', + firewall_chain='forward', sort_order=1, rule_action='reject', description=_('Reject traffic to private networks exiting on WAN interface'), in_interface='wg+', out_interface=firewall_settings.wan_interface, destination_ip='10.0.0.0', destination_netmask=8 ) FirewallRule.objects.create( - firewall_chain='forward', sort_order=2, rule_action='reject', description='Reject traffic to private networks exiting on WAN interface', + firewall_chain='forward', sort_order=2, rule_action='reject', description=_('Reject traffic to private networks exiting on WAN interface'), in_interface='wg+', out_interface=firewall_settings.wan_interface, destination_ip='172.16.0.0', destination_netmask=12 ) FirewallRule.objects.create( - firewall_chain='forward', sort_order=3, rule_action='reject', description='Reject traffic to private networks exiting on WAN interface', + firewall_chain='forward', sort_order=3, rule_action='reject', description=_('Reject traffic to private networks exiting on WAN interface'), in_interface='wg+', out_interface=firewall_settings.wan_interface, destination_ip='192.168.0.0', destination_netmask=16 ) FirewallRule.objects.create( - firewall_chain='forward', sort_order=10, rule_action='accept', description='Allow traffic from VPN to WAN', + firewall_chain='forward', sort_order=10, rule_action='accept', description=_('Allow traffic from VPN to WAN'), in_interface='wg+', out_interface=firewall_settings.wan_interface ) return diff --git a/firewall/views.py b/firewall/views.py index 393f18c..9a46c84 100644 --- a/firewall/views.py +++ b/firewall/views.py @@ -76,7 +76,7 @@ def view_firewall_rule_list(request): if current_chain not in ['forward', 'portforward', 'postrouting']: current_chain = 'forward' context = { - 'page_title': 'Firewall Rule List', + 'page_title': _('Firewall Rule List'), 'firewall_rule_list': FirewallRule.objects.filter(firewall_chain=current_chain).order_by('sort_order'), 'current_chain': current_chain, 'port_forward_list': RedirectRule.objects.all().order_by('port'), @@ -90,7 +90,7 @@ def view_firewall_rule_list(request): def manage_firewall_rule(request): if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=40).exists(): return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) - context = {'page_title': 'Manage Firewall Rule'} + context = {'page_title': _('Manage Firewall Rule')} instance = None uuid = request.GET.get('uuid', None) if uuid: @@ -108,9 +108,9 @@ def manage_firewall_rule(request): if wireguard_instance: wireguard_instance.pending_changes = True wireguard_instance.save() - messages.success(request, 'Firewall rule deleted successfully') + messages.success(request, _('Firewall rule deleted successfully')) else: - messages.warning(request, 'Error deleting Firewall rule|Confirmation did not match. Firewall rule was not deleted.') + messages.warning(request, _('Error deleting Firewall rule|Confirmation did not match. Firewall rule was not deleted.')) return redirect('/firewall/rule_list/') else: current_chain = request.GET.get('chain', 'forward') @@ -122,7 +122,7 @@ def manage_firewall_rule(request): firewall_settings.pending_changes = True firewall_settings.save() form.save() - messages.success(request, 'Firewall rule saved successfully') + messages.success(request, _('Firewall rule saved successfully')) # Marking wireguard_instance as having pending changes, not the best way to do this, but it works for now. # I will improve it later. wireguard_instance = WireGuardInstance.objects.all().first() @@ -154,7 +154,7 @@ def manage_firewall_rule(request): def view_manage_firewall_settings(request): if not UserAcl.objects.filter(user=request.user).filter(user_level__gte=40).exists(): return render(request, 'access_denied.html', {'page_title': 'Access Denied'}) - context = {'page_title': 'Manage Firewall Settings'} + context = {'page_title': _('Manage Firewall Settings')} previous_firewall_chain = request.GET.get('chain') if previous_firewall_chain not in ['forward', 'portforward', 'postrouting']: previous_firewall_chain = 'forward' @@ -170,7 +170,7 @@ def view_manage_firewall_settings(request): form = FirewallSettingsForm(request.POST, instance=firewall_settings) if form.is_valid(): form.save() - messages.success(request, 'Firewall settings saved successfully') + messages.success(request, _('Firewall settings saved successfully')) # Marking wireguard_instance as having pending changes, not the best way to do this, but it works for now. # I will improve it later. wireguard_instance = WireGuardInstance.objects.all().first() diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index 4cee3b9752fbaefedb586f9c5c7fdb13983ca50c..f42bcbe6ef905bc7669bf50a237ba54c03eef508 100644 GIT binary patch delta 10015 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 delta 7231 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 v+LNcx(= diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index f4bd37e..2a6599d 100644 --- a/locale/pt_BR/LC_MESSAGES/django.po +++ b/locale/pt_BR/LC_MESSAGES/django.po @@ -6,9 +6,10 @@ #, fuzzy msgid "" msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-04-16 11:43-0300\n" +"POT-Creation-Date: 2025-04-16 12:32-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -251,6 +252,25 @@ msgstr "" msgid "Default Forward Policy" msgstr "Política Padrão (Forward)" +#: firewall/forms.py:156 firewall/models.py:62 firewall/models.py:75 +#: firewall/models.py:76 templates/firewall/firewall_rule_list.html:63 +#: templates/firewall/firewall_rule_list.html:91 +#: templates/firewall/firewall_rule_list.html:168 +#: templates/firewall/firewall_rule_list.html:187 +msgid "ACCEPT" +msgstr "ACEITA" + +#: firewall/forms.py:156 firewall/models.py:62 firewall/models.py:75 +#: firewall/models.py:76 templates/firewall/firewall_rule_list.html:170 +#: templates/firewall/firewall_rule_list.html:187 +msgid "REJECT" +msgstr "REJEITA" + +#: firewall/forms.py:156 firewall/models.py:62 firewall/models.py:75 +#: firewall/models.py:76 +msgid "DROP" +msgstr "DESCARTA" + #: firewall/forms.py:157 msgid "Allow Peer to Peer" msgstr "Permitir tráfego entre Peers" @@ -263,6 +283,22 @@ msgstr "Permitir tráfego entre Instâncias" msgid "WAN Interface" msgstr "Interface WAN" +#: firewall/models.py:62 +msgid "MASQUERADE" +msgstr "MASCARAR" + +#: firewall/tools.py:44 +msgid "Masquerade traffic from VPN to WAN" +msgstr "Mascarar tráfego da VPN para a WAN" + +#: firewall/tools.py:54 firewall/tools.py:58 firewall/tools.py:62 +msgid "Reject traffic to private networks exiting on WAN interface" +msgstr "Rejeitar tráfego para redes privadas saindo pela interface WAN" + +#: firewall/tools.py:66 +msgid "Allow traffic from VPN to WAN" +msgstr "Permitir tráfego da VPN para a WAN" + #: firewall/views.py:21 msgid "Port Forward List" msgstr "Lista de Encaminhamento de Porta" @@ -466,6 +502,101 @@ msgstr "Encaminhamento de Porta" msgid "Default Policy" msgstr "Política Padrão" +#: templates/firewall/firewall_rule_list.html:40 +msgid "In" +msgstr "Entrada" + +#: templates/firewall/firewall_rule_list.html:41 +msgid "Out" +msgstr "Saída" + +#: templates/firewall/firewall_rule_list.html:42 +msgid "Source" +msgstr "Origem" + +#: templates/firewall/firewall_rule_list.html:43 +#: templates/firewall/redirect_rule_list.html:15 +msgid "Destination" +msgstr "Destino" + +#: templates/firewall/firewall_rule_list.html:44 +#: templates/firewall/manage_redirect_rule.html:22 +#: templates/firewall/redirect_rule_list.html:13 +msgid "Protocol" +msgstr "Protocolo" + +#: templates/firewall/firewall_rule_list.html:45 +#: templates/firewall/manage_redirect_rule.html:30 +#: templates/firewall/redirect_rule_list.html:14 +#: templates/wireguard/wireguard_status.html:47 vpn_invite/forms.py:284 +msgid "Port" +msgstr "Porta" + +#: templates/firewall/firewall_rule_list.html:46 +msgid "State" +msgstr "Estado" + +#: templates/firewall/firewall_rule_list.html:47 +msgid "Action" +msgstr "Ação" + +#: templates/firewall/firewall_rule_list.html:53 +msgid "Automatic rule: Allow established/related traffic" +msgstr "Regra Automática: Permitir tráfego estabelecido/relacionado" + +#: templates/firewall/firewall_rule_list.html:58 +#: templates/firewall/firewall_rule_list.html:138 +msgid "all" +msgstr "Todos" + +#: templates/firewall/firewall_rule_list.html:60 +#: templates/firewall/firewall_rule_list.html:142 +msgid "Related" +msgstr "Relacionado" + +#: templates/firewall/firewall_rule_list.html:61 +#: templates/firewall/firewall_rule_list.html:143 +msgid "Established" +msgstr "Estabelecido" + +#: templates/firewall/firewall_rule_list.html:71 +#: templates/firewall/firewall_rule_list.html:97 +msgid "Automatic Rule: Port forward." +msgstr "Regra Automática: Encaminhamento de Porta." + +#: templates/firewall/firewall_rule_list.html:141 +msgid "New" +msgstr "Novo" + +#: templates/firewall/firewall_rule_list.html:144 +msgid "Invalid" +msgstr "Inválido" + +#: templates/firewall/firewall_rule_list.html:145 +msgid "Untracked" +msgstr "Não rastreado" + +#: templates/firewall/firewall_rule_list.html:158 +msgid "Automatic Rule: Firewall Settings Peer to Peer traffic" +msgstr "Regra Automática: Configurações de Firewall tráfego entre Peers" + +#: templates/firewall/firewall_rule_list.html:179 +msgid "Automatic Rule: Firewall Settings Instance to Instance" +msgstr "Regra Automática: permitir tráfego entre Instâncias" + +#: templates/firewall/firewall_rule_list.html:194 +msgid "Create Firewall Rule" +msgstr "Criar Regra de Firewall" + +#: templates/firewall/firewall_rule_list.html:195 +#: templates/firewall/redirect_rule_list.html:59 +msgid "Firewall Settings" +msgstr "Configuração de Firewall" + +#: templates/firewall/firewall_rule_list.html:196 +msgid "Display automatic rules" +msgstr "Mostrar regras automáticas" + #: templates/firewall/manage_firewall_settings.html:61 msgid "Reset firewall to default" msgstr "Redefinir firewall para o padrão" @@ -480,17 +611,6 @@ msgstr "" "Você tem certeza que deseja continuar?\\n\\nDigite 'delete all rules and " "reset firewall' para confirmar." -#: templates/firewall/manage_redirect_rule.html:22 -#: templates/firewall/redirect_rule_list.html:13 -msgid "Protocol" -msgstr "Protocolo" - -#: templates/firewall/manage_redirect_rule.html:30 -#: templates/firewall/redirect_rule_list.html:14 -#: templates/wireguard/wireguard_status.html:47 vpn_invite/forms.py:284 -msgid "Port" -msgstr "Porta" - #: templates/firewall/manage_redirect_rule.html:35 msgid "Destination Port" msgstr "Porta de Destino" @@ -580,10 +700,6 @@ msgstr "Para excluir esta regra, digite:" msgid "Instance" msgstr "Instância" -#: templates/firewall/redirect_rule_list.html:15 -msgid "Destination" -msgstr "Destino" - #: templates/firewall/redirect_rule_list.html:16 msgid "Allow Forward" msgstr "Permitir Encaminhamento" @@ -604,10 +720,6 @@ msgstr "" msgid "Create Port forwarding Rule" msgstr "Criar Regra de Encaminhamento de Porta" -#: templates/firewall/redirect_rule_list.html:59 -msgid "Firewall Settings" -msgstr "Configuração de Firewall" - #: templates/user_manager/list.html:9 user_manager/forms.py:20 msgid "User Level" msgstr "Nível de Acesso" diff --git a/templates/firewall/firewall_rule_list.html b/templates/firewall/firewall_rule_list.html index f770f23..5c5fcec 100644 --- a/templates/firewall/firewall_rule_list.html +++ b/templates/firewall/firewall_rule_list.html @@ -1,15 +1,16 @@ {% extends 'base.html' %} +{% load i18n %} {% block page_custom_head %}