From 52e0f197084a94482048aba24ab958f6e716123b Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Tue, 15 Apr 2025 13:20:58 -0300 Subject: [PATCH] WireGuard instance form translation --- dns/forms.py | 4 +- locale/pt_BR/LC_MESSAGES/django.mo | Bin 18540 -> 20029 bytes locale/pt_BR/LC_MESSAGES/django.po | 126 ++++++++++++++++-- .../wireguard/wireguard_manage_server.html | 7 +- wireguard/forms.py | 42 +++--- wireguard/views.py | 17 +-- 6 files changed, 150 insertions(+), 46 deletions(-) diff --git a/dns/forms.py b/dns/forms.py index 5cd5ea7..3422c37 100644 --- a/dns/forms.py +++ b/dns/forms.py @@ -19,8 +19,8 @@ class DNSSettingsForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(DNSSettingsForm, self).__init__(*args, **kwargs) self.helper = FormHelper() - self.fields['dns_primary'].label = _('Primary Resolver') - self.fields['dns_secondary'].label = _('Secondary Resolver') + self.fields['dns_primary'].label = _('Primary DNS') + self.fields['dns_secondary'].label = _('Secondary DNS') self.fields['dns_primary'].required = True back_label = _('Back') self.helper.form_method = 'post' diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index 9b2e84b6dc40a6e37539e4ab746023d2329dbb02..6a840bbda62c985b1137864cbb0f526a026c328d 100644 GIT binary patch delta 5522 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 P0n5D8)14t((KY`AR_A=k delta 4172 zcmZwHdr(x@0mt#P3kbd{K0(Cw8bL5%P-74zHX@=B5(A2{HX;&s(T%W+i=z0*#sp0a zu^LxXG!F$|7>o5?WljmCeyT-bf#wdhchOb>G#LIw05Rv`0eMM z%f0tJ?z#8FS6u(t>k5B4BKClxoF=Jcf1EKlaL8bOC})0V%o`kg8&h4ztQcj?y&P{D zZA=z+<50Yc!|?AIgSVXa56Gov@EBtfFa`NDllbAfu$fIo7nI;GdOv5Tn z$ETfk7tW;pInF@$Slj#XF4}8Q*R^3HoVQ!K`ui`41wCX;xvF$(W5) zbm3mq5*|Swv-uD;gNu$|VFB%%xD2y7SrceQogX`%WyP_mmCHx|Of^56*f!K2*oB(F zzVTc>h)O#Lv}8w7138Q8_!H#MT;j*V?@>1x!E|)Paj5Gu9P?2BFGbyVF{+~~)cLhI z1cRuR-RfcZn(=lH%){4E&+sdpiUXLAZa5RQ)N^neF2PCIirLtOy5XNN1Ft#9-Im>P z4yxk<#}d@QmWHX6Peu-R`uHIR8J5 zdc@~Zd*~`^g}-y!;UB1IcMfI8>2=9Kb#Nb!z}ct^9!9N16>6Y$n2RCQQooK&+MLBK zyo`EunuP}HL2dFJOvhaGY5T08a*6{NP&Zn~G}X~o)PQ!NE{vdVbO^QC-b4-TJodd_ z$VNBcqB@A zGKC#Yd&o2%59d`+x0m_=>bj3nEAmIw0I#D~<_2mH#PHS9L{gEbZgMcJ3oEF^VKsK3 z4>iJgKJ@W82Ixb>A;= zIR2E&`m;J_*erWwg{a+KirP#|Q8R1AB;1Hv;ytJpJB<2%97jFt3#c1ka*lt48n8Rh z-jrpiN3ssbU|X1qZqSKZl5?mTT*M?a`F4lNs7IBF+Dy4vk0CsW*D)DeX4^B}hk6ue zQ7hPsT8U&X)&Mh5D<00LqDL?vHKGdVgf)(v@otX4fQ-q!hgy-FI2v!EZaDOQdjJzq z6UlQdLp}4AsPpPjE4T?`_5MFcMIG$MW%xewcuXSi3RSZZwbZSs0Y2{>??8QMzQhb1 z^mF^eH3K#CS*ZK0MRnMTdPMIy_F$ae|I1V=_{TNWv(IK{)nFcK*B`<{{5`VI%+R^^ zfQnEvEp=RhTGAkDWj3P*ycZ|nN!0nD;wZd^qr+7GNyUS4^rC;Hp_Vw`Y0pLNg{7#O zG@$mvHe}4E&1rvzd_>I^F&%S>J_HAaTy%EDrobVEr_i#{=J>m z%z9BDl-oEKW9Qq?+JkD(!iiXc7B=Bj+>d>41!`iKQ0Mhx-y$z5n4Z(PXw zPvSr;2likW>cTu;S}l1cx=^!Jd6aOEzBfkgHRM^+tOg~=#{2>`vF%P zB%ONyRf@=Q5=$N+Do>I!GF}a*Oz*Ft-ke;gU5>}dLu5CJC%eewWIgeaw}{HUMBjl^ zWQO{mMz)a*qOz1cPku>$MII(Ah>rxxYox!poyul>o#Z)fy?!cnL?5LHd4;qRl{9jI zgrDZ;1)?&y@AtnyW2knM2T2ksBpZlD`paS}EkqO9OP(PU$Qz`Jyi7)t{!&2YFnNO1 z>elyuQjEC=9+rH*QyORG}HvVkteK|Bf}@AMJp%Xa(hDlhMG`| zwb<7btZ(*(O!;1J>q1PMoH8n+cr*$Xv|1UZxz0Do{I^z$n=x?SRa7F);RW;~Q z&eDb6V909ZUOgQlfAAh_iO&jJ|LAW|`t1L?AR5X& z=dvfZF7Kc_Qdp1?-BQr*iq4!<>dveT^>ozvRtGI_ja3?GTHn(dsP)&FqM)W1wEThQ zo(?7)jHJ%}CK6wmld#AaShJy_#)?!dNQypF_-ai05?`p9GeTB*|Da8A!0QY7dQJwd h@}3X02*F6O_+mo;nbG+RM#e;2N-Nya8)fHR{|1|R_cQ\n" "Language-Team: LANGUAGE \n" @@ -58,13 +58,13 @@ msgstr "Destino inválido" msgid "Enhanced filter is enabled. This command is not available." msgstr "Filtro aprimorado está habilitado. Este comando não está disponível." -#: dns/forms.py:22 -msgid "Primary Resolver" -msgstr "Servidor Primário" +#: dns/forms.py:22 wireguard/forms.py:19 +msgid "Primary DNS" +msgstr "DNS Primário" -#: dns/forms.py:23 -msgid "Secondary Resolver" -msgstr "Servidor Secundário" +#: dns/forms.py:23 wireguard/forms.py:20 +msgid "Secondary DNS" +msgstr "DNS Secundário" #: dns/forms.py:25 dns/forms.py:67 dns/forms.py:109 #: templates/wireguard/wireguard_peer_list.html:166 user_manager/forms.py:49 @@ -76,8 +76,9 @@ msgstr "Voltar" msgid "Resolver Settings" msgstr "Resolução de DNS" -#: dns/forms.py:37 dns/forms.py:83 dns/forms.py:134 user_manager/forms.py:98 -#: user_manager/forms.py:205 +#: dns/forms.py:37 dns/forms.py:83 dns/forms.py:134 +#: templates/wireguard/wireguard_manage_server.html:130 +#: user_manager/forms.py:98 user_manager/forms.py:205 msgid "Save" msgstr "Salvar" @@ -140,9 +141,8 @@ msgid "" "All DNS queries will be forwarded to the primary resolver. If the primary " "resolver is not available, the secondary resolver will be used." msgstr "" -"Todas as consultas DNS serão encaminhadas para o resolvedor primário. Se o " -"resolvedor primário não estiver disponível, o resolvedor secundário será " -"usado." +"Todas as consultas DNS serão encaminhadas para o DNS primário. Se ele não " +"estiver disponível, o DNS secundário será usado." #: dns/views.py:118 msgid "Static DNS deleted successfully" @@ -400,6 +400,14 @@ msgstr "Instância do WireGuard" msgid "Users" msgstr "Usuários" +#: templates/wireguard/wireguard_manage_server.html:18 +msgid "Create Instance" +msgstr "Criar Instância" + +#: templates/wireguard/wireguard_manage_server.html:132 +msgid "Delete Configuration" +msgstr "Excluir Configuração" + #: templates/wireguard/wireguard_peer_list.html:75 #: templates/wireguard/wireguard_peer_list.html:125 msgid "Throughput" @@ -603,7 +611,7 @@ msgstr "Recarregar o serviço Wireguard" msgid "Instance Traffic" msgstr "Tráfego da Instância" -#: templates/wireguard/wireguard_status.html:46 +#: templates/wireguard/wireguard_status.html:46 wireguard/forms.py:12 msgid "Public Address" msgstr "Endereço Público" @@ -819,10 +827,100 @@ msgstr "" msgid "Please type the username to proceed." msgstr "Por favor, digite o nome de usuário para prosseguir." -#: wireguard/views.py:96 +#: wireguard/forms.py:8 +msgid "Display Name" +msgstr "Nome de Exibição" + +#: wireguard/forms.py:9 +msgid "Instance ID" +msgstr "Instância" + +#: wireguard/forms.py:10 +msgid "Private Key" +msgstr "Chave Privada" + +#: wireguard/forms.py:11 +msgid "Public Key" +msgstr "Chave Pública" + +#: wireguard/forms.py:13 +msgid "Listen Port" +msgstr "Porta" + +#: wireguard/forms.py:14 +msgid "Internal IP Address" +msgstr "Endereço IP Interno" + +#: wireguard/forms.py:15 +msgid "Netmask" +msgstr "Máscara de Rede" + +#: wireguard/forms.py:16 +msgid "Post Up" +msgstr "Post Up" + +#: wireguard/forms.py:17 +msgid "Post Down" +msgstr "Post Down" + +#: wireguard/forms.py:18 +msgid "Web Refresh Interval" +msgstr "Intervalo de Atualização Web" + +#: wireguard/forms.py:39 +msgid "Peer List Refresh Interval must be at least 5 seconds" +msgstr "Intervalo de Atualização da Lista de Peers deve ser de pelo menos 5 segundos" + +#: wireguard/forms.py:42 +msgid "Invalid hostname or IP Address" +msgstr "Endereço ou IP inválido" + +#: wireguard/forms.py:51 +msgid "The selected network range overlaps with another instance." +msgstr "A faixa de rede selecionada se sobrepõe a outra instância." + +#: wireguard/views.py:97 msgid "WireGuard Status" msgstr "Estado do WireGuard" +#: wireguard/views.py:129 +msgid "Update WireGuard Instance" +msgstr "Atualizar Instância do WireGuard" + +#: wireguard/views.py:133 +msgid "Delete WireGuard Instance" +msgstr "Excluir Instância do WireGuard" + +#: wireguard/views.py:136 +msgid "Error removing instance: wg" +msgstr "Erro ao remover a instância: wg" + +#: wireguard/views.py:136 +msgid "" +"|Cannot delete the requested WireGuard instance. There are still peers " +"associated with this instance." +msgstr "" +"|Não é possível excluir a instância do WireGuard solicitada. Existem peers " +"associados a esta instância." + +#: wireguard/views.py:139 +msgid "|WireGuard instance deleted: wg" +msgstr "|Instância do WireGuard excluída: wg" + +#: wireguard/views.py:142 +msgid "Invalid confirmation|Please confirm deletion of WireGuard instance: wg" +msgstr "" +"Confirmação inválida|Por favor, confirme a exclusão da instância do " +"WireGuard: wg" + +#: wireguard/views.py:146 +msgid "Create a new WireGuard Instance" +msgstr "Adicionar uma nova Instância do WireGuard" + +#: wireguard/views.py:147 +msgid "New WireGuard Instance" +msgstr "Nova Instância do WireGuard" + #: wireguard_peer/views.py:50 msgid "WireGuard Peer List" msgstr "Lista de Peers do WireGuard" diff --git a/templates/wireguard/wireguard_manage_server.html b/templates/wireguard/wireguard_manage_server.html index 71cdff0..8286d5f 100644 --- a/templates/wireguard/wireguard_manage_server.html +++ b/templates/wireguard/wireguard_manage_server.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% load i18n %} {% block content %} @@ -14,7 +15,7 @@ {% endfor %}

@@ -125,9 +126,9 @@ diff --git a/wireguard/forms.py b/wireguard/forms.py index cc0c9c1..aadec0e 100644 --- a/wireguard/forms.py +++ b/wireguard/forms.py @@ -1,22 +1,26 @@ -from django import forms -from .models import WireGuardInstance, NETMASK_CHOICES -from wgwadmlibrary.tools import is_valid_ip_or_hostname import ipaddress +from django import forms +from django.utils.translation import gettext_lazy as _ + +from wgwadmlibrary.tools import is_valid_ip_or_hostname +from .models import NETMASK_CHOICES, WireGuardInstance + + class WireGuardInstanceForm(forms.ModelForm): - name = forms.CharField(label='Display Name', required=False) - instance_id = forms.IntegerField(label='Instance ID') - private_key = forms.CharField(label='Private Key') - public_key = forms.CharField(label='Public Key') - hostname = forms.CharField(label='Public Address') - listen_port = forms.IntegerField(label='Listen Port') - address = forms.GenericIPAddressField(label='VPN IP Address') - netmask = forms.ChoiceField(choices=NETMASK_CHOICES, label='Netmask') - post_up = forms.CharField(label='Post Up', required=False) - post_down = forms.CharField(label='Post Down', required=False) - peer_list_refresh_interval = forms.IntegerField(label='Web Refresh Interval', initial=20) - dns_primary = forms.GenericIPAddressField(label='Primary DNS', initial='1.1.1.1', required=False) - dns_secondary = forms.GenericIPAddressField(label='Secondary DNS', initial='', required=False) + name = forms.CharField(label=_('Display Name'), required=False) + instance_id = forms.IntegerField(label=_('Instance ID')) + private_key = forms.CharField(label=_('Private Key')) + public_key = forms.CharField(label=_('Public Key')) + hostname = forms.CharField(label=_('Public Address')) + listen_port = forms.IntegerField(label=_('Listen Port')) + address = forms.GenericIPAddressField(label=_('Internal IP Address')) + netmask = forms.ChoiceField(choices=NETMASK_CHOICES, label=_('Netmask')) + post_up = forms.CharField(label=_('Post Up'), required=False) + post_down = forms.CharField(label=_('Post Down'), required=False) + peer_list_refresh_interval = forms.IntegerField(label=_('Web Refresh Interval'), initial=10) + dns_primary = forms.GenericIPAddressField(label=_('Primary DNS'), initial='1.1.1.1', required=False) + dns_secondary = forms.GenericIPAddressField(label=_('Secondary DNS'), initial='', required=False) class Meta: model = WireGuardInstance @@ -35,10 +39,10 @@ class WireGuardInstanceForm(forms.ModelForm): peer_list_refresh_interval = cleaned_data.get('peer_list_refresh_interval') if peer_list_refresh_interval < 5: - raise forms.ValidationError('Peer List Refresh Interval must be at least 5 seconds') + raise forms.ValidationError(_('Peer List Refresh Interval must be at least 5 seconds')) if not is_valid_ip_or_hostname(hostname): - raise forms.ValidationError('Invalid hostname or IP Address') + raise forms.ValidationError(_('Invalid hostname or IP Address')) current_network = ipaddress.ip_network(f"{address}/{netmask}", strict=False) all_other_instances = WireGuardInstance.objects.all() @@ -47,7 +51,7 @@ class WireGuardInstanceForm(forms.ModelForm): for instance in all_other_instances: other_network = ipaddress.ip_network(f"{instance.address}/{instance.netmask}", strict=False) if current_network.overlaps(other_network): - raise forms.ValidationError(f"The network range {current_network} overlaps with another instance's network range {other_network}.") + raise forms.ValidationError(_('The selected network range overlaps with another instance.')) #if self.instance: # if post_up or post_down: diff --git a/wireguard/views.py b/wireguard/views.py index acb3a6c..fa5d6a1 100644 --- a/wireguard/views.py +++ b/wireguard/views.py @@ -4,6 +4,7 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required from django.db import models from django.shortcuts import get_object_or_404, redirect, render +from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy as _ from user_manager.models import UserAcl @@ -125,25 +126,25 @@ def view_wireguard_manage_instance(request): current_instance = wireguard_instances.first() if current_instance: page_title = f'wg{current_instance.instance_id}' - message_title = 'Update WireGuard Instance' + message_title = _('Update WireGuard Instance') if current_instance.name: page_title += f' ({current_instance.name})' if request.GET.get('action') == 'delete': - message_title = 'Delete WireGuard Instance' + message_title = _('Delete WireGuard Instance') if request.GET.get('confirmation') == 'delete wg' + str(current_instance.instance_id): if current_instance.peer_set.all().count() > 0: - messages.warning(request, 'Error removing wg' +str(current_instance.instance_id) + '|Cannot delete WireGuard instance wg' + str(current_instance.instance_id) + '. There are still peers associated with this instance.') + messages.warning(request, _('Error removing instance: wg') + str(current_instance.instance_id) + _('|Cannot delete the requested WireGuard instance. There are still peers associated with this instance.')) return redirect('/server/manage/?uuid=' + str(current_instance.uuid)) current_instance.delete() - messages.success(request, message_title + '|WireGuard instance wg' + str(current_instance.instance_id) + ' deleted successfully.') + messages.success(request, message_title + _('|WireGuard instance deleted: wg') + str(current_instance.instance_id)) return redirect('/server/manage/') else: - messages.warning(request, 'Invalid confirmation' + '|Please confirm deletion of WireGuard instance wg' + str(current_instance.instance_id)) + messages.warning(request, _('Invalid confirmation|Please confirm deletion of WireGuard instance: wg') + str(current_instance.instance_id)) return redirect('/server/manage/?uuid=' + str(current_instance.uuid)) else: - page_title = 'Create a new WireGuard Instance' - message_title = 'New WireGuard Instance' + page_title = _('Create a new WireGuard Instance') + message_title = _('New WireGuard Instance') if request.method == 'POST': form = WireGuardInstanceForm(request.POST, instance=current_instance) @@ -151,7 +152,7 @@ def view_wireguard_manage_instance(request): this_form = form.save(commit=False) this_form.pending_changes = True this_form.save() - messages.success(request, message_title + '|WireGuard instance wg' + str(form.instance.instance_id) + ' saved successfully.') + messages.success(request, message_title + '|WireGuard instance updated: wg' + str(form.instance.instance_id)) return redirect('/server/manage/?uuid=' + str(form.instance.uuid)) else: if not current_instance: