diff --git a/plinth/modules/networks/forms.py b/plinth/modules/networks/forms.py index aa54eaac1..e04ea31de 100644 --- a/plinth/modules/networks/forms.py +++ b/plinth/modules/networks/forms.py @@ -2,12 +2,11 @@ from django import forms from django.core import validators -from django.utils.translation import ugettext_lazy as _, ugettext_lazy -from markupsafe import Markup +from django.utils.translation import ugettext_lazy as _ -from plinth import cfg -from plinth import network +from plinth import cfg, network from plinth.utils import format_lazy, import_from_gi + nm = import_from_gi('NM', '1.0') @@ -39,12 +38,11 @@ class ConnectionForm(forms.Form): choices=[('external', _('External')), ('internal', _('Internal'))]) ipv4_method = forms.ChoiceField( label=_('IPv4 Addressing Method'), help_text=format_lazy( - ugettext_lazy( - '"Automatic" method will make {box_name} acquire ' - 'configuration from this network making it a client. "Shared" ' - 'method will make {box_name} act as a router, configure ' - 'clients on this network and share its Internet connection.'), - box_name=ugettext_lazy(cfg.box_name)), + _('"Automatic" method will make {box_name} acquire ' + 'configuration from this network making it a client. "Shared" ' + 'method will make {box_name} act as a router, configure ' + 'clients on this network and share its Internet connection.'), + box_name=_(cfg.box_name)), choices=[('auto', _('Automatic (DHCP)')), ('shared', _('Shared')), ('manual', _('Manual')), ('disabled', _('Disabled'))]) ipv4_address = forms.CharField( @@ -72,10 +70,9 @@ class ConnectionForm(forms.Form): validators=[validators.validate_ipv4_address], required=False) ipv6_method = forms.ChoiceField( label=_('IPv6 Addressing Method'), help_text=format_lazy( - ugettext_lazy( - '"Automatic" methods will make {box_name} acquire ' - 'configuration from this network making it a client.'), - box_name=ugettext_lazy(cfg.box_name)), + _('"Automatic" methods will make {box_name} acquire ' + 'configuration from this network making it a client.'), + box_name=_(cfg.box_name)), choices=[('auto', _('Automatic')), ('dhcp', _('Automatic, DHCP only')), ('manual', _('Manual')), ('ignore', _('Ignore'))]) ipv6_address = forms.CharField( @@ -298,7 +295,7 @@ class InternetConnectionTypeForm(forms.Form): label=_('Choose your internet connection type'), choices=[ ('dynamic_public_ip', - Markup( + format_lazy( _('I have a public IP address that may change over time' '

This means that devices on the ' 'internet can reach you when you are connected on the ' @@ -307,33 +304,34 @@ class InternetConnectionTypeForm(forms.Form): 'different IP address, especially after some offline time. ' 'Many ISPs offer this type of connectivity. If you have a ' 'public IP address but are unsure if it changes over time ' - 'or not, it is safer to choose this option.

'))), + 'or not, it is safer to choose this option.

'), + allow_markup=True)), ('static_public_ip', - Markup(format_lazy( - _('I have a public IP address that does not change overtime ' - '(recommended)' - '

This means that devices on the ' - 'Internet can reach you when you are connected on the ' - 'Internet. Every time you connect to the Internet with ' - 'your Internet Service Provider (ISP), you always get the ' - 'same IP address. This is the most trouble free setup for ' - 'many {box_name} services but very few ISPs offer this. ' - 'You may be able to get this service from your ISP by ' - 'making an additional payment.

'), - box_name=cfg.box_name))), + format_lazy( + _('I have a public IP address that does not change overtime ' + '(recommended)' + '

This means that devices on the ' + 'Internet can reach you when you are connected on the ' + 'Internet. Every time you connect to the Internet with ' + 'your Internet Service Provider (ISP), you always get the ' + 'same IP address. This is the most trouble-free setup for ' + 'many {box_name} services but very few ISPs offer this. ' + 'You may be able to get this service from your ISP by ' + 'making an additional payment.

'), box_name=cfg.box_name, + allow_markup=True)), ('private_ip', - Markup(format_lazy( - _('I dont have a public IP address' - '

This means that devices on the ' - 'Internet can not reach you when you are connected ' - 'to the Internet. Every time you connect to the Internet ' - 'with your Internet Service Provider (ISP), you get an IP ' - 'address that is only relevant for local networks. ' - 'Many ISPs offer this type of connectivity. This is the ' - 'most troublesome situation for hosting services at home. ' - '{box_name} provides many workaround solutions but each ' - 'solution has some limitations.

'), - box_name=cfg.box_name))), + format_lazy( + _('I dont have a public IP address' + '

This means that devices on the ' + 'Internet can not reach you when you are connected ' + 'to the Internet. Every time you connect to the Internet ' + 'with your Internet Service Provider (ISP), you get an IP ' + 'address that is only relevant for local networks. ' + 'Many ISPs offer this type of connectivity. This is the ' + 'most troublesome situation for hosting services at home. ' + '{box_name} provides many workaround solutions but each ' + 'solution has some limitations.

'), + box_name=cfg.box_name, allow_markup=True)), ], required=True, widget=forms.RadioSelect, @@ -351,7 +349,7 @@ class RouterConfigurationWizardForm(forms.Form): choices=[ ( 'dmz', - Markup(format_lazy( + format_lazy( _('Use DMZ feature to forward all traffic' '

Most routers provide a ' 'configuration setting called DMZ. This will allow the ' @@ -359,37 +357,31 @@ class RouterConfigurationWizardForm(forms.Form): 'internet to a single IP address such as the ' '{box_name}\'s address. First remember to configure a ' 'static local IP address for your {box_name} in your ' - 'router\'s configuration.

'), - box_name=cfg.box_name - )), - ), - ( - 'port_forwarding', - Markup(format_lazy( - _('Forward Specific Traffic as needed by each ' - 'application' - '

You may alternatively choose to ' - 'forward only specific traffic to your {box_name}. ' - 'This is ideal if you have other servers like ' - '{box_name} in your network or if your router does not ' - 'support DMZ feature. All applications that provide a ' - 'web interface need you to forward traffic from ports ' - '80 and 443 to work. Each of the other applications ' - 'will suggest which port(s) need to be forwarded ' - 'for that application to work.

'), - box_name=cfg.box_name - )) - ), - ( - 'not_configured', - Markup( - _('Router is currently unconfigured' - '

Choose this if you have not ' - 'configured or are unable to configure the router ' - 'currently and wish to be reminded later. Some of ' - 'the other configuration steps may fail.

') - ) + 'router\'s configuration.

'), box_name=cfg.box_name, + allow_markup=True), ), + ('port_forwarding', + format_lazy( + _('Forward Specific Traffic as needed by each ' + 'application' + '

You may alternatively choose to ' + 'forward only specific traffic to your {box_name}. ' + 'This is ideal if you have other servers like ' + '{box_name} in your network or if your router does not ' + 'support DMZ feature. All applications that provide a ' + 'web interface need you to forward traffic from ports ' + '80 and 443 to work. Each of the other applications ' + 'will suggest which port(s) need to be forwarded ' + 'for that application to work.

'), box_name=cfg.box_name, + allow_markup=True)), + ('not_configured', + format_lazy( + _('Router is currently unconfigured' + '

Choose this if you have not ' + 'configured or are unable to configure the router ' + 'currently and wish to be reminded later. Some of ' + 'the other configuration steps may fail.

'), + allow_markup=True)), ], required=True, widget=forms.RadioSelect, diff --git a/plinth/utils.py b/plinth/utils.py index cf238411b..f4392ef31 100644 --- a/plinth/utils.py +++ b/plinth/utils.py @@ -11,6 +11,7 @@ import re import string from distutils.version import LooseVersion +import markupsafe import ruamel.yaml from django.utils.functional import lazy @@ -33,8 +34,13 @@ def import_from_gi(library, version): def _format_lazy(string, *args, **kwargs): """Lazily format a lazy string.""" + allow_markup = kwargs.pop('allow_markup', False) string = str(string) - return string.format(*args, **kwargs) + string = string.format(*args, **kwargs) + if allow_markup: + string = markupsafe.Markup(string) + + return string format_lazy = lazy(_format_lazy, str)