diff --git a/README.md b/README.md index 9f9d3d0c0..64dcd3529 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,9 @@ personal servers running free software for private, personal communications. It is a networking appliance designed to allow interfacing with the rest of the Internet under conditions of protected privacy and data security. It hosts applications such as -blog, wiki, website, social network, email, web proxy and a Tor relay -on a device that can replace your Wi-Fi router so that your data stays -with you. +blog, wiki, website, social network, email, web proxy and a Tor relay, +on a device that can replace your Wi-Fi router, so that your data +stays with you. Plinth is a web interface to administer the functions of the FreedomBox. It is extensible and provides various applications of diff --git a/plinth/context_processors.py b/plinth/context_processors.py index 433e0dd4b..d7de023ee 100644 --- a/plinth/context_processors.py +++ b/plinth/context_processors.py @@ -19,6 +19,7 @@ Django context processors to provide common data to templates. """ +from django.utils.translation import ugettext as _, ugettext_noop import re from plinth import cfg @@ -30,10 +31,15 @@ def common(request): Any resources referenced in the return value are expected to have been initialized or configured externally beforehand. """ + # Allow a value in configuration file to be translated. Allow + # the brand name 'FreedomBox' itself to be translated. + ugettext_noop('FreedomBox') + slash_indices = [match.start() for match in re.finditer('/', request.path)] active_menu_urls = [request.path[:index + 1] for index in slash_indices] return { 'cfg': cfg, 'submenu': cfg.main_menu.active_item(request), - 'active_menu_urls': active_menu_urls + 'active_menu_urls': active_menu_urls, + 'box_name': _(cfg.box_name) } diff --git a/plinth/locale/django.pot b/plinth/locale/django.pot index 537d9e5bb..0247cfbb4 100644 --- a/plinth/locale/django.pot +++ b/plinth/locale/django.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" +"POT-Creation-Date: 2016-01-24 12:27+0530\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -47,11 +47,15 @@ msgstr "" msgid "Cannot connect to {host}:{port}" msgstr "" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "" @@ -86,10 +90,11 @@ msgid "Enable service discovery" msgstr "" #: plinth/modules/avahi/templates/avahi.html:29 +#, python-format msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." @@ -98,7 +103,7 @@ msgstr "" #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 @@ -158,12 +163,12 @@ msgstr "" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 #: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/transmission/views.py:109 plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "" @@ -173,58 +178,60 @@ msgstr "" #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 #: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/tor/tor.py:252 plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "" -#: plinth/modules/config/config.py:96 +#: plinth/modules/config/config.py:97 +#, python-brace-format msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "" -#: plinth/modules/config/config.py:109 +#: plinth/modules/config/config.py:110 +#, python-brace-format msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" msgstr "" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "" @@ -411,147 +418,151 @@ msgstr "" msgid "Result" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " "providers." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " "you may use the update URL of your provider." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" -msgstr "" - -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 -msgid "Username" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 -msgid "Password" +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 +msgid "Username" msgstr "" #: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 +msgid "Password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" +msgstr "" + +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" +msgid "Dynamic DNS Client" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 @@ -561,7 +572,7 @@ msgid "" "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:50 @@ -574,10 +585,10 @@ msgid "" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 @@ -597,16 +608,16 @@ msgid "" msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 @@ -622,13 +633,13 @@ msgstr "" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" +msgid "Current status:" msgstr "" #: plinth/modules/firewall/templates/firewall.html:41 @@ -645,11 +656,13 @@ msgid "Service/Port" msgstr "" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "" @@ -673,8 +686,8 @@ msgstr "" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 @@ -689,31 +702,35 @@ msgstr "" msgid "User account created, you are now logged in" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" +msgstr "" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format msgid "" -"Please provide the following basic information to complete the setup process." +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "" - -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " "Other users can be added later." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "" @@ -722,30 +739,31 @@ msgid "Setup Complete!" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 +msgid "Go to Apps" +msgstr "" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" msgstr "" #: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 msgid "Go to Networks" msgstr "" -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 -msgid "Go to Apps" -msgstr "" - #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "" @@ -758,8 +776,8 @@ msgstr "" msgid "Where to Get Help" msgstr "" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" +#: plinth/modules/help/help.py:38 +msgid "Manual" msgstr "" #: plinth/modules/help/help.py:48 @@ -771,15 +789,21 @@ msgstr "" msgid "About {box_name}" msgstr "" +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" #: plinth/modules/help/templates/help_about.html:43 @@ -793,68 +817,76 @@ msgid "" msgstr "" #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "" -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" msgstr "" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." msgstr "" #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" +msgid "Wiki and Blog (ikiwiki)" msgstr "" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "" #: plinth/modules/ikiwiki/forms.py:36 @@ -883,21 +915,22 @@ msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" +msgid "Delete Wiki or Blog %(name)s" msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -930,7 +963,7 @@ msgid "Create" msgstr "" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" +msgid "Wiki and Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:106 @@ -938,7 +971,7 @@ msgid "Manage Wikis and Blogs" msgstr "" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" +msgid "Create Wiki or Blog" msgstr "" #: plinth/modules/ikiwiki/views.py:145 @@ -972,7 +1005,144 @@ msgid "Could not delete {name}: {error}" msgstr "" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" +msgid "Delete Wiki or Blog" +msgstr "" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "" + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." msgstr "" #: plinth/modules/mumble/__init__.py:38 @@ -1010,170 +1180,151 @@ msgstr "" msgid "Mumble server is not running" msgstr "" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "" -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." msgstr "" -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." msgstr "" -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." msgstr "" -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "" -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." msgstr "" -#: plinth/modules/networks/forms.py:121 -msgid "Show password" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" msgstr "" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "" -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." msgstr "" -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "" @@ -1197,58 +1348,58 @@ msgstr "" msgid "This type of connection is not yet understood." msgstr "" -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "" -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "" -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "" -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "" -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "" @@ -1258,7 +1409,7 @@ msgid "Edit connection" msgstr "" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "" @@ -1405,23 +1556,24 @@ msgstr "" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" @@ -1513,7 +1665,7 @@ msgstr "" #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " @@ -1530,7 +1682,7 @@ msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" @@ -2028,8 +2180,8 @@ msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" #: plinth/modules/restore/templates/restore_index.html:40 @@ -2106,7 +2258,7 @@ msgstr "" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "" @@ -2143,7 +2295,7 @@ msgstr "" msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 +#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:68 msgid "Anonymity Network (Tor)" msgstr "" @@ -2199,71 +2351,72 @@ msgstr "" msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "" -#: plinth/modules/tor/tor.py:46 +#: plinth/modules/tor/tor.py:47 msgid "Enable Tor" msgstr "" -#: plinth/modules/tor/tor.py:49 +#: plinth/modules/tor/tor.py:50 msgid "Enable Tor Hidden Service" msgstr "" -#: plinth/modules/tor/tor.py:51 +#: plinth/modules/tor/tor.py:53 +#, python-brace-format msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." -msgstr "" - -#: plinth/modules/tor/tor.py:55 -msgid "Download software packages over Tor" +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." msgstr "" #: plinth/modules/tor/tor.py:57 +msgid "Download software packages over Tor" +msgstr "" + +#: plinth/modules/tor/tor.py:59 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " "during software downloads." msgstr "" -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 +#: plinth/modules/tor/tor.py:87 plinth/modules/tor/tor.py:287 msgid "Tor Hidden Service" msgstr "" -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/tor.py:117 msgid "Tor Control Panel" msgstr "" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/tor.py:242 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "" -#: plinth/modules/tor/tor.py:256 +#: plinth/modules/tor/tor.py:258 msgid "Tor enabled" msgstr "" -#: plinth/modules/tor/tor.py:259 +#: plinth/modules/tor/tor.py:261 msgid "Tor disabled" msgstr "" -#: plinth/modules/tor/tor.py:264 +#: plinth/modules/tor/tor.py:266 msgid "Tor hidden service enabled" msgstr "" -#: plinth/modules/tor/tor.py:267 +#: plinth/modules/tor/tor.py:269 msgid "Tor hidden service disabled" msgstr "" -#: plinth/modules/tor/tor.py:292 +#: plinth/modules/tor/tor.py:294 msgid "Enabled package download over Tor" msgstr "" -#: plinth/modules/tor/tor.py:295 +#: plinth/modules/tor/tor.py:297 msgid "Disabled package download over Tor" msgstr "" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "" @@ -2329,70 +2482,66 @@ msgid "" "will attempt to perform any package upgrades that are available." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." -msgstr "" - -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" -msgstr "" - -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " -msgstr "" - -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" -msgstr "" - -#: plinth/modules/upgrades/templates/upgrades.html:69 +#: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:80 +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." +msgstr "" + +#: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." msgstr "" -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "" + +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "" -#: plinth/modules/upgrades/views.py:37 +#: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." +msgstr "" + +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." +msgstr "" + +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "" - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "" - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "" @@ -2600,8 +2749,9 @@ msgstr "" msgid "Secure Shell (SSH) Server" msgstr "" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" msgstr "" #: plinth/templates/404.html:25 @@ -2632,27 +2782,24 @@ msgid "" msgstr "" #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" msgstr "" -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" -msgstr "" - -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "" diff --git a/plinth/locale/fake/LC_MESSAGES/django.po b/plinth/locale/fake/LC_MESSAGES/django.po index d9b001ae4..3e616b71d 100644 --- a/plinth/locale/fake/LC_MESSAGES/django.po +++ b/plinth/locale/fake/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Plinth 0.6\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-20 13:58+0530\n" -"PO-Revision-Date: 2015-12-20 13:57+0530\n" +"POT-Creation-Date: 2016-01-24 12:26+0530\n" +"PO-Revision-Date: 2016-01-24 12:16+0530\n" "Last-Translator: Sunil Mohan Adapa \n" "Language-Team: Plinth Developers \n" @@ -49,11 +49,15 @@ msgstr "CONNECT TO {host}:{port}" msgid "Cannot connect to {host}:{port}" msgstr "CANNOT CONNECT TO {host}:{port}" +#: plinth/context_processors.py:36 +msgid "FreedomBox" +msgstr "FREEDOMBOX" + #: plinth/modules/apps/apps.py:26 msgid "Apps" msgstr "APPS" -#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:90 +#: plinth/modules/apps/apps.py:32 plinth/templates/base.html.py:93 msgid "Applications" msgstr "APPLICATIONS" @@ -95,17 +99,18 @@ msgid "Enable service discovery" msgstr "ENABLE SERVICE DISCOVERY" #: plinth/modules/avahi/templates/avahi.html:29 +#, python-format msgid "" -"Service discovery allows other machines on the network to discover your " -"FreedomBox and services running on it. It also allows FreedomBox to " -"discover other machines and services running on your local network. Service " +"Service discovery allows other devices on the network to discover your " +"%(box_name)s and services running on it. It also allows %(box_name)s to " +"discover other devices and services running on your local network. Service " "discovery is not essential and works only on internal networks. It may be " "disabled to improve security especially when connecting to a hostile local " "network." msgstr "" -"SERVICE DISCOVERY ALLOWS OTHER MACHINES ON THE NETWORK TO DISCOVER YOUR " -"FREEDOMBOX AND SERVICES RUNNING ON IT. IT ALSO ALLOWS FREEDOMBOX TO " -"DISCOVER OTHER MACHINES AND SERVICES RUNNING ON YOUR LOCAL NETWORK. SERVICE " +"SERVICE DISCOVERY ALLOWS OTHER DEVICES ON THE NETWORK TO DISCOVER YOUR " +"%(box_name)s AND SERVICES RUNNING ON IT. IT ALSO ALLOWS %(box_name)s TO " +"DISCOVER OTHER DEVICES AND SERVICES RUNNING ON YOUR LOCAL NETWORK. SERVICE " "DISCOVERY IS NOT ESSENTIAL AND WORKS ONLY ON INTERNAL NETWORKS. IT MAY BE " "DISABLED TO IMPROVE SECURITY ESPECIALLY WHEN CONNECTING TO A HOSTILE LOCAL " "NETWORK." @@ -113,7 +118,7 @@ msgstr "" #: plinth/modules/avahi/templates/avahi.html:40 #: plinth/modules/datetime/templates/datetime.html:35 #: plinth/modules/deluge/templates/deluge.html:39 -#: plinth/modules/dynamicdns/dynamicdns.py:38 +#: plinth/modules/dynamicdns/dynamicdns.py:39 #: plinth/modules/firewall/templates/firewall.html:57 #: plinth/modules/mumble/templates/mumble.html:44 #: plinth/modules/networks/templates/connection_show.html:261 @@ -173,12 +178,12 @@ msgstr "UPDATE SETUP" #: plinth/modules/avahi/views.py:73 plinth/modules/datetime/views.py:85 #: plinth/modules/deluge/views.py:80 -#: plinth/modules/dynamicdns/dynamicdns.py:368 +#: plinth/modules/dynamicdns/dynamicdns.py:371 #: plinth/modules/ikiwiki/views.py:95 plinth/modules/mumble/views.py:80 #: plinth/modules/openvpn/views.py:142 plinth/modules/privoxy/views.py:83 #: plinth/modules/quassel/views.py:76 plinth/modules/restore/views.py:68 #: plinth/modules/roundcube/views.py:84 plinth/modules/shaarli/views.py:74 -#: plinth/modules/transmission/views.py:105 plinth/modules/xmpp/views.py:100 +#: plinth/modules/transmission/views.py:109 plinth/modules/xmpp/views.py:100 msgid "Configuration updated" msgstr "CONFIGURATION UPDATED" @@ -188,68 +193,70 @@ msgstr "CONFIGURATION UPDATED" #: plinth/modules/owncloud/owncloud.py:93 plinth/modules/privoxy/views.py:85 #: plinth/modules/quassel/views.py:78 plinth/modules/restore/views.py:70 #: plinth/modules/roundcube/views.py:86 plinth/modules/shaarli/views.py:76 -#: plinth/modules/tor/tor.py:250 plinth/modules/transmission/views.py:107 -#: plinth/modules/upgrades/views.py:103 plinth/modules/xmpp/views.py:102 +#: plinth/modules/tor/tor.py:252 plinth/modules/transmission/views.py:111 +#: plinth/modules/upgrades/views.py:118 plinth/modules/xmpp/views.py:102 msgid "Setting unchanged" msgstr "SETTING UNCHANGED" -#: plinth/modules/config/config.py:83 plinth/modules/config/config.py:120 -#: plinth/modules/dynamicdns/dynamicdns.py:145 +#: plinth/modules/config/config.py:84 plinth/modules/config/config.py:121 +#: plinth/modules/dynamicdns/dynamicdns.py:148 msgid "Invalid domain name" msgstr "INVALID DOMAIN NAME" -#: plinth/modules/config/config.py:94 +#: plinth/modules/config/config.py:95 msgid "Hostname" msgstr "HOSTNAME" -#: plinth/modules/config/config.py:96 +#: plinth/modules/config/config.py:97 +#, python-brace-format msgid "" -"Hostname is the local name by which other machines on the local network " -"reach your machine. It must start and end with an alphabet or a digit and " -"have as interior characters only alphabets, digits and hyphens. Total " +"Hostname is the local name by which other devices on the local network can " +"reach your {box_name}. It must start and end with an alphabet or a digit " +"and have as interior characters only alphabets, digits and hyphens. Total " "length must be 63 characters or less." msgstr "" -"HOSTNAME IS THE LOCAL NAME BY WHICH OTHER MACHINES ON THE LOCAL NETWORK " -"REACH YOUR MACHINE. IT MUST START AND END WITH AN ALPHABET OR A DIGIT AND " -"HAVE AS INTERIOR CHARACTERS ONLY ALPHABETS, DIGITS AND HYPHENS. TOTAL " +"HOSTNAME IS THE LOCAL NAME BY WHICH OTHER DEVICES ON THE LOCAL NETWORK CAN " +"REACH YOUR {box_name}. IT MUST START AND END WITH AN ALPHABET OR A DIGIT " +"AND HAVE AS INTERIOR CHARACTERS ONLY ALPHABETS, DIGITS AND HYPHENS. TOTAL " "LENGTH MUST BE 63 CHARACTERS OR LESS." -#: plinth/modules/config/config.py:104 +#: plinth/modules/config/config.py:105 msgid "Invalid hostname" msgstr "INVALID HOSTNAME" -#: plinth/modules/config/config.py:107 plinth/modules/config/config.py:153 +#: plinth/modules/config/config.py:108 plinth/modules/config/config.py:153 #: plinth/modules/config/config.py:265 -#: plinth/modules/dynamicdns/dynamicdns.py:140 +#: plinth/modules/dynamicdns/dynamicdns.py:143 msgid "Domain Name" msgstr "DOMAIN NAME" -#: plinth/modules/config/config.py:109 +#: plinth/modules/config/config.py:110 +#, python-brace-format msgid "" -"Domain name is the global name by which other machines on the Internet can " -"reach you. It must consist of labels separated by dots. Each label must " -"start and end with an alphabet or a digit and have as interior characters " -"only alphabets, digits and hyphens. Length of each label must be 63 " -"characters or less. Total length of domain name must be 253 characters or " -"less." +"Domain name is the global name by which other devices on the Internet can " +"reach your {box_name}. It must consist of labels separated by dots. Each " +"label must start and end with an alphabet or a digit and have as interior " +"characters only alphabets, digits and hyphens. Length of each label must be " +"63 characters or less. Total length of domain name must be 253 characters " +"or less." msgstr "" -"DOMAIN NAME IS THE GLOBAL NAME BY WHICH OTHER MACHINES ON THE INTERNET CAN " -"REACH YOU. IT MUST CONSIST OF LABELS SEPARATED BY DOTS. EACH LABEL MUST " -"START AND END WITH AN ALPHABET OR A DIGIT AND HAVE AS INTERIOR CHARACTERS " -"ONLY ALPHABETS, DIGITS AND HYPHENS. LENGTH OF EACH LABEL MUST BE 63 " -"CHARACTERS OR LESS. TOTAL LENGTH OF DOMAIN NAME MUST BE 253 CHARACTERS OR " -"LESS." +"DOMAIN NAME IS THE GLOBAL NAME BY WHICH OTHER DEVICES ON THE INTERNET CAN " +"REACH YOUR {box_name}. IT MUST CONSIST OF LABELS SEPARATED BY DOTS. EACH " +"LABEL MUST START AND END WITH AN ALPHABET OR A DIGIT AND HAVE AS INTERIOR " +"CHARACTERS ONLY ALPHABETS, DIGITS AND HYPHENS. LENGTH OF EACH LABEL MUST BE " +"63 CHARACTERS OR LESS. TOTAL LENGTH OF DOMAIN NAME MUST BE 253 CHARACTERS " +"OR LESS." -#: plinth/modules/config/config.py:124 +#: plinth/modules/config/config.py:125 msgid "Language" msgstr "LANGUAGE" -#: plinth/modules/config/config.py:126 -msgid "Language for this FreedomBox web administration interface" -msgstr "LANGUAGE FOR THIS FREEDOMBOX WEB ADMINISTRATION INTERFACE" +#: plinth/modules/config/config.py:127 +msgid "Language for this web administration interface" +msgstr "LANGUAGE FOR THIS WEB ADMINISTRATION INTERFACE" #: plinth/modules/config/config.py:135 -#: plinth/modules/dynamicdns/dynamicdns.py:36 +#: plinth/modules/dynamicdns/dynamicdns.py:37 #: plinth/modules/ikiwiki/views.py:36 msgid "Configure" msgstr "CONFIGURE" @@ -445,16 +452,16 @@ msgstr "TEST" msgid "Result" msgstr "RESULT" -#: plinth/modules/dynamicdns/dynamicdns.py:34 plinth/modules/help/help.py:40 +#: plinth/modules/dynamicdns/dynamicdns.py:35 plinth/modules/help/help.py:40 msgid "About" msgstr "ABOUT" -#: plinth/modules/dynamicdns/dynamicdns.py:44 -#: plinth/modules/dynamicdns/dynamicdns.py:53 +#: plinth/modules/dynamicdns/dynamicdns.py:45 +#: plinth/modules/dynamicdns/dynamicdns.py:54 msgid "Dynamic DNS" msgstr "DYNAMIC DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:70 +#: plinth/modules/dynamicdns/dynamicdns.py:71 msgid "" "The Variables <User>, <Pass>, <Ip>, <Domain> may be " "used within the URL. For details see the update URL templates of the example " @@ -464,7 +471,7 @@ msgstr "" "USED WITHIN THE URL. FOR DETAILS SEE THE UPDATE URL TEMPLATES OF THE EXAMPLE " "PROVIDERS." -#: plinth/modules/dynamicdns/dynamicdns.py:74 +#: plinth/modules/dynamicdns/dynamicdns.py:75 msgid "" "Please choose an update protocol according to your provider. If your " "provider does not support the GnudIP protocol or your provider is not listed " @@ -474,23 +481,24 @@ msgstr "" "PROVIDER DOES NOT SUPPORT THE GNUDIP PROTOCOL OR YOUR PROVIDER IS NOT LISTED " "YOU MAY USE THE UPDATE URL OF YOUR PROVIDER." -#: plinth/modules/dynamicdns/dynamicdns.py:79 +#: plinth/modules/dynamicdns/dynamicdns.py:80 msgid "" "Please do not enter a URL here (like \"https://example.com/\") but only the " -"hostname of the GnuDIP server (like \"example.pcom\")." +"hostname of the GnuDIP server (like \"example.com\")." msgstr "" "PLEASE DO NOT ENTER A URL HERE (LIKE \"HTTPS://EXAMPLE.COM/\") BUT ONLY THE " -"HOSTNAME OF THE GNUDIP SERVER (LIKE \"EXAMPLE.PCOM\")." +"HOSTNAME OF THE GNUDIP SERVER (LIKE \"EXAMPLE.COM\")." -#: plinth/modules/dynamicdns/dynamicdns.py:83 -msgid "The public domain name you want use to reach your box." -msgstr "THE PUBLIC DOMAIN NAME YOU WANT USE TO REACH YOUR BOX." +#: plinth/modules/dynamicdns/dynamicdns.py:84 +#, python-brace-format +msgid "The public domain name you want use to reach your {box_name}." +msgstr "THE PUBLIC DOMAIN NAME YOU WANT USE TO REACH YOUR {box_name}." -#: plinth/modules/dynamicdns/dynamicdns.py:85 +#: plinth/modules/dynamicdns/dynamicdns.py:87 msgid "Use this option if your provider uses self signed certificates." msgstr "USE THIS OPTION IF YOUR PROVIDER USES SELF SIGNED CERTIFICATES." -#: plinth/modules/dynamicdns/dynamicdns.py:88 +#: plinth/modules/dynamicdns/dynamicdns.py:90 msgid "" "If this option is selected, your username and password will be used for HTTP " "basic authentication." @@ -498,25 +506,26 @@ msgstr "" "IF THIS OPTION IS SELECTED, YOUR USERNAME AND PASSWORD WILL BE USED FOR HTTP " "BASIC AUTHENTICATION." -#: plinth/modules/dynamicdns/dynamicdns.py:91 +#: plinth/modules/dynamicdns/dynamicdns.py:93 msgid "" "Leave this field empty if you want to keep your previous configured password." msgstr "" "LEAVE THIS FIELD EMPTY IF YOU WANT TO KEEP YOUR PREVIOUS CONFIGURED PASSWORD." -#: plinth/modules/dynamicdns/dynamicdns.py:94 +#: plinth/modules/dynamicdns/dynamicdns.py:96 +#, python-brace-format msgid "" -"Optional Value. If your FreedomBox is not connected directly to the Internet " +"Optional Value. If your {box_name} is not connected directly to the Internet " "(i.e. connected to a NAT router) this URL is used to figure out the real " -"Internet IP. The URL should simply return the IP wherethe client comes from. " -"Example: http://myip.datasystems24.de" +"Internet IP. The URL should simply return the IP where the client comes from " +"(example: http://myip.datasystems24.de)." msgstr "" -"OPTIONAL VALUE. IF YOUR FREEDOMBOX IS NOT CONNECTED DIRECTLY TO THE INTERNET " +"OPTIONAL VALUE. IF YOUR {box_name} IS NOT CONNECTED DIRECTLY TO THE INTERNET " "(I.E. CONNECTED TO A NAT ROUTER) THIS URL IS USED TO FIGURE OUT THE REAL " -"INTERNET IP. THE URL SHOULD SIMPLY RETURN THE IP WHERETHE CLIENT COMES FROM. " -"EXAMPLE: HTTP://MYIP.DATASYSTEMS24.DE" +"INTERNET IP. THE URL SHOULD SIMPLY RETURN THE IP WHERE THE CLIENT COMES FROM " +"(EXAMPLE: HTTP://MYIP.DATASYSTEMS24.DE)." -#: plinth/modules/dynamicdns/dynamicdns.py:101 +#: plinth/modules/dynamicdns/dynamicdns.py:104 msgid "" "You should have been requested to select a username when you created the " "account." @@ -524,89 +533,91 @@ msgstr "" "YOU SHOULD HAVE BEEN REQUESTED TO SELECT A USERNAME WHEN YOU CREATED THE " "ACCOUNT." -#: plinth/modules/dynamicdns/dynamicdns.py:112 +#: plinth/modules/dynamicdns/dynamicdns.py:115 msgid "Enable Dynamic DNS" msgstr "ENABLE DYNAMIC DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:115 +#: plinth/modules/dynamicdns/dynamicdns.py:118 msgid "Service type" msgstr "SERVICE TYPE" -#: plinth/modules/dynamicdns/dynamicdns.py:120 +#: plinth/modules/dynamicdns/dynamicdns.py:123 msgid "GnudIP Server Address" msgstr "GNUDIP SERVER ADDRESS" -#: plinth/modules/dynamicdns/dynamicdns.py:125 +#: plinth/modules/dynamicdns/dynamicdns.py:128 msgid "Invalid server name" msgstr "INVALID SERVER NAME" -#: plinth/modules/dynamicdns/dynamicdns.py:128 +#: plinth/modules/dynamicdns/dynamicdns.py:131 msgid "Update URL" msgstr "UPDATE URL" -#: plinth/modules/dynamicdns/dynamicdns.py:132 -msgid "accept all SSL certificates" +#: plinth/modules/dynamicdns/dynamicdns.py:135 +msgid "Accept all SSL certificates" msgstr "ACCEPT ALL SSL CERTIFICATES" -#: plinth/modules/dynamicdns/dynamicdns.py:136 -msgid "use HTTP basic authentication" +#: plinth/modules/dynamicdns/dynamicdns.py:139 +msgid "Use HTTP basic authentication" msgstr "USE HTTP BASIC AUTHENTICATION" -#: plinth/modules/dynamicdns/dynamicdns.py:148 -#: plinth/modules/networks/forms.py:118 plinth/modules/transmission/forms.py:39 +#: plinth/modules/dynamicdns/dynamicdns.py:151 +#: plinth/modules/networks/forms.py:146 plinth/modules/transmission/forms.py:39 msgid "Username" msgstr "USERNAME" -#: plinth/modules/dynamicdns/dynamicdns.py:151 -#: plinth/modules/networks/forms.py:119 plinth/modules/transmission/forms.py:43 +#: plinth/modules/dynamicdns/dynamicdns.py:154 +#: plinth/modules/networks/forms.py:147 plinth/modules/transmission/forms.py:43 msgid "Password" msgstr "PASSWORD" -#: plinth/modules/dynamicdns/dynamicdns.py:154 -msgid "show password" +#: plinth/modules/dynamicdns/dynamicdns.py:157 +#: plinth/modules/networks/forms.py:149 +msgid "Show password" msgstr "SHOW PASSWORD" -#: plinth/modules/dynamicdns/dynamicdns.py:158 +#: plinth/modules/dynamicdns/dynamicdns.py:161 msgid "IP check URL" msgstr "IP CHECK URL" -#: plinth/modules/dynamicdns/dynamicdns.py:184 +#: plinth/modules/dynamicdns/dynamicdns.py:187 msgid "Please provide update URL or a GnuDIP Server" msgstr "PLEASE PROVIDE UPDATE URL OR A GNUDIP SERVER" -#: plinth/modules/dynamicdns/dynamicdns.py:187 +#: plinth/modules/dynamicdns/dynamicdns.py:190 msgid "Please provide GnuDIP username" msgstr "PLEASE PROVIDE GNUDIP USERNAME" -#: plinth/modules/dynamicdns/dynamicdns.py:190 +#: plinth/modules/dynamicdns/dynamicdns.py:193 msgid "Please provide GnuDIP domain" msgstr "PLEASE PROVIDE GNUDIP DOMAIN" -#: plinth/modules/dynamicdns/dynamicdns.py:195 +#: plinth/modules/dynamicdns/dynamicdns.py:198 msgid "Please provide a password" msgstr "PLEASE PROVIDE A PASSWORD" -#: plinth/modules/dynamicdns/dynamicdns.py:214 +#: plinth/modules/dynamicdns/dynamicdns.py:217 msgid "Configure Dynamic DNS" msgstr "CONFIGURE DYNAMIC DNS" -#: plinth/modules/dynamicdns/dynamicdns.py:236 +#: plinth/modules/dynamicdns/dynamicdns.py:239 msgid "Status of Dynamic DNS" msgstr "STATUS OF DYNAMIC DNS" #: plinth/modules/dynamicdns/templates/dynamicdns.html:25 -msgid "DynamicDNS client" -msgstr "DYNAMICDNS CLIENT" +msgid "Dynamic DNS Client" +msgstr "DYNAMIC DNS CLIENT" #: plinth/modules/dynamicdns/templates/dynamicdns.html:28 +#, python-format msgid "" "If your internet provider changes your IP address periodic (i.e. every 24h) " "it may be hard for others to find you in the WEB. And for this reason nobody " -"may find the services which are provided by FreedomBox (like your ownCloud)." +"may find the services which are provided by %(box_name)s, such as ownCloud." msgstr "" "IF YOUR INTERNET PROVIDER CHANGES YOUR IP ADDRESS PERIODIC (I.E. EVERY 24H) " "IT MAY BE HARD FOR OTHERS TO FIND YOU IN THE WEB. AND FOR THIS REASON NOBODY " -"MAY FIND THE SERVICES WHICH ARE PROVIDED BY FREEDOMBOX (LIKE YOUR OWNCLOUD)." +"MAY FIND THE SERVICES WHICH ARE PROVIDED BY %(box_name)s, SUCH AS OWNCLOUD." #: plinth/modules/dynamicdns/templates/dynamicdns.html:37 msgid "" @@ -615,7 +626,7 @@ msgid "" "allows you to push your current public IP address to an gnudip server. Afterwards " "the Server will assign your DNS name with the new IP and if someone from the " -"internet asks for your DNS name he will get your current IP answered." +"Internet asks for your DNS name he will get your current IP answered." msgstr "" "THE SOLUTION IS TO ASSIGN A DNS NAME TO YOUR IP ADDRESS AND UPDATE THE DNS " "NAME EVERY TIME YOUR IP IS CHANGED BY YOUR INTERNET PROVIDER. DYNAMIC DNS " @@ -639,14 +650,14 @@ msgstr "" "FREEDNS.AFRAID.ORG." #: plinth/modules/dynamicdns/templates/dynamicdns.html:61 +#, python-format msgid "" -"If your freedombox is connected behind some NAT router, don't forget to add " -"portforwarding (i.e. forward some standard ports like 80 and 443) to your " -"freedombox device." +"If your %(box_name)s is connected behind some NAT router, don't forget to " +"add port forwarding (i.e. forward some standard ports like 80 and 443)." msgstr "" -"IF YOUR FREEDOMBOX IS CONNECTED BEHIND SOME NAT ROUTER, DON'T FORGET TO ADD " -"PORTFORWARDING (I.E. FORWARD SOME STANDARD PORTS LIKE 80 AND 443) TO YOUR " -"FREEDOMBOX DEVICE." +"IF YOUR %(box_name)s IS CONNECTED BEHIND SOME NAT ROUTER, DON'T FORGET TO " +"ADD PORT FORWARDING (I.E. FORWARD SOME STANDARD PORTS LIKE 80 AND 443) TO " +"YOUR %(box_name)s DEVICE." #: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:30 msgid "" @@ -669,21 +680,21 @@ msgstr "" "NOT DETECT A NAT TYPE." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:35 -msgid "Direct connection to the internet." +msgid "Direct connection to the Internet." msgstr "DIRECT CONNECTION TO THE INTERNET." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:37 #, python-format msgid "" -"Behind NAT, this means that dynamic DNS service will poll the \"IP check URL" -"\" for changes (we need the \"IP check URL\" for this reason - otherwise we " -"will not detect IP changes). It may take up to %(timer)s minutes until we " -"update your DNS entry in case of WAN IP change." +"Behind NAT. This means that Dynamic DNS service will poll the \"IP check URL" +"\" for changes (the \"IP check URL\" entry is needed for this - otherwise IP " +"changes will not be detected). In case the WAN IP changes, it may take up " +"to %(timer)s minutes until your DNS entry is updated." msgstr "" -"BEHIND NAT, THIS MEANS THAT DYNAMIC DNS SERVICE WILL POLL THE \"IP CHECK URL" -"\" FOR CHANGES (WE NEED THE \"IP CHECK URL\" FOR THIS REASON - OTHERWISE WE " -"WILL NOT DETECT IP CHANGES). IT MAY TAKE UP TO %(timer)s MINUTES UNTIL WE " -"UPDATE YOUR DNS ENTRY IN CASE OF WAN IP CHANGE." +"BEHIND NAT. THIS MEANS THAT DYNAMIC DNS SERVICE WILL POLL THE \"IP CHECK URL" +"\" FOR CHANGES (THE \"IP CHECK URL\" ENTRY IS NEEDED FOR THIS - OTHERWISE IP " +"CHANGES WILL NOT BE DETECTED). IN CASE THE WAN IP CHANGES, IT MAY TAKE UP " +"TO %(timer)s MINUTES UNTIL YOUR DNS ENTRY IS UPDATED." #: plinth/modules/dynamicdns/templates/dynamicdns_status.html:48 msgid "Last update" @@ -698,17 +709,17 @@ msgstr "FIREWALL" #: plinth/modules/firewall/templates/firewall.html:28 #, python-format msgid "" -"Firewall is a network security system that controls the incoming and " -"outgoing network traffic on your %(box_name)s. Keeping a firewall enabled " -"and properly configured reduces risk of security threat from the Internet." +"Firewall is a security system that controls the incoming and outgoing " +"network traffic on your %(box_name)s. Keeping a firewall enabled and " +"properly configured reduces risk of security threat from the Internet." msgstr "" -"FIREWALL IS A NETWORK SECURITY SYSTEM THAT CONTROLS THE INCOMING AND " -"OUTGOING NETWORK TRAFFIC ON YOUR %(box_name)s. KEEPING A FIREWALL ENABLED " -"AND PROPERLY CONFIGURED REDUCES RISK OF SECURITY THREAT FROM THE INTERNET." +"FIREWALL IS A SECURITY SYSTEM THAT CONTROLS THE INCOMING AND OUTGOING " +"NETWORK TRAFFIC ON YOUR %(box_name)s. KEEPING A FIREWALL ENABLED AND " +"PROPERLY CONFIGURED REDUCES RISK OF SECURITY THREAT FROM THE INTERNET." #: plinth/modules/firewall/templates/firewall.html:36 -msgid "The following is the current status:" -msgstr "THE FOLLOWING IS THE CURRENT STATUS:" +msgid "Current status:" +msgstr "CURRENT STATUS:" #: plinth/modules/firewall/templates/firewall.html:41 #, python-format @@ -728,11 +739,13 @@ msgid "Service/Port" msgstr "SERVICE/PORT" #: plinth/modules/firewall/templates/firewall.html:67 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:91 #: plinth/modules/names/templates/names.html:51 msgid "Enabled" msgstr "ENABLED" #: plinth/modules/firewall/templates/firewall.html:70 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:93 #: plinth/modules/names/templates/names.html:53 msgid "Disabled" msgstr "DISABLED" @@ -756,12 +769,12 @@ msgstr "BLOCKED" #: plinth/modules/firewall/templates/firewall.html:103 msgid "" "The operation of the firewall is automatic. When you enable a service it is " -"automatically permitted in the firewall and you disable a service is " -"automatically disabled in the firewall." +"also permitted in the firewall and when you disable a service it is also " +"disabled in the firewall." msgstr "" "THE OPERATION OF THE FIREWALL IS AUTOMATIC. WHEN YOU ENABLE A SERVICE IT IS " -"AUTOMATICALLY PERMITTED IN THE FIREWALL AND YOU DISABLE A SERVICE IS " -"AUTOMATICALLY DISABLED IN THE FIREWALL." +"ALSO PERMITTED IN THE FIREWALL AND WHEN YOU DISABLE A SERVICE IT IS ALSO " +"DISABLED IN THE FIREWALL." #: plinth/modules/first_boot/forms.py:48 plinth/modules/users/forms.py:70 msgid "Creating LDAP user failed." @@ -775,25 +788,30 @@ msgstr "FAILED TO ADD NEW USER TO ADMIN GROUP." msgid "User account created, you are now logged in" msgstr "USER ACCOUNT CREATED, YOU ARE NOW LOGGED IN" -#: plinth/modules/first_boot/templates/firstboot_state0.html:50 -msgid "Congratulations! Your FreedomBox is up and running!" -msgstr "CONGRATULATIONS! YOUR FREEDOMBOX IS UP AND RUNNING!" +#: plinth/modules/first_boot/templates/firstboot_navbar.html:23 +#: plinth/modules/help/templates/help_index.html:25 +#: plinth/templates/base.html:102 +msgid "Help" +msgstr "HELP" -#: plinth/modules/first_boot/templates/firstboot_state0.html:54 +#: plinth/modules/first_boot/templates/firstboot_state0.html:45 +msgid "Start Setup" +msgstr "START SETUP" + +#: plinth/modules/first_boot/templates/firstboot_state0.html:49 +#, python-format msgid "" -"Please provide the following basic information to complete the setup process." +"To complete the setup of your %(box_name)s, please provide some basic " +"information." msgstr "" -"PLEASE PROVIDE THE FOLLOWING BASIC INFORMATION TO COMPLETE THE SETUP PROCESS." +"TO COMPLETE THE SETUP OF YOUR %(box_name)s, PLEASE PROVIDE SOME BASIC " +"INFORMATION." -#: plinth/modules/first_boot/templates/firstboot_state0.html:62 -msgid "Next" -msgstr "NEXT" - -#: plinth/modules/first_boot/templates/firstboot_state1.html:39 +#: plinth/modules/first_boot/templates/firstboot_state1.html:41 msgid "Administrator Account" msgstr "ADMINISTRATOR ACCOUNT" -#: plinth/modules/first_boot/templates/firstboot_state1.html:42 +#: plinth/modules/first_boot/templates/firstboot_state1.html:44 msgid "" "Choose a username and password to access this web interface. The password " "can be changed later. This user will be granted administrative privileges. " @@ -803,7 +821,7 @@ msgstr "" "CAN BE CHANGED LATER. THIS USER WILL BE GRANTED ADMINISTRATIVE PRIVILEGES. " "OTHER USERS CAN BE ADDED LATER." -#: plinth/modules/first_boot/templates/firstboot_state1.html:55 +#: plinth/modules/first_boot/templates/firstboot_state1.html:57 msgid "Box it up!" msgstr "BOX IT UP!" @@ -812,35 +830,37 @@ msgid "Setup Complete!" msgstr "SETUP COMPLETE!" #: plinth/modules/first_boot/templates/firstboot_state10.html:32 +#, python-format msgid "" -"FreedomBox setup is now complete. However, you should check the network " -"setup and modify it if necessary. Do not forget to change the default Wi-Fi " -"passwords." +"%(box_name)s setup is now complete. To make your %(box_name)s functional, " +"you need some applications. They will be installed the first time you " +"access them." msgstr "" -"FREEDOMBOX SETUP IS NOW COMPLETE. HOWEVER, YOU SHOULD CHECK THE NETWORK " -"SETUP AND MODIFY IT IF NECESSARY. DO NOT FORGET TO CHANGE THE DEFAULT WI-FI " -"PASSWORDS." +"%(box_name)s SETUP IS NOW COMPLETE. TO MAKE YOUR %(box_name)s FUNCTIONAL, \n" +"YOU NEED SOME APPLICATIONS. THEY WILL BE INSTALLED THE FIRST TIME \n" +"YOU ACCESS THEM." -#: plinth/modules/first_boot/templates/firstboot_state10.html:40 -msgid "" -"To make your FreedomBox functional, you need some applications. " -"Applications will be installed the first time you access them." -msgstr "" -"TO MAKE YOUR FREEDOMBOX FUNCTIONAL, YOU NEED SOME APPLICATIONS. APPLICATIONS " -"WILL BE INSTALLED THE FIRST TIME YOU ACCESS THEM." - -#: plinth/modules/first_boot/templates/firstboot_state10.html:47 -msgid "Network Configuration" -msgstr "NETWORK CONFIGURATION" - -#: plinth/modules/first_boot/templates/firstboot_state10.html:54 -msgid "Go to Networks" -msgstr "GO TO NETWORKS" - -#: plinth/modules/first_boot/templates/firstboot_state10.html:59 +#: plinth/modules/first_boot/templates/firstboot_state10.html:41 msgid "Go to Apps" msgstr "GO TO APPS" +#: plinth/modules/first_boot/templates/firstboot_state10.html:44 +msgid "Current Network Configuration" +msgstr "CURRENT NETWORK CONFIGURATION" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:47 +msgid "" +"You should check the network setup and modify it if necessary. Do not forget " +"to change the default Wi-Fi passwords!" +msgstr "" +"YOU SHOULD CHECK THE NETWORK SETUP AND MODIFY IT IF NECESSARY. DO NOT " +"FORGET \n" +"TO CHANGE THE DEFAULT WI-FI PASSWORDS!" + +#: plinth/modules/first_boot/templates/firstboot_state10.html:57 +msgid "Go to Networks" +msgstr "GO TO NETWORKS" + #: plinth/modules/first_boot/views.py:60 msgid "Setup Complete" msgstr "SETUP COMPLETE" @@ -853,9 +873,9 @@ msgstr "DOCUMENTATION" msgid "Where to Get Help" msgstr "WHERE TO GET HELP" -#: plinth/modules/help/help.py:38 plinth/modules/help/help.py:72 -msgid "FreedomBox Manual" -msgstr "FREEDOMBOX MANUAL" +#: plinth/modules/help/help.py:38 +msgid "Manual" +msgstr "MANUAL" #: plinth/modules/help/help.py:48 msgid "Documentation and FAQ" @@ -866,23 +886,29 @@ msgstr "DOCUMENTATION AND FAQ" msgid "About {box_name}" msgstr "ABOUT {box_name}" +#: plinth/modules/help/help.py:73 +#, python-brace-format +msgid "{box_name} Manual" +msgstr "{box_name} MANUAL" + #: plinth/modules/help/templates/help_about.html:30 +#, python-format msgid "" -"FreedomBox is a community project to develop, design and promote personal " +"%(box_name)s is a community project to develop, design and promote personal " "servers running free software for private, personal communications. It is a " "networking appliance designed to allow interfacing with the rest of the " "Internet under conditions of protected privacy and data security. It hosts " "applications such as blog, wiki, website, social network, email, web proxy " -"and a Tor relay on a device that can replace your Wi-Fi router so that your " -"data stays with you." +"and a Tor relay, on a device that can replace your Wi-Fi router, so that " +"your data stays with you." msgstr "" -"FREEDOMBOX IS A COMMUNITY PROJECT TO DEVELOP, DESIGN AND PROMOTE PERSONAL " +"%(box_name)s IS A COMMUNITY PROJECT TO DEVELOP, DESIGN AND PROMOTE PERSONAL " "SERVERS RUNNING FREE SOFTWARE FOR PRIVATE, PERSONAL COMMUNICATIONS. IT IS A " "NETWORKING APPLIANCE DESIGNED TO ALLOW INTERFACING WITH THE REST OF THE " "INTERNET UNDER CONDITIONS OF PROTECTED PRIVACY AND DATA SECURITY. IT HOSTS " "APPLICATIONS SUCH AS BLOG, WIKI, WEBSITE, SOCIAL NETWORK, EMAIL, WEB PROXY " -"AND A TOR RELAY ON A DEVICE THAT CAN REPLACE YOUR WI-FI ROUTER SO THAT YOUR " -"DATA STAYS WITH YOU." +"AND A TOR RELAY, ON A DEVICE THAT CAN REPLACE YOUR WI-FI ROUTER, SO THAT " +"YOUR DATA STAYS WITH YOU." #: plinth/modules/help/templates/help_about.html:43 msgid "" @@ -901,82 +927,93 @@ msgstr "" "RETURNING THE INTERNET TO ITS INTENDED PEER-TO-PEER ARCHITECTURE." #: plinth/modules/help/templates/help_about.html:56 +#, python-format msgid "" "There are a number of projects working to realize a future of distributed " -"services; FreedomBox aims to bring them all together in a convenient package." +"services; %(box_name)s aims to bring them all together in a convenient " +"package." msgstr "" "THERE ARE A NUMBER OF PROJECTS WORKING TO REALIZE A FUTURE OF DISTRIBUTED " -"SERVICES; FREEDOMBOX AIMS TO BRING THEM ALL TOGETHER IN A CONVENIENT PACKAGE." +"SERVICES; %(box_name)s AIMS TO BRING THEM ALL TOGETHER IN A CONVENIENT " +"PACKAGE." #: plinth/modules/help/templates/help_about.html:64 +#, python-format msgid "" -"For more information about the FreedomBox project, see the FreedomBox Wiki." +"For more information about the %(box_name)s project, see the %(box_name)s Wiki." msgstr "" -"FOR MORE INFORMATION ABOUT THE FREEDOMBOX PROJECT, SEE THE FREEDOMBOX WIKI." +"FOR MORE INFORMATION ABOUT THE %(box_name)s PROJECT, SEE THE %(box_name)s WIKI." -#: plinth/modules/help/templates/help_about.html:72 +#: plinth/modules/help/templates/help_about.html:73 msgid "Learn more »" msgstr "LEARN MORE »" -#: plinth/modules/help/templates/help_about.html:75 +#: plinth/modules/help/templates/help_about.html:76 #, python-format msgid "You are running Plinth version %(version)s." msgstr "YOU ARE RUNNING PLINTH VERSION %(version)s." -#: plinth/modules/help/templates/help_index.html:25 -#: plinth/templates/base.html:98 -msgid "Help" -msgstr "HELP" +#: plinth/modules/help/templates/help_base.html:36 +#, python-format +msgid "%(box_name)s Setup" +msgstr "%(box_name)s SETUP" #: plinth/modules/help/templates/help_index.html:29 #, python-format msgid "" -"The FreedomBox Manual is the best place to " +"The %(box_name)s Manual is the best place to " "start for information regarding %(box_name)s." msgstr "" -"THE FREEDOMBOX MANUAL IS THE BEST PLACE TO " +"THE %(box_name)s MANUAL IS THE BEST PLACE TO " "START FOR INFORMATION REGARDING %(box_name)s." #: plinth/modules/help/templates/help_index.html:36 +#, python-format msgid "" -" FreedomBox " -"project wiki contains further information." +" " +"%(box_name)s project wiki contains further information." msgstr "" -" FREEDOMBOX " -"PROJECT WIKI CONTAINS FURTHER INFORMATION." +" " +"%(box_name)s PROJECT WIKI CONTAINS FURTHER INFORMATION." #: plinth/modules/help/templates/help_index.html:43 +#, python-format msgid "" -"To seek help from FreedomBox community, queries may be posted on the " -"mailing list. The list archives also contain information about problems " -"faced by other users and possible solutions." +"To seek help from %(box_name)s community, queries may be posted on the mailing list. The list archives also contain information about " +"problems faced by other users and possible solutions." msgstr "" -"TO SEEK HELP FROM FREEDOMBOX COMMUNITY, QUERIES MAY BE POSTED ON THE " -"MAILING LIST. THE LIST ARCHIVES ALSO CONTAIN INFORMATION ABOUT PROBLEMS " -"FACED BY OTHER USERS AND POSSIBLE SOLUTIONS." +"TO SEEK HELP FROM %(box_name)s COMMUNITY, QUERIES MAY BE POSTED ON THE MAILING LIST. THE LIST ARCHIVES ALSO CONTAIN INFORMATION ABOUT " +"PROBLEMS FACED BY OTHER USERS AND POSSIBLE SOLUTIONS." #: plinth/modules/help/templates/help_index.html:53 +#, python-format msgid "" -"Many FreedomBox contributors and users are also available on the #freedombox " -"channel of the irc.oftc.net IRC network." +"Many %(box_name)s contributors and users are also available on the irc.oftc." +"net IRC network. Join and request help on the #freedombox " +"channel using the IRC web interface." msgstr "" -"MANY FREEDOMBOX CONTRIBUTORS AND USERS ARE ALSO AVAILABLE ON THE #FREEDOMBOX " -"CHANNEL OF THE IRC.OFTC.NET IRC NETWORK." +"MANY %(box_name)s CONTRIBUTORS AND USERS ARE ALSO AVAILABLE ON THE IRC.OFTC." +"NET IRC NETWORK. JOIN AND REQUEST HELP ON THE #FREEDOMBOX " +"CHANNEL USING THE IRC WEB INTERFACE." #: plinth/modules/ikiwiki/__init__.py:38 -msgid "Wiki & Blog (Ikiwiki)" -msgstr "WIKI & BLOG (IKIWIKI)" +msgid "Wiki and Blog (ikiwiki)" +msgstr "WIKI AND BLOG (IKIWIKI)" #: plinth/modules/ikiwiki/__init__.py:43 -msgid "Ikiwiki wikis and blogs" +msgid "ikiwiki wikis and blogs" msgstr "IKIWIKI WIKIS AND BLOGS" #: plinth/modules/ikiwiki/forms.py:29 -msgid "Enable Ikiwiki" +msgid "Enable ikiwiki" msgstr "ENABLE IKIWIKI" #: plinth/modules/ikiwiki/forms.py:36 @@ -1007,23 +1044,24 @@ msgstr "" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:27 #, python-format -msgid "Delete Wiki/Blog %(name)s" -msgstr "DELETE WIKI/BLOG %(name)s" +msgid "Delete Wiki or Blog %(name)s" +msgstr "DELETE WIKI OR BLOG %(name)s" #: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:33 msgid "" "This action will remove all the posts, pages and comments including revision " -"history. Delete this wiki/blog permanently?" +"history. Delete this wiki or blog permanently?" msgstr "" "THIS ACTION WILL REMOVE ALL THE POSTS, PAGES AND COMMENTS INCLUDING REVISION " -"HISTORY. DELETE THIS WIKI/BLOG PERMANENTLY?" +"HISTORY. DELETE THIS WIKI OR BLOG PERMANENTLY?" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:43 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:44 #, python-format msgid "Delete %(name)s" msgstr "DELETE %(name)s" -#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:46 +#: plinth/modules/ikiwiki/templates/ikiwiki_delete.html:47 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:60 #: plinth/modules/networks/templates/connections_delete.html:41 #: plinth/modules/users/templates/users_delete.html:41 msgid "Cancel" @@ -1056,16 +1094,16 @@ msgid "Create" msgstr "CREATE" #: plinth/modules/ikiwiki/views.py:73 -msgid "Wiki & Blog" -msgstr "WIKI & BLOG" +msgid "Wiki and Blog" +msgstr "WIKI AND BLOG" #: plinth/modules/ikiwiki/views.py:106 msgid "Manage Wikis and Blogs" msgstr "MANAGE WIKIS AND BLOGS" #: plinth/modules/ikiwiki/views.py:132 -msgid "Create Wiki/Blog" -msgstr "CREATE WIKI/BLOG" +msgid "Create Wiki or Blog" +msgstr "CREATE WIKI OR BLOG" #: plinth/modules/ikiwiki/views.py:145 #, python-brace-format @@ -1098,8 +1136,162 @@ msgid "Could not delete {name}: {error}" msgstr "COULD NOT DELETE {name}: {error}" #: plinth/modules/ikiwiki/views.py:182 -msgid "Delete Wiki/Blog" -msgstr "DELETE WIKI/BLOG" +msgid "Delete Wiki or Blog" +msgstr "DELETE WIKI OR BLOG" + +#: plinth/modules/letsencrypt/__init__.py:43 +#: plinth/modules/letsencrypt/templates/letsencrypt.html:38 +#: plinth/modules/letsencrypt/views.py:45 +msgid "Certificates (Let's Encrypt)" +msgstr "CERTIFICATES (LET'S ENCRYPT)" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:41 +#, python-format +msgid "" +"A digital certficate allows users of a web service to verify the identity of " +"the service and to securely communicate with it. %(box_name)s can " +"automatically obtain and setup digital certificates for each available " +"domain. It does so by proving itself to be the owner of a domain to Let's " +"Encrypt, a certficate authority (CA)." +msgstr "" +"A DIGITAL CERTFICATE ALLOWS USERS OF A WEB SERVICE TO VERIFY THE IDENTITY OF " +"THE SERVICE AND TO SECURELY COMMUNICATE WITH IT. %(box_name)s CAN " +"AUTOMATICALLY OBTAIN AND SETUP DIGITAL CERTIFICATES FOR EACH AVAILABLE " +"DOMAIN. IT DOES SO BY PROVING ITSELF TO BE THE OWNER OF A DOMAIN TO LET'S " +"ENCRYPT, A CERTFICATE AUTHORITY (CA)." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:52 +msgid "" +"Let's Encrypt is a free, automated, and open certificate authority, run for " +"the public’s benefit by the Internet Security Research Group (ISRG). Please " +"read and agree with the Let's Encrypt Subscriber Agreement before using this service." +msgstr "" +"LET'S ENCRYPT IS A FREE, AUTOMATED, AND OPEN CERTIFICATE AUTHORITY, RUN FOR " +"THE PUBLIC’S BENEFIT BY THE INTERNET SECURITY RESEARCH GROUP (ISRG). PLEASE " +"READ AND AGREE WITH THE LET'S ENCRYPT SUBSCRIBER AGREEMENT BEFORE USING THIS SERVICE." + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:66 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:70 +msgid "Domain" +msgstr "DOMAIN" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:67 +msgid "Certificate Status" +msgstr "CERTIFICATE STATUS" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:68 +msgid "Website Security" +msgstr "WEBSITE SECURITY" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:69 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:72 +msgid "Actions" +msgstr "ACTIONS" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:79 +#, python-format +msgid "Expires on %(expiry_date)s" +msgstr "EXPIRES ON %(expiry_date)s" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:85 +msgid "No certficate" +msgstr "NO CERTFICATE" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:102 +msgid "Revoke" +msgstr "REVOKE" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:108 +msgid "Re-obtain" +msgstr "RE-OBTAIN" + +#: plinth/modules/letsencrypt/templates/letsencrypt.html:115 +msgid "Obtain" +msgstr "OBTAIN" + +#: plinth/modules/letsencrypt/views.py:55 +#, python-brace-format +msgid "Certificate successfully revoked for domain {domain}" +msgstr "CERTIFICATE SUCCESSFULLY REVOKED FOR DOMAIN {domain}" + +#: plinth/modules/letsencrypt/views.py:60 +#, python-brace-format +msgid "Failed to revoke certificate for domain {domain}: {error}" +msgstr "FAILED TO REVOKE CERTIFICATE FOR DOMAIN {domain}: {error}" + +#: plinth/modules/letsencrypt/views.py:72 +#, python-brace-format +msgid "Certificate successfully obtained for domain {domain}" +msgstr "CERTIFICATE SUCCESSFULLY OBTAINED FOR DOMAIN {domain}" + +#: plinth/modules/letsencrypt/views.py:77 +#, python-brace-format +msgid "Failed to obtain certificate for domain {domain}: {error}" +msgstr "FAILED TO OBTAIN CERTIFICATE FOR DOMAIN {domain}: {error}" + +#: plinth/modules/monkeysphere/__init__.py:32 +#: plinth/modules/monkeysphere/templates/monkeysphere.html:35 +#: plinth/modules/monkeysphere/views.py:44 +msgid "Monkeysphere" +msgstr "MONKEYSPHERE" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:38 +msgid "" +"With Monkeysphere, a PGP key can be generated for each configured domain " +"serving SSH. The PGP public key can then be uploaded to the PGP keyservers. " +"Users connecting to this machine through SSH can verify that they are " +"connecting to the correct host. For users to trust the key, at least one " +"person (usually the machine owner) must sign the key using the regular PGP " +"key signing process. See the Monkeysphere SSH documentation for more details." +msgstr "" +"WITH MONKEYSPHERE, A PGP KEY CAN BE GENERATED FOR EACH CONFIGURED DOMAIN " +"SERVING SSH. THE PGP PUBLIC KEY CAN THEN BE UPLOADED TO THE PGP KEYSERVERS. " +"USERS CONNECTING TO THIS MACHINE THROUGH SSH CAN VERIFY THAT THEY ARE " +"CONNECTING TO THE CORRECT HOST. FOR USERS TO TRUST THE KEY, AT LEAST ONE " +"PERSON (USUALLY THE MACHINE OWNER) MUST SIGN THE KEY USING THE REGULAR PGP " +"KEY SIGNING PROCESS. SEE THE MONKEYSPHERE SSH DOCUMENTATION FOR MORE " +"DETAILS." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:53 +msgid "Publishing key to keyserver..." +msgstr "PUBLISHING KEY TO KEYSERVER..." + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:71 +msgid "GPG Fingerprint" +msgstr "GPG FINGERPRINT" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:83 +#: plinth/modules/names/views.py:45 +msgid "Not Available" +msgstr "NOT AVAILABLE" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:93 +msgid "Generate PGP Key" +msgstr "GENERATE PGP KEY" + +#: plinth/modules/monkeysphere/templates/monkeysphere.html:101 +msgid "Publish Key" +msgstr "PUBLISH KEY" + +#: plinth/modules/monkeysphere/views.py:58 +msgid "Generated PGP key." +msgstr "GENERATED PGP KEY." + +#: plinth/modules/monkeysphere/views.py:83 +msgid "Cancelled key publishing." +msgstr "CANCELLED KEY PUBLISHING." + +#: plinth/modules/monkeysphere/views.py:120 +msgid "Published key to keyserver." +msgstr "PUBLISHED KEY TO KEYSERVER." + +#: plinth/modules/monkeysphere/views.py:122 +msgid "Error occurred while publishing key." +msgstr "ERROR OCCURRED WHILE PUBLISHING KEY." #: plinth/modules/mumble/__init__.py:38 #: plinth/modules/mumble/templates/mumble.html:26 @@ -1141,61 +1333,48 @@ msgstr "MUMBLE SERVER IS RUNNING" msgid "Mumble server is not running" msgstr "MUMBLE SERVER IS NOT RUNNING" -#: plinth/modules/names/__init__.py:30 +#: plinth/modules/names/__init__.py:29 msgid "HTTP" msgstr "HTTP" -#: plinth/modules/names/__init__.py:31 +#: plinth/modules/names/__init__.py:30 msgid "HTTPS" msgstr "HTTPS" -#: plinth/modules/names/__init__.py:32 +#: plinth/modules/names/__init__.py:31 msgid "SSH" msgstr "SSH" -#: plinth/modules/names/__init__.py:46 plinth/modules/names/views.py:34 +#: plinth/modules/names/__init__.py:45 plinth/modules/names/views.py:34 msgid "Name Services" msgstr "NAME SERVICES" -#: plinth/modules/names/__init__.py:107 -msgid "Not Available" -msgstr "NOT AVAILABLE" - #: plinth/modules/networks/__init__.py:108 #, python-brace-format msgid "Using DNSSEC on IPv{kind}" msgstr "USING DNSSEC ON IPV{kind}" #: plinth/modules/networks/forms.py:30 -msgid "-- select --" -msgstr "-- SELECT --" - -#: plinth/modules/networks/forms.py:42 msgid "Connection Type" msgstr "CONNECTION TYPE" -#: plinth/modules/networks/forms.py:49 plinth/modules/networks/forms.py:106 -#: plinth/modules/networks/forms.py:133 +#: plinth/modules/networks/forms.py:37 msgid "Connection Name" msgstr "CONNECTION NAME" -#: plinth/modules/networks/forms.py:51 plinth/modules/networks/forms.py:108 -#: plinth/modules/networks/forms.py:135 +#: plinth/modules/networks/forms.py:39 msgid "Physical Interface" msgstr "PHYSICAL INTERFACE" -#: plinth/modules/networks/forms.py:53 plinth/modules/networks/forms.py:110 -#: plinth/modules/networks/forms.py:137 +#: plinth/modules/networks/forms.py:41 msgid "The network device that this connection should be bound to." msgstr "THE NETWORK DEVICE THAT THIS CONNECTION SHOULD BE BOUND TO." -#: plinth/modules/networks/forms.py:56 plinth/modules/networks/forms.py:113 -#: plinth/modules/networks/forms.py:140 +#: plinth/modules/networks/forms.py:44 msgid "Firewall Zone" msgstr "FIREWALL ZONE" -#: plinth/modules/networks/forms.py:57 plinth/modules/networks/forms.py:114 -#: plinth/modules/networks/forms.py:141 +#: plinth/modules/networks/forms.py:45 msgid "" "The firewall zone will control which services are available over this " "interfaces. Select Internal only for trusted networks." @@ -1203,11 +1382,11 @@ msgstr "" "THE FIREWALL ZONE WILL CONTROL WHICH SERVICES ARE AVAILABLE OVER THIS " "INTERFACES. SELECT INTERNAL ONLY FOR TRUSTED NETWORKS." -#: plinth/modules/networks/forms.py:61 plinth/modules/networks/forms.py:162 +#: plinth/modules/networks/forms.py:49 msgid "IPv4 Addressing Method" msgstr "IPV4 ADDRESSING METHOD" -#: plinth/modules/networks/forms.py:62 +#: plinth/modules/networks/forms.py:50 msgid "" "\"Shared\" method will start a DHCP server and \"Automatic\" method will " "acquire configuration from a DHCP server." @@ -1215,15 +1394,15 @@ msgstr "" "\"SHARED\" METHOD WILL START A DHCP SERVER AND \"AUTOMATIC\" METHOD WILL " "ACQUIRE CONFIGURATION FROM A DHCP SERVER." -#: plinth/modules/networks/forms.py:68 plinth/modules/networks/forms.py:170 +#: plinth/modules/networks/forms.py:56 msgid "Address" msgstr "ADDRESS" -#: plinth/modules/networks/forms.py:72 plinth/modules/networks/forms.py:174 +#: plinth/modules/networks/forms.py:60 msgid "Netmask" msgstr "NETMASK" -#: plinth/modules/networks/forms.py:73 plinth/modules/networks/forms.py:175 +#: plinth/modules/networks/forms.py:61 msgid "" "Optional value. If left blank, a default netmask based on the address will " "be used." @@ -1231,21 +1410,21 @@ msgstr "" "OPTIONAL VALUE. IF LEFT BLANK, A DEFAULT NETMASK BASED ON THE ADDRESS WILL " "BE USED." -#: plinth/modules/networks/forms.py:78 plinth/modules/networks/forms.py:180 +#: plinth/modules/networks/forms.py:66 #: plinth/modules/networks/templates/connection_show.html:202 #: plinth/modules/networks/templates/connection_show.html:241 msgid "Gateway" msgstr "GATEWAY" -#: plinth/modules/networks/forms.py:79 plinth/modules/networks/forms.py:181 +#: plinth/modules/networks/forms.py:67 msgid "Optional value." msgstr "OPTIONAL VALUE." -#: plinth/modules/networks/forms.py:83 plinth/modules/networks/forms.py:185 +#: plinth/modules/networks/forms.py:71 msgid "DNS Server" msgstr "DNS SERVER" -#: plinth/modules/networks/forms.py:84 plinth/modules/networks/forms.py:186 +#: plinth/modules/networks/forms.py:72 msgid "" "Optional value. If this value is given and IPv4 addressing method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1253,11 +1432,11 @@ msgstr "" "OPTIONAL VALUE. IF THIS VALUE IS GIVEN AND IPV4 ADDRESSING METHOD IS " "\"AUTOMATIC\", THE DNS SERVERS PROVIDED BY A DHCP SERVER WILL BE IGNORED." -#: plinth/modules/networks/forms.py:90 plinth/modules/networks/forms.py:192 +#: plinth/modules/networks/forms.py:78 msgid "Second DNS Server" msgstr "SECOND DNS SERVER" -#: plinth/modules/networks/forms.py:91 plinth/modules/networks/forms.py:193 +#: plinth/modules/networks/forms.py:79 msgid "" "Optional value. If this value is given and IPv4 Addressing Method is " "\"Automatic\", the DNS Servers provided by a DHCP server will be ignored." @@ -1265,29 +1444,29 @@ msgstr "" "OPTIONAL VALUE. IF THIS VALUE IS GIVEN AND IPV4 ADDRESSING METHOD IS " "\"AUTOMATIC\", THE DNS SERVERS PROVIDED BY A DHCP SERVER WILL BE IGNORED." -#: plinth/modules/networks/forms.py:121 -msgid "Show password" -msgstr "SHOW PASSWORD" +#: plinth/modules/networks/forms.py:89 +msgid "-- select --" +msgstr "-- SELECT --" -#: plinth/modules/networks/forms.py:145 +#: plinth/modules/networks/forms.py:175 #: plinth/modules/networks/templates/connection_show.html:144 msgid "SSID" msgstr "SSID" -#: plinth/modules/networks/forms.py:146 +#: plinth/modules/networks/forms.py:176 msgid "The visible name of the network." msgstr "THE VISIBLE NAME OF THE NETWORK." -#: plinth/modules/networks/forms.py:148 +#: plinth/modules/networks/forms.py:178 #: plinth/modules/networks/templates/connection_show.html:157 msgid "Mode" msgstr "MODE" -#: plinth/modules/networks/forms.py:153 +#: plinth/modules/networks/forms.py:183 msgid "Authentication Mode" msgstr "AUTHENTICATION MODE" -#: plinth/modules/networks/forms.py:154 +#: plinth/modules/networks/forms.py:184 msgid "" "Select WPA if the wireless network is secured and requires clients to have " "the password to connect." @@ -1295,30 +1474,22 @@ msgstr "" "SELECT WPA IF THE WIRELESS NETWORK IS SECURED AND REQUIRES CLIENTS TO HAVE " "THE PASSWORD TO CONNECT." -#: plinth/modules/networks/forms.py:158 +#: plinth/modules/networks/forms.py:188 msgid "Passphrase" msgstr "PASSPHRASE" -#: plinth/modules/networks/forms.py:166 -msgid "" -"Select Automatic (DHCP) if you are connecting to an existing wireless " -"network. Shared mode is useful when running an Access Point." -msgstr "" -"SELECT AUTOMATIC (DHCP) IF YOU ARE CONNECTING TO AN EXISTING WIRELESS " -"NETWORK. SHARED MODE IS USEFUL WHEN RUNNING AN ACCESS POINT." - #: plinth/modules/networks/networks.py:36 #: plinth/modules/networks/networks.py:56 msgid "Network Connections" msgstr "NETWORK CONNECTIONS" #: plinth/modules/networks/networks.py:38 -#: plinth/modules/networks/networks.py:273 +#: plinth/modules/networks/networks.py:242 msgid "Nearby Wi-Fi Networks" msgstr "NEARBY WI-FI NETWORKS" #: plinth/modules/networks/networks.py:40 -#: plinth/modules/networks/networks.py:295 +#: plinth/modules/networks/networks.py:264 msgid "Add Connection" msgstr "ADD CONNECTION" @@ -1342,58 +1513,58 @@ msgstr "CANNOT EDIT CONNECTION: CONNECTION NOT FOUND." msgid "This type of connection is not yet understood." msgstr "THIS TYPE OF CONNECTION IS NOT YET UNDERSTOOD." -#: plinth/modules/networks/networks.py:170 -#: plinth/modules/networks/networks.py:229 +#: plinth/modules/networks/networks.py:139 +#: plinth/modules/networks/networks.py:198 #: plinth/modules/networks/templates/connections_edit.html:34 msgid "Edit Connection" msgstr "EDIT CONNECTION" -#: plinth/modules/networks/networks.py:240 +#: plinth/modules/networks/networks.py:209 #, python-brace-format msgid "Activated connection {name}." msgstr "ACTIVATED CONNECTION {name}." -#: plinth/modules/networks/networks.py:243 +#: plinth/modules/networks/networks.py:212 msgid "Failed to activate connection: Connection not found." msgstr "FAILED TO ACTIVATE CONNECTION: CONNECTION NOT FOUND." -#: plinth/modules/networks/networks.py:247 +#: plinth/modules/networks/networks.py:216 #, python-brace-format msgid "Failed to activate connection {name}: No suitable device is available." msgstr "FAILED TO ACTIVATE CONNECTION {name}: NO SUITABLE DEVICE IS AVAILABLE." -#: plinth/modules/networks/networks.py:260 +#: plinth/modules/networks/networks.py:229 #, python-brace-format msgid "Deactivated connection {name}." msgstr "DEACTIVATED CONNECTION {name}." -#: plinth/modules/networks/networks.py:263 +#: plinth/modules/networks/networks.py:232 msgid "Failed to de-activate connection: Connection not found." msgstr "FAILED TO DE-ACTIVATE CONNECTION: CONNECTION NOT FOUND." -#: plinth/modules/networks/networks.py:325 +#: plinth/modules/networks/networks.py:282 msgid "Adding New Ethernet Connection" msgstr "ADDING NEW ETHERNET CONNECTION" -#: plinth/modules/networks/networks.py:350 +#: plinth/modules/networks/networks.py:300 msgid "Adding New PPPoE Connection" msgstr "ADDING NEW PPPOE CONNECTION" -#: plinth/modules/networks/networks.py:399 +#: plinth/modules/networks/networks.py:332 msgid "Adding New Wi-Fi Connection" msgstr "ADDING NEW WI-FI CONNECTION" -#: plinth/modules/networks/networks.py:413 +#: plinth/modules/networks/networks.py:346 #, python-brace-format msgid "Connection {name} deleted." msgstr "CONNECTION {name} DELETED." -#: plinth/modules/networks/networks.py:416 -#: plinth/modules/networks/networks.py:425 +#: plinth/modules/networks/networks.py:349 +#: plinth/modules/networks/networks.py:358 msgid "Failed to delete connection: Connection not found." msgstr "FAILED TO DELETE CONNECTION: CONNECTION NOT FOUND." -#: plinth/modules/networks/networks.py:430 +#: plinth/modules/networks/networks.py:363 #: plinth/modules/networks/templates/connections_delete.html:26 msgid "Delete Connection" msgstr "DELETE CONNECTION" @@ -1403,7 +1574,7 @@ msgid "Edit connection" msgstr "EDIT CONNECTION" #: plinth/modules/networks/templates/connection_show.html:43 -#: plinth/templates/base.html:119 +#: plinth/templates/base.html:123 msgid "Edit" msgstr "EDIT" @@ -1550,34 +1721,35 @@ msgstr "FIREWALL ZONE" #: plinth/modules/networks/templates/connection_show.html:280 msgid "" -"This interface should be connected to local network/machine. If you connect " -"this interface to a public network, services meant to be available only " -"internally will become available externally. This is a security risk." +"This interface should be connected to a local network/machine. If you " +"connect this interface to a public network, services meant to be available " +"only internally will become available externally. This is a security risk." msgstr "" -"THIS INTERFACE SHOULD BE CONNECTED TO LOCAL NETWORK/MACHINE. IF YOU CONNECT " -"THIS INTERFACE TO A PUBLIC NETWORK, SERVICES MEANT TO BE AVAILABLE ONLY " -"INTERNALLY WILL BECOME AVAILABLE EXTERNALLY. THIS IS A SECURITY RISK." +"THIS INTERFACE SHOULD BE CONNECTED TO A LOCAL NETWORK/MACHINE. IF YOU " +"CONNECT THIS INTERFACE TO A PUBLIC NETWORK, SERVICES MEANT TO BE AVAILABLE " +"ONLY INTERNALLY WILL BECOME AVAILABLE EXTERNALLY. THIS IS A SECURITY RISK." #: plinth/modules/networks/templates/connection_show.html:300 msgid "" -"This interface should receive your Internet connection. If you connect it " -"your a local network/machine, many services meant to available only " -"internally will not be available." +"This interface should receive your Internet connection. If you connect it to " +"a local network/machine, many services meant to available only internally " +"will not be available." msgstr "" "THIS INTERFACE SHOULD RECEIVE YOUR INTERNET CONNECTION. IF YOU CONNECT IT " "YOUR A LOCAL NETWORK/MACHINE, MANY SERVICES MEANT TO AVAILABLE ONLY " "INTERNALLY WILL NOT BE AVAILABLE." #: plinth/modules/networks/templates/connection_show.html:319 +#, python-format msgid "" -"This interface is not maintained by FreedomBox. Its security status is " -"unknown to FreedomBox. Many FreedomBox services may not be available on " -"this interface. It is recommended that you deactivate/delete this " +"This interface is not maintained by %(box_name)s. Its security status is " +"unknown to %(box_name)s. Many %(box_name)s services may not be available on " +"this interface. It is recommended that you deactivate or delete this " "connection and re-configure it." msgstr "" -"THIS INTERFACE IS NOT MAINTAINED BY FREEDOMBOX. ITS SECURITY STATUS IS " -"UNKNOWN TO FREEDOMBOX. MANY FREEDOMBOX SERVICES MAY NOT BE AVAILABLE ON " -"THIS INTERFACE. IT IS RECOMMENDED THAT YOU DEACTIVATE/DELETE THIS " +"THIS INTERFACE IS NOT MAINTAINED BY %(box_name)s. ITS SECURITY STATUS IS " +"UNKNOWN TO %(box_name)s. MANY %(box_name)s SERVICES MAY NOT BE AVAILABLE ON " +"THIS INTERFACE. IT IS RECOMMENDED THAT YOU DEACTIVATE OR DELETE THIS " "CONNECTION AND RE-CONFIGURE IT." #: plinth/modules/networks/templates/connections_add.html:34 @@ -1668,14 +1840,14 @@ msgstr "ENABLE OPENVPN SERVER" #, python-format msgid "" "Virtual Private Network (VPN) is a technique for securely connecting two " -"machines in order to access resources of a private network. While you are " +"devices in order to access resources of a private network. While you are " "away from home, you can connect to your %(box_name)s in order to join your " "home network and access private/internal services provided by %(box_name)s. " "You can also access the rest of the Internet via %(box_name)s for added " "security and anonymity." msgstr "" "VIRTUAL PRIVATE NETWORK (VPN) IS A TECHNIQUE FOR SECURELY CONNECTING TWO " -"MACHINES IN ORDER TO ACCESS RESOURCES OF A PRIVATE NETWORK. WHILE YOU ARE " +"DEVICES IN ORDER TO ACCESS RESOURCES OF A PRIVATE NETWORK. WHILE YOU ARE " "AWAY FROM HOME, YOU CAN CONNECT TO YOUR %(box_name)s IN ORDER TO JOIN YOUR " "HOME NETWORK AND ACCESS PRIVATE/INTERNAL SERVICES PROVIDED BY %(box_name)s. " "YOU CAN ALSO ACCESS THE REST OF THE INTERNET VIA %(box_name)s FOR ADDED " @@ -1691,14 +1863,14 @@ msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " "available for most platforms. See documentation on recommended clients and instructions on how to " "configure them." msgstr "" "TO CONNECT TO %(box_name)s's VPN, YOU NEED TO DOWNLOAD A PROFILE AND FEED IT " "TO AN OPENVPN CLIENT ON YOUR MOBILE OR DESKTOP MACHINE. OPENVPN CLIENTS ARE " "AVAILABLE FOR MOST PLATFORMS. SEE DOCUMENTATION ON RECOMMENDED CLIENTS AND INSTRUCTIONS ON HOW TO " "CONFIGURE THEM." @@ -2257,14 +2429,14 @@ msgid "" "reStore is a server for unhosted web " "applications. The idea is to uncouple web applications from data. No " "matter where a web application is served from, the data can be stored on an " -"unhosted storage server of user's choice. With reStore, your " -"%(cfg.box_name)s becomes your unhosted storage server." +"unhosted storage server of user's choice. With reStore, your %(box_name)s " +"becomes your unhosted storage server." msgstr "" "RESTORE IS A SERVER FOR UNHOSTED WEB " "APPLICATIONS. THE IDEA IS TO UNCOUPLE WEB APPLICATIONS FROM DATA. NO " "MATTER WHERE A WEB APPLICATION IS SERVED FROM, THE DATA CAN BE STORED ON AN " -"UNHOSTED STORAGE SERVER OF USER'S CHOICE. WITH RESTORE, YOUR " -"%(cfg.box_name)s BECOMES YOUR UNHOSTED STORAGE SERVER." +"UNHOSTED STORAGE SERVER OF USER'S CHOICE. WITH RESTORE, YOUR %(box_name)s " +"BECOMES YOUR UNHOSTED STORAGE SERVER." #: plinth/modules/restore/templates/restore_index.html:40 msgid "" @@ -2360,7 +2532,7 @@ msgstr "SYSTEM" #: plinth/modules/system/system.py:33 #: plinth/modules/system/templates/system.html:25 -#: plinth/templates/base.html:105 +#: plinth/templates/base.html:109 msgid "System Configuration" msgstr "SYSTEM CONFIGURATION" @@ -2398,7 +2570,7 @@ msgstr "ACCESS URL {url} ON TCP{kind} VIA TOR" msgid "Confirm Tor usage at {url} on tcp{kind}" msgstr "CONFIRM TOR USAGE AT {url} ON TCP{kind}" -#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66 +#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:68 msgid "Anonymity Network (Tor)" msgstr "ANONYMITY NETWORK (TOR)" @@ -2463,27 +2635,28 @@ msgstr "SOCKS" msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050." msgstr "A TOR SOCKS PORT IS AVAILABLE ON YOUR %(box_name)s ON TCP PORT 9050." -#: plinth/modules/tor/tor.py:46 +#: plinth/modules/tor/tor.py:47 msgid "Enable Tor" msgstr "ENABLE TOR" -#: plinth/modules/tor/tor.py:49 +#: plinth/modules/tor/tor.py:50 msgid "Enable Tor Hidden Service" msgstr "ENABLE TOR HIDDEN SERVICE" -#: plinth/modules/tor/tor.py:51 +#: plinth/modules/tor/tor.py:53 +#, python-brace-format msgid "" -"A hidden service will allow FreedomBox to provide selected services (such as " -"ownCloud or Chat) without revealing its location." +"A hidden service will allow {box_name} to provide selected services (such as " +"ownCloud or chat) without revealing its location." msgstr "" -"A HIDDEN SERVICE WILL ALLOW FREEDOMBOX TO PROVIDE SELECTED SERVICES (SUCH AS " +"A HIDDEN SERVICE WILL ALLOW {box_name} TO PROVIDE SELECTED SERVICES (SUCH AS " "OWNCLOUD OR CHAT) WITHOUT REVEALING ITS LOCATION." -#: plinth/modules/tor/tor.py:55 +#: plinth/modules/tor/tor.py:57 msgid "Download software packages over Tor" msgstr "DOWNLOAD SOFTWARE PACKAGES OVER TOR" -#: plinth/modules/tor/tor.py:57 +#: plinth/modules/tor/tor.py:59 msgid "" "When enabled, software will be downloaded over the Tor network for " "installations and upgrades. This adds a degree of privacy and security " @@ -2493,46 +2666,46 @@ msgstr "" "INSTALLATIONS AND UPGRADES. THIS ADDS A DEGREE OF PRIVACY AND SECURITY " "DURING SOFTWARE DOWNLOADS." -#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285 +#: plinth/modules/tor/tor.py:87 plinth/modules/tor/tor.py:287 msgid "Tor Hidden Service" msgstr "TOR HIDDEN SERVICE" -#: plinth/modules/tor/tor.py:115 +#: plinth/modules/tor/tor.py:117 msgid "Tor Control Panel" msgstr "TOR CONTROL PANEL" -#: plinth/modules/tor/tor.py:240 +#: plinth/modules/tor/tor.py:242 #, python-brace-format msgid "Action error: {0} [{1}] [{2}]" msgstr "ACTION ERROR: {0} [{1}] [{2}]" -#: plinth/modules/tor/tor.py:256 +#: plinth/modules/tor/tor.py:258 msgid "Tor enabled" msgstr "TOR ENABLED" -#: plinth/modules/tor/tor.py:259 +#: plinth/modules/tor/tor.py:261 msgid "Tor disabled" msgstr "TOR DISABLED" -#: plinth/modules/tor/tor.py:264 +#: plinth/modules/tor/tor.py:266 msgid "Tor hidden service enabled" msgstr "TOR HIDDEN SERVICE ENABLED" -#: plinth/modules/tor/tor.py:267 +#: plinth/modules/tor/tor.py:269 msgid "Tor hidden service disabled" msgstr "TOR HIDDEN SERVICE DISABLED" -#: plinth/modules/tor/tor.py:292 +#: plinth/modules/tor/tor.py:294 msgid "Enabled package download over Tor" msgstr "ENABLED PACKAGE DOWNLOAD OVER TOR" -#: plinth/modules/tor/tor.py:295 +#: plinth/modules/tor/tor.py:297 msgid "Disabled package download over Tor" msgstr "DISABLED PACKAGE DOWNLOAD OVER TOR" #: plinth/modules/transmission/__init__.py:38 #: plinth/modules/transmission/templates/transmission.html:26 -#: plinth/modules/transmission/views.py:63 +#: plinth/modules/transmission/views.py:67 msgid "BitTorrent (Transmission)" msgstr "BITTORRENT (TRANSMISSION)" @@ -2608,72 +2781,73 @@ msgstr "" "WHEN ENABLED, THE UNATTENDED-UPGRADES PROGRAM WILL BE RUN ONCE PER DAY. IT " "WILL ATTEMPT TO PERFORM ANY PACKAGE UPGRADES THAT ARE AVAILABLE." -#: plinth/modules/upgrades/templates/upgrades.html:40 -msgid "There was an error while upgrading." -msgstr "THERE WAS AN ERROR WHILE UPGRADING." - -#: plinth/modules/upgrades/templates/upgrades.html:43 -#: plinth/modules/upgrades/templates/upgrades.html:59 -msgid "Output from unattended-upgrades:" -msgstr "OUTPUT FROM UNATTENDED-UPGRADES:" - -#: plinth/modules/upgrades/templates/upgrades.html:50 -msgid "The operating system is up to date now.  " -msgstr "THE OPERATING SYSTEM IS UP TO DATE NOW.  " - -#: plinth/modules/upgrades/templates/upgrades.html:53 -msgid "Show Details" -msgstr "SHOW DETAILS" - -#: plinth/modules/upgrades/templates/upgrades.html:69 +#: plinth/modules/upgrades/templates/upgrades.html:37 msgid "" -"This will run unattended-upgrades, which will attempt to upgrade your system " -"with the latest Debian packages. It may take a few minutes to complete." +"Upgrades install the latest software and security updates. When automatic " +"upgrades are enabled, upgrades are automatically run every night. You don't " +"normally need to start the upgrade process." msgstr "" -"THIS WILL RUN UNATTENDED-UPGRADES, WHICH WILL ATTEMPT TO UPGRADE YOUR SYSTEM " -"WITH THE LATEST DEBIAN PACKAGES. IT MAY TAKE A FEW MINUTES TO COMPLETE." +"UPGRADES INSTALL THE LATEST SOFTWARE AND SECURITY UPDATES. WHEN AUTOMATIC " +"UPGRADES ARE ENABLED, UPGRADES ARE AUTOMATICALLY RUN EVERY NIGHT. YOU DON'T " +"NORMALLY NEED TO START THE UPGRADE PROCESS." -#: plinth/modules/upgrades/templates/upgrades.html:80 +#: plinth/modules/upgrades/templates/upgrades.html:45 +msgid "" +"Depending on the number of packages to install, this may take a long time to " +"complete. While upgrades are in progress, you will not be able to install " +"other packages. During the upgrade, this web interface may be temporarily " +"unavailable and show an error. Refresh the page to continue." +msgstr "" +"DEPENDING ON THE NUMBER OF PACKAGES TO INSTALL, THIS MAY TAKE A LONG TIME TO " +"COMPLETE. WHILE UPGRADES ARE IN PROGRESS, YOU WILL NOT BE ABLE TO INSTALL " +"OTHER PACKAGES. DURING THE UPGRADE, THIS WEB INTERFACE MAY BE TEMPORARILY " +"UNAVAILABLE AND SHOW AN ERROR. REFRESH THE PAGE TO CONTINUE." + +#: plinth/modules/upgrades/templates/upgrades.html:58 msgid "Upgrade now »" msgstr "UPGRADE NOW »" -#: plinth/modules/upgrades/templates/upgrades.html:87 -msgid "System is being upgraded." -msgstr "SYSTEM IS BEING UPGRADED." +#: plinth/modules/upgrades/templates/upgrades.html:65 +msgid "A package manager is running." +msgstr "A PACKAGE MANAGER IS RUNNING." -#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64 +#: plinth/modules/upgrades/templates/upgrades.html:70 +msgid "Recent log from upgrades:" +msgstr "RECENT LOG FROM UPGRADES:" + +#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66 msgid "Automatic Upgrades" msgstr "AUTOMATIC UPGRADES" -#: plinth/modules/upgrades/views.py:37 +#: plinth/modules/upgrades/views.py:38 msgid "Upgrade Packages" msgstr "UPGRADE PACKAGES" -#: plinth/modules/upgrades/views.py:75 +#: plinth/modules/upgrades/views.py:96 +msgid "Upgrade process started." +msgstr "UPGRADE PROCESS STARTED." + +#: plinth/modules/upgrades/views.py:99 +msgid "Starting upgrade failed." +msgstr "STARTING UPGRADE FAILED." + +#: plinth/modules/upgrades/views.py:102 msgid "Package Upgrades" msgstr "PACKAGE UPGRADES" -#: plinth/modules/upgrades/views.py:116 +#: plinth/modules/upgrades/views.py:131 #, python-brace-format msgid "Error when configuring unattended-upgrades: {error}" msgstr "ERROR WHEN CONFIGURING UNATTENDED-UPGRADES: {error}" -#: plinth/modules/upgrades/views.py:121 +#: plinth/modules/upgrades/views.py:136 msgid "Automatic upgrades enabled" msgstr "AUTOMATIC UPGRADES ENABLED" -#: plinth/modules/upgrades/views.py:123 +#: plinth/modules/upgrades/views.py:138 msgid "Automatic upgrades disabled" msgstr "AUTOMATIC UPGRADES DISABLED" -#: plinth/modules/upgrades/views.py:142 -msgid "Upgrade completed." -msgstr "UPGRADE COMPLETED." - -#: plinth/modules/upgrades/views.py:144 -msgid "Upgrade failed." -msgstr "UPGRADE FAILED." - #: plinth/modules/users/__init__.py:36 msgid "Users and Groups" msgstr "USERS AND GROUPS" @@ -2896,9 +3070,10 @@ msgstr "WEB SERVER OVER SECURE SOCKET LAYER" msgid "Secure Shell (SSH) Server" msgstr "SECURE SHELL (SSH) SERVER" -#: plinth/service.py:78 -msgid "FreedomBox Web Interface (Plinth)" -msgstr "FREEDOMBOX WEB INTERFACE (PLINTH)" +#: plinth/service.py:79 +#, python-brace-format +msgid "{box_name} Web Interface (Plinth)" +msgstr "{box_name} WEB INTERFACE (PLINTH)" #: plinth/templates/404.html:25 msgid "404" @@ -2934,27 +3109,24 @@ msgstr "" "\">BUG TRACKER SO WE CAN FIX IT." #: plinth/templates/base.html:49 -msgid "Plinth administrative interface for the FreedomBox" -msgstr "PLINTH ADMINISTRATIVE INTERFACE FOR THE FREEDOMBOX" +#, python-format +msgid "Plinth administrative interface for the %(box_name)s" +msgstr "PLINTH ADMINISTRATIVE INTERFACE FOR THE %(box_name)s" -#: plinth/templates/base.html:52 plinth/templates/base.html.py:88 -msgid "FreedomBox" -msgstr "FREEDOMBOX" - -#: plinth/templates/base.html:81 +#: plinth/templates/base.html:83 msgid "Toggle navigation" msgstr "TOGGLE NAVIGATION" -#: plinth/templates/base.html:121 plinth/templates/base.html.py:122 +#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 msgid "Change password" msgstr "CHANGE PASSWORD" -#: plinth/templates/base.html:125 plinth/templates/base.html.py:126 -#: plinth/templates/base.html:139 plinth/templates/base.html.py:141 +#: plinth/templates/base.html:129 plinth/templates/base.html.py:130 +#: plinth/templates/base.html:143 plinth/templates/base.html.py:145 msgid "Log out" msgstr "LOG OUT" -#: plinth/templates/base.html:131 plinth/templates/base.html.py:133 +#: plinth/templates/base.html:135 plinth/templates/base.html.py:137 msgid "Log in" msgstr "LOG IN" @@ -2996,6 +3168,69 @@ msgstr "INSTALLING %(package_names)s: %(status)s" msgid "%(percentage)s%% complete" msgstr "%(percentage)s%% COMPLETE" +#~ msgid "The following is the current status:" +#~ msgstr "THE FOLLOWING IS THE CURRENT STATUS:" + +#~ msgid "Create Wiki/Blog" +#~ msgstr "CREATE WIKI/BLOG" + +#~ msgid "show password" +#~ msgstr "SHOW PASSWORD" + +#~ msgid "Congratulations! Your FreedomBox is up and running!" +#~ msgstr "CONGRATULATIONS! YOUR FREEDOMBOX IS UP AND RUNNING!" + +#~ msgid "" +#~ "Please provide the following basic information to complete the setup " +#~ "process." +#~ msgstr "" +#~ "PLEASE PROVIDE THE FOLLOWING BASIC INFORMATION TO COMPLETE THE SETUP " +#~ "PROCESS." + +#~ msgid "Next" +#~ msgstr "NEXT" + +#~ msgid "FreedomBox Manual" +#~ msgstr "FREEDOMBOX MANUAL" + +#~ msgid "" +#~ "Many FreedomBox contributors and users are also available on the " +#~ "#freedombox channel of the irc.oftc.net IRC network." +#~ msgstr "" +#~ "MANY FREEDOMBOX CONTRIBUTORS AND USERS ARE ALSO AVAILABLE ON THE " +#~ "#FREEDOMBOX CHANNEL OF THE IRC.OFTC.NET IRC NETWORK." + +#~ msgid "" +#~ "Select Automatic (DHCP) if you are connecting to an existing wireless " +#~ "network. Shared mode is useful when running an Access Point." +#~ msgstr "" +#~ "SELECT AUTOMATIC (DHCP) IF YOU ARE CONNECTING TO AN EXISTING WIRELESS " +#~ "NETWORK. SHARED MODE IS USEFUL WHEN RUNNING AN ACCESS POINT." + +#~ msgid "There was an error while upgrading." +#~ msgstr "THERE WAS AN ERROR WHILE UPGRADING." + +#~ msgid "Output from unattended-upgrades:" +#~ msgstr "OUTPUT FROM UNATTENDED-UPGRADES:" + +#~ msgid "The operating system is up to date now.  " +#~ msgstr "THE OPERATING SYSTEM IS UP TO DATE NOW.  " + +#~ msgid "Show Details" +#~ msgstr "SHOW DETAILS" + +#~ msgid "" +#~ "This will run unattended-upgrades, which will attempt to upgrade your " +#~ "system with the latest Debian packages. It may take a few minutes to " +#~ "complete." +#~ msgstr "" +#~ "THIS WILL RUN UNATTENDED-UPGRADES, WHICH WILL ATTEMPT TO UPGRADE YOUR " +#~ "SYSTEM WITH THE LATEST DEBIAN PACKAGES. IT MAY TAKE A FEW MINUTES TO " +#~ "COMPLETE." + +#~ msgid "System is being upgraded." +#~ msgstr "SYSTEM IS BEING UPGRADED." + #~ msgid "" #~ "You can install and run various services and applications on your " #~ "%(box_name)s." diff --git a/plinth/modules/apps/templates/apps.html b/plinth/modules/apps/templates/apps.html index 303325e2a..266f6f079 100644 --- a/plinth/modules/apps/templates/apps.html +++ b/plinth/modules/apps/templates/apps.html @@ -25,7 +25,7 @@

{% trans "Services and Applications" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} You can install and run various services and applications on your {{ box_name }}. Click on any app page link on the left to read a description of the application and choose to install it. diff --git a/plinth/modules/avahi/templates/avahi.html b/plinth/modules/avahi/templates/avahi.html index 80d55550a..c3d1b98d7 100644 --- a/plinth/modules/avahi/templates/avahi.html +++ b/plinth/modules/avahi/templates/avahi.html @@ -27,11 +27,11 @@

{% blocktrans trimmed %} - Service discovery allows other machines on the network to - discover your FreedomBox and services running on it. It also - allows FreedomBox to discover other machines and services - running on your local network. Service discovery is not - essential and works only on internal networks. It may be + Service discovery allows other devices on the network to + discover your {{ box_name }} and services running on it. It + also allows {{ box_name }} to discover other devices and + services running on your local network. Service discovery is + not essential and works only on internal networks. It may be disabled to improve security especially when connecting to a hostile local network. {% endblocktrans %} diff --git a/plinth/modules/config/config.py b/plinth/modules/config/config.py index cd78025c1..f730f83d1 100644 --- a/plinth/modules/config/config.py +++ b/plinth/modules/config/config.py @@ -38,6 +38,7 @@ from plinth.modules.names import SERVICES from plinth.signals import pre_hostname_change, post_hostname_change from plinth.signals import domainname_change from plinth.signals import domain_added, domain_removed +from plinth.utils import format_lazy HOSTNAME_REGEX = r'^[a-zA-Z0-9]([-a-zA-Z0-9]{,61}[a-zA-Z0-9])?$' @@ -92,12 +93,12 @@ class ConfigurationForm(forms.Form): # https://tools.ietf.org/html/rfc2181#section-11 hostname = TrimmedCharField( label=ugettext_lazy('Hostname'), - help_text=\ - ugettext_lazy('Hostname is the local name by which other machines on ' - 'the local network reach your machine. It must start ' - 'and end with an alphabet or a digit and have as ' - 'interior characters only alphabets, digits and ' - 'hyphens. Total length must be 63 characters or less.'), + help_text=format_lazy(ugettext_lazy( + 'Hostname is the local name by which other devices on the local ' + 'network can reach your {box_name}. It must start and end with ' + 'an alphabet or a digit and have as interior characters only ' + 'alphabets, digits and hyphens. Total length must be 63 ' + 'characters or less.'), box_name=ugettext_lazy(cfg.box_name)), validators=[ validators.RegexValidator( HOSTNAME_REGEX, @@ -105,14 +106,14 @@ class ConfigurationForm(forms.Form): domainname = TrimmedCharField( label=ugettext_lazy('Domain Name'), - help_text=\ - ugettext_lazy('Domain name is the global name by which other machines ' - 'on the Internet can reach you. It must consist of ' - 'labels separated by dots. Each label must start and ' - 'end with an alphabet or a digit and have as interior ' - 'characters only alphabets, digits and hyphens. Length ' - 'of each label must be 63 characters or less. Total ' - 'length of domain name must be 253 characters or less.'), + help_text=format_lazy(ugettext_lazy( + 'Domain name is the global name by which other devices on the ' + 'Internet can reach your {box_name}. It must consist of labels ' + 'separated by dots. Each label must start and end with an ' + 'alphabet or a digit and have as interior characters only ' + 'alphabets, digits and hyphens. Length of each label must be 63 ' + 'characters or less. Total length of domain name must be 253 ' + 'characters or less.'), box_name=ugettext_lazy(cfg.box_name)), required=False, validators=[ validators.RegexValidator( @@ -123,8 +124,7 @@ class ConfigurationForm(forms.Form): language = forms.ChoiceField( label=ugettext_lazy('Language'), help_text=\ - ugettext_lazy('Language for this FreedomBox web administration ' - 'interface'), + ugettext_lazy('Language for this web administration interface'), required=False, choices=settings.LANGUAGES) diff --git a/plinth/modules/dynamicdns/dynamicdns.py b/plinth/modules/dynamicdns/dynamicdns.py index 4fef37df6..490ec98c6 100644 --- a/plinth/modules/dynamicdns/dynamicdns.py +++ b/plinth/modules/dynamicdns/dynamicdns.py @@ -26,6 +26,7 @@ import logging from plinth import actions from plinth import cfg from plinth import package +from plinth.utils import format_lazy logger = logging.getLogger(__name__) EMPTYSTRING = 'none' @@ -78,9 +79,10 @@ class ConfigureForm(forms.Form): help_server = \ ugettext_lazy('Please do not enter a URL here (like ' '"https://example.com/") but only the hostname of the ' - 'GnuDIP server (like "example.pcom").') - help_domain = \ - ugettext_lazy('The public domain name you want use to reach your box.') + 'GnuDIP server (like "example.com").') + help_domain = format_lazy( + ugettext_lazy('The public domain name you want use to reach your ' + '{box_name}.'), box_name=ugettext_lazy(cfg.box_name)) help_disable_ssl = \ ugettext_lazy('Use this option if your provider uses self signed ' 'certificates.') @@ -90,13 +92,14 @@ class ConfigureForm(forms.Form): help_secret = \ ugettext_lazy('Leave this field empty if you want to keep your ' 'previous configured password.') - help_ip_url = \ - ugettext_lazy('Optional Value. If your FreedomBox is not connected ' + help_ip_url = format_lazy( + ugettext_lazy('Optional Value. If your {box_name} is not connected ' 'directly to the Internet (i.e. connected to a NAT ' 'router) this URL is used to figure out the real ' - 'Internet IP. The URL should simply return the IP where' - 'the client comes from. Example: ' - 'http://myip.datasystems24.de') + 'Internet IP. The URL should simply return the IP where ' + 'the client comes from (example: ' + 'http://myip.datasystems24.de).'), + box_name=ugettext_lazy(cfg.box_name)) help_user = \ ugettext_lazy('You should have been requested to select a username ' 'when you created the account.') @@ -129,11 +132,11 @@ class ConfigureForm(forms.Form): help_text=help_update_url) disable_SSL_cert_check = forms.BooleanField( - label=ugettext_lazy('accept all SSL certificates'), + label=ugettext_lazy('Accept all SSL certificates'), help_text=help_disable_ssl, required=False) use_http_basic_auth = forms.BooleanField( - label=ugettext_lazy('use HTTP basic authentication'), + label=ugettext_lazy('Use HTTP basic authentication'), help_text=help_http_auth, required=False) dynamicdns_domain = TrimmedCharField( @@ -151,7 +154,7 @@ class ConfigureForm(forms.Form): label=ugettext_lazy('Password'), widget=forms.PasswordInput(), required=False, help_text=help_secret) - showpw = forms.BooleanField(label=ugettext_lazy('show password'), + showpw = forms.BooleanField(label=ugettext_lazy('Show password'), required=False) dynamicdns_ipurl = TrimmedCharField( diff --git a/plinth/modules/dynamicdns/templates/dynamicdns.html b/plinth/modules/dynamicdns/templates/dynamicdns.html index 732679999..5ad1ec90b 100644 --- a/plinth/modules/dynamicdns/templates/dynamicdns.html +++ b/plinth/modules/dynamicdns/templates/dynamicdns.html @@ -22,14 +22,14 @@ {% block content %} -

{% trans "DynamicDNS client" %}

+

{% trans "Dynamic DNS Client" %}

{% blocktrans trimmed %} If your internet provider changes your IP address periodic (i.e. every 24h) it may be hard for others to find you in the WEB. And for this reason nobody may find the services which are - provided by FreedomBox (like your ownCloud). + provided by {{ box_name }}, such as ownCloud. {% endblocktrans %}

@@ -41,7 +41,7 @@ public IP address to an gnudip server. Afterwards the Server will assign your DNS name with the - new IP and if someone from the internet asks for your DNS name + new IP and if someone from the Internet asks for your DNS name he will get your current IP answered. {% endblocktrans %}

@@ -59,9 +59,9 @@

{% blocktrans trimmed %} - If your freedombox is connected behind some NAT router, don't forget - to add portforwarding (i.e. forward some standard ports like 80 and 443) - to your freedombox device. + If your {{ box_name }} is connected behind some NAT router, don't forget + to add port forwarding (i.e. forward some standard ports like 80 and + 443). {% endblocktrans %}

{% endblock %} diff --git a/plinth/modules/dynamicdns/templates/dynamicdns_status.html b/plinth/modules/dynamicdns/templates/dynamicdns_status.html index dc11a96b9..74ad2d0b1 100644 --- a/plinth/modules/dynamicdns/templates/dynamicdns_status.html +++ b/plinth/modules/dynamicdns/templates/dynamicdns_status.html @@ -32,14 +32,14 @@ {% endblocktrans %} {% else %} {% if no_nat %} - {% trans "Direct connection to the internet." %} + {% trans "Direct connection to the Internet." %} {% else %} {% blocktrans trimmed %} - Behind NAT, this means that dynamic DNS service will poll - the "IP check URL" for changes (we need the "IP check URL" - for this reason - otherwise we will not detect IP changes). - It may take up to {{ timer }} minutes until we update your - DNS entry in case of WAN IP change. + Behind NAT. This means that Dynamic DNS service will poll + the "IP check URL" for changes (the "IP check URL" entry is + needed for this - otherwise IP changes will not be + detected). In case the WAN IP changes, it may take up to + {{ timer }} minutes until your DNS entry is updated. {% endblocktrans %} {% endif %} {% endif %} diff --git a/plinth/modules/firewall/templates/firewall.html b/plinth/modules/firewall/templates/firewall.html index d391f9708..e59d4052d 100644 --- a/plinth/modules/firewall/templates/firewall.html +++ b/plinth/modules/firewall/templates/firewall.html @@ -25,20 +25,20 @@

{{ title }}

- {% blocktrans trimmed with box_name=cfg.box_name %} - Firewall is a network security system that controls the incoming - and outgoing network traffic on your {{ box_name }}. Keeping a + {% blocktrans trimmed %} + Firewall is a security system that controls the incoming and + outgoing network traffic on your {{ box_name }}. Keeping a firewall enabled and properly configured reduces risk of security threat from the Internet. {% endblocktrans %}

-

{% trans "The following is the current status:" %}

+

{% trans "Current status:" %}

{% if firewall_status == 'not_running' %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Firewall daemon is not running. Please run it. Firewall comes enabled by default on {{ box_name }}. On any Debian based system (such as {{ box_name }}) you may run it using the @@ -102,8 +102,8 @@ {% blocktrans trimmed %} The operation of the firewall is automatic. When you enable - a service it is automatically permitted in the firewall and - you disable a service is automatically disabled in the firewall. + a service it is also permitted in the firewall and when you + disable a service it is also disabled in the firewall. {% endblocktrans %}

diff --git a/plinth/modules/first_boot/templates/firstboot_state0.html b/plinth/modules/first_boot/templates/firstboot_state0.html index 517cd7df5..670a901cc 100644 --- a/plinth/modules/first_boot/templates/firstboot_state0.html +++ b/plinth/modules/first_boot/templates/firstboot_state0.html @@ -37,7 +37,7 @@ {% block content_row %}

{{ cfg.box_name }} + alt="{{ box_name }}" width="640"/>

@@ -46,7 +46,7 @@

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} To complete the setup of your {{ box_name }}, please provide some basic information. {% endblocktrans %} diff --git a/plinth/modules/first_boot/templates/firstboot_state10.html b/plinth/modules/first_boot/templates/firstboot_state10.html index b7b18cf9c..93fb7d5e2 100644 --- a/plinth/modules/first_boot/templates/firstboot_state10.html +++ b/plinth/modules/first_boot/templates/firstboot_state10.html @@ -29,10 +29,10 @@

{% trans "Setup Complete!" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} {{ box_name }} setup is now complete. To make your {{ box_name }} - functional, you need some applications. Applications will be - installed the first time you access them. + functional, you need some applications. They will be installed + the first time you access them. {% endblocktrans %}

diff --git a/plinth/modules/help/help.py b/plinth/modules/help/help.py index c59d5d753..4ffe73e87 100644 --- a/plinth/modules/help/help.py +++ b/plinth/modules/help/help.py @@ -35,7 +35,7 @@ def init(): 'glyphicon-book', 'help:index', 101) menu.add_urlname(ugettext_lazy('Where to Get Help'), 'glyphicon-search', 'help:index_explicit', 5) - menu.add_urlname(ugettext_lazy('FreedomBox Manual'), 'glyphicon-info-sign', + menu.add_urlname(ugettext_lazy('Manual'), 'glyphicon-info-sign', 'help:manual', 10) menu.add_urlname(ugettext_lazy('About'), 'glyphicon-star', 'help:about', 100) @@ -52,7 +52,7 @@ def index(request): def about(request): """Serve the about page""" context = { - 'title': _('About {box_name}').format(box_name=cfg.box_name), + 'title': _('About {box_name}').format(box_name=_(cfg.box_name)), 'version': __version__ } return TemplateResponse(request, 'help_about.html', context) @@ -68,6 +68,7 @@ def manual(request): except IOError: raise Http404 - return TemplateResponse(request, 'help_manual.html', - {'title': _('FreedomBox Manual'), - 'content': content}) + return TemplateResponse( + request, 'help_manual.html', + {'title': _('{box_name} Manual').format(box_name=_(cfg.box_name)), + 'content': content}) diff --git a/plinth/modules/help/templates/help_about.html b/plinth/modules/help/templates/help_about.html index d0c33e51f..1c7beafbd 100644 --- a/plinth/modules/help/templates/help_about.html +++ b/plinth/modules/help/templates/help_about.html @@ -28,14 +28,14 @@

{% blocktrans trimmed %} - FreedomBox is a community project to develop, design and promote - personal servers running free software for private, personal - communications. It is a networking appliance designed to allow - interfacing with the rest of the Internet under conditions of - protected privacy and data security. It hosts applications such - as blog, wiki, website, social network, email, web proxy and a - Tor relay on a device that can replace your Wi-Fi router so that - your data stays with you. + {{ box_name }} is a community project to develop, design and + promote personal servers running free software for private, + personal communications. It is a networking appliance designed + to allow interfacing with the rest of the Internet under + conditions of protected privacy and data security. It hosts + applications such as blog, wiki, website, social network, email, + web proxy and a Tor relay, on a device that can replace your + Wi-Fi router, so that your data stays with you. {% endblocktrans %}

@@ -55,15 +55,16 @@

{% blocktrans trimmed %} There are a number of projects working to realize a future of - distributed services; FreedomBox aims to bring them all together - in a convenient package. + distributed services; {{ box_name }} aims to bring them all + together in a convenient package. {% endblocktrans %}

{% blocktrans trimmed %} - For more information about the FreedomBox project, see the - FreedomBox Wiki. + For more information about the {{ box_name }} project, see the + {{ box_name }} + Wiki. {% endblocktrans %}

diff --git a/plinth/modules/help/templates/help_base.html b/plinth/modules/help/templates/help_base.html index aaf879b7b..5217c2542 100644 --- a/plinth/modules/help/templates/help_base.html +++ b/plinth/modules/help/templates/help_base.html @@ -33,9 +33,7 @@ {{ cfg.box_name }} - {% blocktrans trimmed with box_name=cfg.box_name %} - {{ box_name }} Setup - {% endblocktrans %} + {% blocktrans trimmed %}{{ box_name }} Setup{% endblocktrans %} diff --git a/plinth/modules/help/templates/help_index.html b/plinth/modules/help/templates/help_index.html index 4b41ac6b3..ee424d8e1 100644 --- a/plinth/modules/help/templates/help_index.html +++ b/plinth/modules/help/templates/help_index.html @@ -26,8 +26,8 @@

{% url 'help:manual' as manual_url %} - {% blocktrans trimmed with box_name=cfg.box_name %} - The FreedomBox Manual is the + {% blocktrans trimmed %} + The {{ box_name }} Manual is the best place to start for information regarding {{ box_name }}. {% endblocktrans %}

@@ -35,13 +35,13 @@

{% blocktrans trimmed %} - FreedomBox project wiki contains further information. + {{ box_name }} project wiki contains further information. {% endblocktrans %}

{% blocktrans trimmed %} - To seek help from FreedomBox community, queries may be posted on + To seek help from {{ box_name }} community, queries may be posted on the mailing list. The list archives also contain information @@ -51,8 +51,8 @@

{% blocktrans trimmed %} - Many FreedomBox contributors and users are also available on the irc.oftc.net IRC network. - Join and request help on the + Many {{ box_name }} contributors and users are also available on + the irc.oftc.net IRC network. Join and request help on the #freedombox channel using the IRC web interface. {% endblocktrans %} diff --git a/plinth/modules/ikiwiki/__init__.py b/plinth/modules/ikiwiki/__init__.py index 5a67f0fd8..402f4b6ae 100644 --- a/plinth/modules/ikiwiki/__init__.py +++ b/plinth/modules/ikiwiki/__init__.py @@ -35,12 +35,12 @@ service = None def init(): """Initialize the ikiwiki module.""" menu = cfg.main_menu.get('apps:index') - menu.add_urlname(_('Wiki & Blog (Ikiwiki)'), 'glyphicon-edit', + menu.add_urlname(_('Wiki and Blog (ikiwiki)'), 'glyphicon-edit', 'ikiwiki:index', 1100) global service service = service_module.Service( - 'ikiwiki', _('Ikiwiki wikis and blogs'), ['http', 'https'], + 'ikiwiki', _('ikiwiki wikis and blogs'), ['http', 'https'], is_external=True, enabled=is_enabled()) diff --git a/plinth/modules/ikiwiki/forms.py b/plinth/modules/ikiwiki/forms.py index 4c711c738..11d3c8020 100644 --- a/plinth/modules/ikiwiki/forms.py +++ b/plinth/modules/ikiwiki/forms.py @@ -26,7 +26,7 @@ from django.utils.translation import ugettext_lazy as _ class IkiwikiForm(forms.Form): """ikiwiki configuration form.""" enabled = forms.BooleanField( - label=_('Enable Ikiwiki'), + label=_('Enable ikiwiki'), required=False) diff --git a/plinth/modules/ikiwiki/templates/ikiwiki_delete.html b/plinth/modules/ikiwiki/templates/ikiwiki_delete.html index 19f00e291..ce7135096 100644 --- a/plinth/modules/ikiwiki/templates/ikiwiki_delete.html +++ b/plinth/modules/ikiwiki/templates/ikiwiki_delete.html @@ -25,14 +25,15 @@

{% blocktrans trimmed %} - Delete Wiki/Blog {{ name }} + Delete Wiki or Blog {{ name }} {% endblocktrans %}

{% blocktrans trimmed %} This action will remove all the posts, pages and comments - including revision history. Delete this wiki/blog permanently? + including revision history. Delete this wiki or blog + permanently? {% endblocktrans %}

diff --git a/plinth/modules/ikiwiki/views.py b/plinth/modules/ikiwiki/views.py index b8e2d6750..37bfaf5c3 100644 --- a/plinth/modules/ikiwiki/views.py +++ b/plinth/modules/ikiwiki/views.py @@ -41,7 +41,7 @@ subsubmenu = [{'url': reverse_lazy('ikiwiki:index'), def on_install(): - """Enable Ikiwiki on install.""" + """Enable ikiwiki on install.""" actions.superuser_run('ikiwiki', ['setup']) ikiwiki.service.notify_enabled(None, True) @@ -70,7 +70,7 @@ def index(request): form = IkiwikiForm(initial=status, prefix='ikiwiki') return TemplateResponse(request, 'ikiwiki.html', - {'title': _('Wiki & Blog'), + {'title': _('Wiki and Blog'), 'status': status, 'form': form, 'subsubmenu': subsubmenu}) @@ -129,7 +129,7 @@ def create(request): form = IkiwikiCreateForm(prefix='ikiwiki') return TemplateResponse(request, 'ikiwiki_create.html', - {'title': _('Create Wiki/Blog'), + {'title': _('Create Wiki or Blog'), 'form': form, 'subsubmenu': subsubmenu}) @@ -179,6 +179,6 @@ def delete(request, name): return redirect(reverse_lazy('ikiwiki:manage')) return TemplateResponse(request, 'ikiwiki_delete.html', - {'title': _('Delete Wiki/Blog'), + {'title': _('Delete Wiki or Blog'), 'subsubmenu': subsubmenu, 'name': name}) diff --git a/plinth/modules/letsencrypt/templates/letsencrypt.html b/plinth/modules/letsencrypt/templates/letsencrypt.html index ba92f871d..15043bdf2 100644 --- a/plinth/modules/letsencrypt/templates/letsencrypt.html +++ b/plinth/modules/letsencrypt/templates/letsencrypt.html @@ -38,7 +38,7 @@

{% trans "Certificates (Let's Encrypt)" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} A digital certficate allows users of a web service to verify the identity of the service and to securely communicate with it. {{ box_name }} can automatically obtain and setup digital diff --git a/plinth/modules/networks/templates/connection_show.html b/plinth/modules/networks/templates/connection_show.html index 476f6fe3b..750f8dee9 100644 --- a/plinth/modules/networks/templates/connection_show.html +++ b/plinth/modules/networks/templates/connection_show.html @@ -317,10 +317,10 @@

{% blocktrans trimmed %} - This interface is not maintained by FreedomBox. Its - security status is unknown to FreedomBox. Many FreedomBox + This interface is not maintained by {{ box_name }}. Its + security status is unknown to {{ box_name }}. Many {{ box_name }} services may not be available on this interface. It is - recommended that you deactivate/delete this connection and + recommended that you deactivate or delete this connection and re-configure it. {% endblocktrans %}
diff --git a/plinth/modules/networks/templates/connections_diagram.html b/plinth/modules/networks/templates/connections_diagram.html index 37e3baf70..9221daaea 100644 --- a/plinth/modules/networks/templates/connections_diagram.html +++ b/plinth/modules/networks/templates/connections_diagram.html @@ -94,7 +94,7 @@
{{ cfg.box_name }} + class="col-image network-entity" alt="{{ box_name }}"/>
{% trans "Virtual Private Network (OpenVPN)" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Virtual Private Network (VPN) is a technique for securely - connecting two machines in order to access resources of a + connecting two devices in order to access resources of a private network. While you are away from home, you can connect to your {{ box_name }} in order to join your home network and access private/internal services provided by {{ box_name }}. @@ -51,19 +51,19 @@

{% trans "Profile" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} To connect to {{ box_name }}'s VPN, you need to download a profile and feed it to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are available for most platforms. See documentation on + title="{{ box_name }} Manual - OpenVPN">documentation on recommended clients and instructions on how to configure them. {% endblocktrans %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Profile is specific to each user of {{ box_name }}. Keep it a secret. {% endblocktrans %} @@ -82,7 +82,7 @@ {% if not status.is_setup and not status.setup_running %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} OpenVPN has not yet been setup. Performing a secure setup takes a very long time. Depending on how fast your {{ box_name }} is, it may even take hours. If the setup @@ -105,7 +105,7 @@

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} To perform a secure setup, this process takes a very long time. Depending on how fast your {{ box_name }} is, it may even take hours. If the setup is interrupted, you may start diff --git a/plinth/modules/pagekite/templates/pagekite_introduction.html b/plinth/modules/pagekite/templates/pagekite_introduction.html index 73f711b36..92682064d 100644 --- a/plinth/modules/pagekite/templates/pagekite_introduction.html +++ b/plinth/modules/pagekite/templates/pagekite_introduction.html @@ -23,7 +23,7 @@ {% block content %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} PageKite is a system for exposing {{ box_name }} services when you don't have a direct connection to the Internet. You only need this if your {{ box_name }} services are unreachable from @@ -34,13 +34,13 @@

  • - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} {{ box_name }} is behind a restricted firewall. {% endblocktrans %}
  • - {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} {{ box_name }} is connected to a (wireless) router which you don't control. {% endblocktrans %} @@ -64,7 +64,7 @@

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} PageKite works around NAT, firewalls and IP-address limitations by using a combination of tunnels and reverse proxies. You can use any pagekite service provider, for example diff --git a/plinth/modules/privoxy/templates/privoxy.html b/plinth/modules/privoxy/templates/privoxy.html index 3bb04cd75..4a4f82c00 100644 --- a/plinth/modules/privoxy/templates/privoxy.html +++ b/plinth/modules/privoxy/templates/privoxy.html @@ -35,7 +35,7 @@

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} You can use Privoxy by modifying your browser proxy settings to your {{ box_name }} hostname (or IP address) with port 8118. While using Privoxy, you can see its configuration details and diff --git a/plinth/modules/quassel/templates/quassel.html b/plinth/modules/quassel/templates/quassel.html index 286f01065..c2f47ce0c 100644 --- a/plinth/modules/quassel/templates/quassel.html +++ b/plinth/modules/quassel/templates/quassel.html @@ -26,7 +26,7 @@

{% trans "IRC Client (Quassel)" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Quassel is an IRC application that is split into two parts, a "core" and a "client". This allows the core to remain connected to IRC servers, and to continue receiving messages, even when diff --git a/plinth/modules/restore/templates/restore_index.html b/plinth/modules/restore/templates/restore_index.html index 28369dbd1..8c9402ba7 100644 --- a/plinth/modules/restore/templates/restore_index.html +++ b/plinth/modules/restore/templates/restore_index.html @@ -31,7 +31,7 @@ web applications. The idea is to uncouple web applications from data. No matter where a web application is served from, the data can be stored on an unhosted storage server of user's - choice. With reStore, your {{ cfg.box_name }} becomes your + choice. With reStore, your {{ box_name }} becomes your unhosted storage server. {% endblocktrans %}

diff --git a/plinth/modules/system/templates/system.html b/plinth/modules/system/templates/system.html index e3cc68759..e8c2a46f3 100644 --- a/plinth/modules/system/templates/system.html +++ b/plinth/modules/system/templates/system.html @@ -25,14 +25,14 @@

{% trans "System Configuration" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Here you can administrate the underlying system of your {{ box_name }}. {% endblocktrans %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} The options affect the {{ box_name }} at its most general level, so be careful! {% endblocktrans %} diff --git a/plinth/modules/tor/templates/tor.html b/plinth/modules/tor/templates/tor.html index a48d42011..4d4ebbd31 100644 --- a/plinth/modules/tor/templates/tor.html +++ b/plinth/modules/tor/templates/tor.html @@ -85,7 +85,7 @@

{% trans "Bridge" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} Your {{ box_name }} is configured as a Tor bridge with obfsproxy, so it can help circumvent censorship. If your {{ box_name }} is behind a router or firewall, you should make sure the following @@ -117,7 +117,7 @@

{% trans "SOCKS" %}

- {% blocktrans trimmed with box_name=cfg.box_name %} + {% blocktrans trimmed %} A Tor SOCKS port is available on your {{ box_name }} on TCP port 9050. {% endblocktrans %} diff --git a/plinth/modules/tor/tor.py b/plinth/modules/tor/tor.py index ae80da907..cb93235b4 100644 --- a/plinth/modules/tor/tor.py +++ b/plinth/modules/tor/tor.py @@ -34,6 +34,7 @@ from plinth import package from plinth.errors import ActionError from plinth.modules.names import SERVICES from plinth.signals import domain_added, domain_removed +from plinth.utils import format_lazy APT_SOURCES_URI_PATHS = ('/files/etc/apt/sources.list/*/uri', '/files/etc/apt/sources.list.d/*/*/uri') @@ -48,9 +49,10 @@ class TorForm(forms.Form): # pylint: disable=W0232 hs_enabled = forms.BooleanField( label=_('Enable Tor Hidden Service'), required=False, - help_text=_('A hidden service will allow FreedomBox to provide ' - 'selected services (such as ownCloud or Chat) without ' - 'revealing its location.')) + help_text=format_lazy(_( + 'A hidden service will allow {box_name} to provide selected ' + 'services (such as ownCloud or chat) without revealing its ' + 'location.'), box_name=_(cfg.box_name))) apt_transport_tor_enabled = forms.BooleanField( label=_('Download software packages over Tor'), required=False, diff --git a/plinth/service.py b/plinth/service.py index ec3d28678..3a087ca32 100644 --- a/plinth/service.py +++ b/plinth/service.py @@ -19,12 +19,12 @@ Framework for working with servers and their services. """ +import collections from django.utils.translation import ugettext_lazy as _ -import collections - +from plinth import cfg from plinth.signals import service_enabled - +from plinth.utils import format_lazy services = {} @@ -75,5 +75,7 @@ def init(): is_external=True, enabled=True) Service('ssh', _('Secure Shell (SSH) Server'), ['ssh'], is_external=True, enabled=True) - Service('plinth', _('FreedomBox Web Interface (Plinth)'), ['https'], - is_external=True, enabled=True) + Service('plinth', + format_lazy(_('{box_name} Web Interface (Plinth)'), + box_name=_(cfg.box_name)), + ['https'], is_external=True, enabled=True) diff --git a/plinth/templates/base.html b/plinth/templates/base.html index 95060ef6a..d3f76308d 100644 --- a/plinth/templates/base.html +++ b/plinth/templates/base.html @@ -46,10 +46,12 @@ + content="{% blocktrans trimmed %} + Plinth administrative interface for the {{ box_name }} + {% endblocktrans %}" /> {% block title %} - {% if title %} {{ title }} {% else %} {% trans "FreedomBox" %} {% endif %} + {% if title %} {{ title }} {% else %} {{ box_name }} {% endif %} {% endblock %} @@ -86,7 +88,7 @@ {% block mainmenu_left %} {{ cfg.box_name }} + alt="{{ box_name }}" /> diff --git a/plinth/tests/test_context_processors.py b/plinth/tests/test_context_processors.py index bf627ff54..f92296b59 100644 --- a/plinth/tests/test_context_processors.py +++ b/plinth/tests/test_context_processors.py @@ -42,6 +42,8 @@ class ContextProcessorsTestCase(TestCase): self.assertIsNotNone(config) self.assertEqual('FreedomBox', config.box_name) + self.assertEqual('FreedomBox', response['box_name']) + submenu = response['submenu'] self.assertIsNone(submenu) diff --git a/plinth/utils.py b/plinth/utils.py index edb76adc1..a8995332b 100644 --- a/plinth/utils.py +++ b/plinth/utils.py @@ -20,6 +20,7 @@ Miscelleneous utility method. """ import importlib +from django.utils.functional import lazy def import_from_gi(library, version): @@ -34,3 +35,12 @@ def import_from_gi(library, version): package.require_version(library, version) return importlib.import_module(package_name + '.repository.' + library) + + +def _format_lazy(string, *args, **kwargs): + """Lazily format a lazy string.""" + string = str(string) + return string.format(*args, **kwargs) + + +format_lazy = lazy(_format_lazy, str)