From cb7e85a49d3eb32ba0be9fa6dd60446a5fc1818d Mon Sep 17 00:00:00 2001
From: ultrapeer
+ {% blocktrans trimmed with box_name=cfg.box_name %}
+ With Monkeysphere, a PGP key can be generated for each domain
+ serving SSH on this {{ box_name }}. The PGP public key can then be
+ uploaded to the PGP keyservers. Users connecting to this {{ box_name }}
+ through SSH can verify that they are connecting to the correct
+ host. See the
+
+ Monkeysphere SSH documentation for more details.
+ {% endblocktrans %}
+
+
+ {% trans "Publishing key to keyserver..." %}
+
+ imap.example.com. For IMAP over SSL (recommended), fill the "
"server field like imaps://imap.example.com."
msgstr ""
-"Vous pouvez accéder à RoundCube depuis /roundcube"
-"a>. Rensigner le nom d'utilisateur et le mot de passe de votre compte de "
+"Vous pouvez accéder à RoundCube depuis /roundcube"
+". Renseigner le nom d'utilisateur et le mot de passe de votre compte de "
"courrier électronique auquel vous souhaitez accéder, suivis du nom de "
-"domaine du serveur IMAP de votre fournisseur d'email, comme imap."
-"example.com. Pour de l'IMAP sur du SSL (recommandé), remplissez les "
-"champs du serveur avec par exemple imaps://imap.example.com."
+"domaine du serveur IMAP de votre fournisseur d'email, comme "
+"imap.example.com. Pour de l'IMAP sur du SSL (recommandé), "
+"remplissez les champs du serveur avec par exemple "
+"imaps://imap.example.com."
#: plinth/modules/roundcube/templates/roundcube.html:50
msgid ""
@@ -2438,7 +2439,7 @@ msgstr ""
#: plinth/modules/tor/__init__.py:50
msgid "Tor relay port available"
-msgstr "Port du relai Tor disponible"
+msgstr "Port du relais Tor disponible"
#: plinth/modules/tor/__init__.py:58
msgid "Obfs3 transport registered"
@@ -2672,7 +2673,7 @@ msgid ""
"When enabled, the unattended-upgrades program will be run once per day. It "
"will attempt to perform any package upgrades that are available."
msgstr ""
-"Lorsqu'activé, le programme unattended-upgrades sera mis en oeuvre une fois "
+"Lorsqu'activé, le programme unattended-upgrades sera mis en œuvre une fois "
"par jour. Il essayera de réaliser l'ensemble des mises à niveau disponibles."
#: plinth/modules/upgrades/templates/upgrades.html:40
@@ -2780,7 +2781,7 @@ msgstr ""
#: plinth/modules/users/forms.py:80
#, python-brace-format
msgid "Failed to add new user to {group} group."
-msgstr "Echec de l'ajout d'un nouvel utilisateur au groupe {group}."
+msgstr "Échec de l'ajout d'un nouvel utilisateur au groupe {group}."
#: plinth/modules/users/forms.py:126
msgid "Renaming LDAP user failed."
@@ -2883,7 +2884,7 @@ msgstr "Changer Mot de Passe"
#: plinth/modules/users/views.py:130
msgid "Password changed successfully."
-msgstr "Mot de passe changé avec succés."
+msgstr "Mot de passe changé avec succès."
#: plinth/modules/xmpp/__init__.py:41 plinth/modules/xmpp/__init__.py:46
#: plinth/modules/xmpp/templates/xmpp.html:26 plinth/modules/xmpp/views.py:75
From 70d85cbd6fdb669bd1a0937b43b54fec296ef104 Mon Sep 17 00:00:00 2001
From: James Valleroy {% trans "Monkeysphere" %}
+
+
|
+ {{ name_service.type }} + {{ name_service.name }} + |
+ + {% if name_service.key %} + {{ name_service.key.pgp_fingerprint }} + {% else %} + {% trans "Not Available" %} + {% endif %} + | ++ {% if name_service.available %} + {% if not name_service.key %} + + + {% elif not running %} + + {% endif %} + {% endif %} + | +
- {% blocktrans trimmed with box_name=cfg.box_name %} - With Monkeysphere, a PGP key can be generated for each domain - serving SSH on this {{ box_name }}. The PGP public key can then be - uploaded to the PGP keyservers. Users connecting to this {{ box_name }} - through SSH can verify that they are connecting to the correct - host. See the - - Monkeysphere SSH documentation for more details. - {% endblocktrans %} -
- -{% if running %} -- - {% trans "Publishing key to keyserver..." %} - -
++ {% blocktrans trimmed %} + 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. + {% endblocktrans %}
-{% endif %} -|
- {{ name_service.type }} - {{ name_service.name }} - |
- - {% if name_service.key %} - {{ name_service.key.pgp_fingerprint }} - {% else %} - {% trans "Not Available" %} - {% endif %} - | -- {% if name_service.available %} - {% if not name_service.key %} - - - {% elif not running %} - + + {% endif %} - - - {% endif %} - {% endif %} - | -
| {% trans "Domain" %} | +{% trans "GPG Fingerprint" %} | +{% trans "Actions" %} | +
|---|---|---|
| {{ domain.name }} | ++ {% if domain.key %} + {{ domain.key.pgp_fingerprint }} + {% else %} + {% trans "Not Available" %} + {% endif %} + | ++ {% if not domain.key %} + + {% elif not running %} + + {% endif %} + | +
+ {% blocktrans trimmed with box_name=cfg.box_name %} + 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 + 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). + {% endblocktrans %} +
+ ++ {% blocktrans trimmed %} + 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. + {% endblocktrans %} +
+ +| {% trans "Domain" %} | +{% trans "Certificate Status" %} | +{% trans "Website Security" %} | +{% trans "Actions" %} | +
|---|---|---|---|
| {{ domain }} | ++ {% if domain_status.certificate_available %} + + {% blocktrans trimmed with expiry_date=domain_status.expiry_date %} + Expires on {{ expiry_date }} + {% endblocktrans %} + + {% else %} + + {% trans "No certficate" %} + + {% endif %} + | ++ {% if domain_status.web_enabled %} + {% trans "Enabled" %} + {% else %} + {% trans "Disabled" %} + {% endif %} + | ++ {% if domain_status.certificate_available %} + + + {% else %} + + {% endif %} + | +
imap.example.com. For IMAP over SSL (recommended), fill the "
+"server field like imaps://imap.example.com."
+msgstr ""
+
+#: plinth/modules/roundcube/templates/roundcube.html:50
+msgid ""
+"For Gmail, username will be your Gmail address, password will be your Google "
+"account password and server will be imaps://imap.gmail.com. "
+"Note that you will also need to enable \"Less secure apps\" in your Google "
+"account settings (https://www.google.com/settings/security/lesssecureapps"
+"a>)."
+msgstr ""
+
+#: plinth/modules/shaarli/__init__.py:37
+#: plinth/modules/shaarli/templates/shaarli.html:26
+#: plinth/modules/shaarli/views.py:52
+msgid "Bookmarks (Shaarli)"
+msgstr ""
+
+#: plinth/modules/shaarli/__init__.py:42
+msgid "Shaarli"
+msgstr ""
+
+#: plinth/modules/shaarli/forms.py:29
+msgid "Enable Shaarli"
+msgstr ""
+
+#: plinth/modules/shaarli/templates/shaarli.html:28
+msgid "Shaarli allows you to save and share bookmarks."
+msgstr ""
+
+#: plinth/modules/shaarli/templates/shaarli.html:31
+msgid ""
+"When enabled, Shaarli will be available from /shaarli"
+"a> path on the web server. Note that Shaarli only supports a single user "
+"account, which you will need to setup on the initial visit."
+msgstr ""
+
+#: plinth/modules/system/system.py:26
+msgid "System"
+msgstr ""
+
+#: plinth/modules/system/system.py:33
+#: plinth/modules/system/templates/system.html:25
+#: plinth/templates/base.html:107
+msgid "System Configuration"
+msgstr ""
+
+#: plinth/modules/system/templates/system.html:28
+#, python-format
+msgid "Here you can administrate the underlying system of your %(box_name)s."
+msgstr ""
+
+#: plinth/modules/system/templates/system.html:35
+#, python-format
+msgid ""
+"The options affect the %(box_name)s at its most general level, so be careful!"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:50
+msgid "Tor relay port available"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:58
+msgid "Obfs3 transport registered"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:64
+msgid "Obfs4 transport registered"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:101
+#, python-brace-format
+msgid "Access URL {url} on tcp{kind} via Tor"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:112
+#, python-brace-format
+msgid "Confirm Tor usage at {url} on tcp{kind}"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66
+msgid "Anonymity Network (Tor)"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:29
+msgid ""
+"Tor is an anonymous communication system. You can learn more about it from "
+"the Tor Project website. For "
+"best protection when web surfing, the Tor Project recommends that you use "
+"the "
+"Tor Browser."
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:44
+msgid "Tor is running"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:47
+msgid "Tor is not running"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:59
+msgid "Hidden Service"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:60
+#: plinth/modules/tor/templates/tor.html:102
+msgid "Port"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:85
+msgid "Bridge"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:88
+#, python-format
+msgid ""
+"Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can "
+"help circumvent censorship. If your %(box_name)s is behind a router or "
+"firewall, you should make sure the following ports are open, and port-"
+"forwarded, if necessary:"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:101
+msgid "Service"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:117
+msgid "SOCKS"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:120
+#, python-format
+msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
+msgstr ""
+
+#: plinth/modules/tor/tor.py:46
+msgid "Enable Tor"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:49
+msgid "Enable Tor Hidden Service"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:51
+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"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:57
+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
+msgid "Tor Hidden Service"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:115
+msgid "Tor Control Panel"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:240
+#, python-brace-format
+msgid "Action error: {0} [{1}] [{2}]"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:256
+msgid "Tor enabled"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:259
+msgid "Tor disabled"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:264
+msgid "Tor hidden service enabled"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:267
+msgid "Tor hidden service disabled"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:292
+msgid "Enabled package download over Tor"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:295
+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:67
+msgid "BitTorrent (Transmission)"
+msgstr ""
+
+#: plinth/modules/transmission/__init__.py:43
+msgid "Transmission BitTorrent"
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:29
+msgid "Enable Transmission daemon"
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:33
+msgid "Download directory"
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:34
+msgid ""
+"Directory where downloads are saved. If you change the default directory, "
+"ensure that the new directory exists and is writable by \"debian-transmission"
+"\" user."
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:40
+msgid "Username to login to the web interface."
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:44
+msgid ""
+"Password to login to the web interface. Current password is shown in a "
+"hashed format. To set a new password, enter the password in plain text."
+msgstr ""
+
+#: plinth/modules/transmission/templates/transmission.html:29
+msgid ""
+"BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon "
+"handles Bitorrent file sharing. Note that BitTorrent is not anonymous."
+msgstr ""
+
+#: plinth/modules/transmission/templates/transmission.html:37
+msgid ""
+"Access the web interface at /transmission."
+msgstr ""
+
+#: plinth/modules/transmission/templates/transmission.html:47
+msgid "Transmission daemon is running"
+msgstr ""
+
+#: plinth/modules/transmission/templates/transmission.html:50
+msgid "Transmission daemon is not running."
+msgstr ""
+
+#: plinth/modules/upgrades/__init__.py:33
+msgid "Software Upgrades"
+msgstr ""
+
+#: plinth/modules/upgrades/forms.py:29
+msgid "Enable automatic upgrades"
+msgstr ""
+
+#: plinth/modules/upgrades/forms.py:30
+msgid ""
+"When enabled, the unattended-upgrades program will be run once per day. It "
+"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
+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 ""
+
+#: plinth/modules/upgrades/templates/upgrades.html:80
+msgid "Upgrade now »"
+msgstr ""
+
+#: plinth/modules/upgrades/templates/upgrades.html:87
+msgid "System is being upgraded."
+msgstr ""
+
+#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64
+msgid "Automatic Upgrades"
+msgstr ""
+
+#: plinth/modules/upgrades/views.py:37
+msgid "Upgrade Packages"
+msgstr ""
+
+#: plinth/modules/upgrades/views.py:75
+msgid "Package Upgrades"
+msgstr ""
+
+#: plinth/modules/upgrades/views.py:116
+#, python-brace-format
+msgid "Error when configuring unattended-upgrades: {error}"
+msgstr ""
+
+#: plinth/modules/upgrades/views.py:121
+msgid "Automatic upgrades enabled"
+msgstr ""
+
+#: plinth/modules/upgrades/views.py:123
+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 ""
+
+#: plinth/modules/users/__init__.py:65
+#, python-brace-format
+msgid "Check LDAP entry \"{search_item}\""
+msgstr ""
+
+#: plinth/modules/users/forms.py:28
+msgid "admin"
+msgstr ""
+
+#: plinth/modules/users/forms.py:29
+msgid "wiki"
+msgstr ""
+
+#: plinth/modules/users/forms.py:41
+msgid "Groups"
+msgstr ""
+
+#: plinth/modules/users/forms.py:45
+msgid ""
+"Select which services should be available to the new user. The user will be "
+"able to log in to services that support single sign-on through LDAP, if they "
+"are in the appropriate group.+ {% blocktrans trimmed %} + Something about snapper + {% endblocktrans %} +
+ ++ {% if status.is_running %} + + {% trans "Snapper is running" %} + {% else %} + + {% trans "Snapper is not running" %} + {% endif %} +
+ {% include "diagnostics_button.html" with module="datetime" %} + ++ Something about backups + {% for backup in backups %} +
{{ backup.number }}:{{ backup.date }}
+ {% endfor %} + + {% endblock %} diff --git a/plinth/modules/snapper/views.py b/plinth/modules/snapper/views.py index d30af23e1..828213ffa 100644 --- a/plinth/modules/snapper/views.py +++ b/plinth/modules/snapper/views.py @@ -23,6 +23,7 @@ from django.template.response import TemplateResponse from django.utils.translation import ugettext as _ import logging +import subprocess from .forms import SnapperForm from plinth import actions @@ -41,6 +42,7 @@ def on_install(): def index(request): """Serve configuration page.""" status = get_status() + backups = get_backups() form = None @@ -57,15 +59,26 @@ def index(request): return TemplateResponse(request, 'snapper.html', {'title': _('Backup Freedombox'), 'status': status, + 'backups': backups, 'form': form}) def get_status(): """Get the current settings from server.""" return {'enabled': snapper.is_enabled(), - 'is_running': snapper.is_running(), - 'time_zone': get_current_time_zone()} + 'is_running': snapper.is_running()} +def get_backups(): + """Get the list of backups from snapper.""" + snapshots = [] + + output = subprocess.check_output(['snapper', '-q', '--iso', 'ls', '-t', 'single']) + for line in output.decode().splitlines(): + parts = line.split('|') + if not parts[0].startswith('-') and not parts[0].startswith('#'): + snapshots.append({'number': parts[0], 'date': parts[1]}) + + return snapshots def get_current_time_zone(): """Get current time zone.""" From afb00f98ab1af578d7b2747acd9569739dd0b14a Mon Sep 17 00:00:00 2001 From: Sunil Mohan Adapa- {% trans "There was an error while upgrading." %} -
- -{{ result.error }}
- {% if result.output %}
- {{ result.output }}
- {% endif %}
- {% else %}
- - {% trans "The operating system is up to date now. " %} - -
- -{{ result.output }}
- - {% blocktrans trimmed %} - 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. - {% endblocktrans %} -
- - {% endif %} - {% if running %} + {% if is_busy %}- {% trans "System is being upgraded." %} + {% trans "A package manager is running." %}
{% endif %} + {% if log %} +{{ log }}
+ {% endif %}
+
{% endblock %}
{% block page_js %}
diff --git a/plinth/modules/upgrades/urls.py b/plinth/modules/upgrades/urls.py
index 5ff9f8788..9457c17dc 100644
--- a/plinth/modules/upgrades/urls.py
+++ b/plinth/modules/upgrades/urls.py
@@ -27,5 +27,4 @@
urlpatterns = [
url(r'^sys/upgrades/$', views.index, name='index'),
url(r'^sys/upgrades/upgrade/$', views.upgrade, name='upgrade'),
- url(r'^sys/upgrades/upgrade/run/$', views.run, name='run'),
]
diff --git a/plinth/modules/upgrades/views.py b/plinth/modules/upgrades/views.py
index 6e83faf8c..d08d6f291 100644
--- a/plinth/modules/upgrades/views.py
+++ b/plinth/modules/upgrades/views.py
@@ -25,6 +25,7 @@
from django.template.response import TemplateResponse
from django.utils.translation import ugettext as _, ugettext_lazy
from django.views.decorators.http import require_POST
+import subprocess
from .forms import ConfigureForm
from plinth import actions
@@ -36,7 +37,8 @@
{'url': reverse_lazy('upgrades:upgrade'),
'text': ugettext_lazy('Upgrade Packages')}]
-upgrade_process = None
+LOG_FILE = '/var/log/unattended-upgrades/unattended-upgrades.log'
+LOCK_FILE = '/var/log/dpkg/lock'
def on_install():
@@ -65,29 +67,42 @@ def index(request):
'form': form,
'subsubmenu': subsubmenu})
+def is_package_manager_busy():
+ """Return whether a package manager is running."""
+ try:
+ subprocess.check_output(['lsof', '/var/lib/dpkg/lock'])
+ return True
+ except subprocess.CalledProcessError:
+ return False
+
+
+def get_log():
+ """Return the current log for unattended upgrades."""
+ try:
+ with open(LOG_FILE, 'r') as file_handle:
+ return file_handle.read()
+ except IOError:
+ return None
+
@package.required(['unattended-upgrades'], on_install=on_install)
def upgrade(request):
"""Serve the upgrade page."""
- result = _collect_upgrade_result(request)
+ is_busy = is_package_manager_busy()
+
+ if request.method == 'POST':
+ try:
+ actions.superuser_run('upgrades', ['run'])
+ messages.success(request, _('Upgrade process started.'))
+ is_busy = True
+ except ActionError:
+ messages.error(request, _('Starting upgrade failed.'))
return TemplateResponse(request, 'upgrades.html',
{'title': _('Package Upgrades'),
'subsubmenu': subsubmenu,
- 'running': bool(upgrade_process),
- 'result': result})
-
-
-@require_POST
-@package.required(['unattended-upgrades'], on_install=on_install)
-def run(_):
- """Start the upgrade process."""
- global upgrade_process
- if not upgrade_process:
- upgrade_process = actions.superuser_run(
- 'upgrades', ['run'], async=True)
-
- return redirect('upgrades:upgrade')
+ 'is_busy': is_busy,
+ 'log': get_log()})
def get_status():
@@ -121,30 +136,3 @@ def _apply_changes(request, old_status, new_status):
messages.success(request, _('Automatic upgrades enabled'))
else:
messages.success(request, _('Automatic upgrades disabled'))
-
-
-def _collect_upgrade_result(request):
- """Handle upgrade process completion."""
- global upgrade_process
- if not upgrade_process:
- return
-
- return_code = upgrade_process.poll()
-
- # Upgrade process is not complete yet
- if return_code is None:
- return
-
- output, error = upgrade_process.communicate()
- output, error = output.decode(), error.decode()
-
- if not return_code:
- messages.success(request, _('Upgrade completed.'))
- else:
- messages.error(request, _('Upgrade failed.'))
-
- upgrade_process = None
-
- return {'return_code': return_code,
- 'output': output,
- 'error': error}
From cda3863d1bdfde3772ef8375c754b65f34815f0f Mon Sep 17 00:00:00 2001
From: Caly - {% 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/firewall/templates/firewall.html b/plinth/modules/firewall/templates/firewall.html index d391f9708..6646ac642 100644 --- a/plinth/modules/firewall/templates/firewall.html +++ b/plinth/modules/firewall/templates/firewall.html @@ -25,9 +25,9 @@
- {% 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 enabled and properly configured reduces risk of security threat from the Internet. {% endblocktrans %} @@ -38,7 +38,7 @@
- {% 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 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 %}
+ 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..213ff09f2 100644 --- a/plinth/modules/first_boot/templates/firstboot_state10.html +++ b/plinth/modules/first_boot/templates/firstboot_state10.html @@ -29,7 +29,7 @@
- {% 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. 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 @@
- {% 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/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 @@
- {% 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 private network. While you are away from home, you can connect @@ -51,7 +51,7 @@
- {% 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 @@ -63,7 +63,7 @@
- {% 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 @@
- {% 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 %} 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 @@
- {% 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 @@
- {% 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 @@
- {% 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 @@
- {% 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/templates/base.html b/plinth/templates/base.html
index 95060ef6a..d34fd28e1 100644
--- a/plinth/templates/base.html
+++ b/plinth/templates/base.html
@@ -86,7 +86,7 @@
{% block mainmenu_left %}
From 572e68dc36d8f73eb8a45cbff3569ffbec8a543b Mon Sep 17 00:00:00 2001
From: Sunil Mohan Adapa {% trans "DynamicDNS client" %}
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 %}
{% 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/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..83e44eeaf 100644 --- a/plinth/modules/help/templates/help_about.html +++ b/plinth/modules/help/templates/help_about.html @@ -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 @@
- {% 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/networks/templates/connection_show.html b/plinth/modules/networks/templates/connection_show.html index 476f6fe3b..9ef544235 100644 --- a/plinth/modules/networks/templates/connection_show.html +++ b/plinth/modules/networks/templates/connection_show.html @@ -317,8 +317,8 @@
{% 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.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 @@ 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 aa8e4b1af..5ad1ec90b 100644 --- a/plinth/modules/dynamicdns/templates/dynamicdns.html +++ b/plinth/modules/dynamicdns/templates/dynamicdns.html @@ -22,7 +22,7 @@ {% block content %} -
{% blocktrans trimmed %} @@ -41,7 +41,7 @@
- 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' %} @@ -102,8 +102,8 @@{% 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/templates/help_about.html b/plinth/modules/help/templates/help_about.html index 83e44eeaf..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 %}
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 @@ 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 @@ 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 %} 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 @@ 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/networks/templates/connection_show.html b/plinth/modules/networks/templates/connection_show.html index 9ef544235..750f8dee9 100644 --- a/plinth/modules/networks/templates/connection_show.html +++ b/plinth/modules/networks/templates/connection_show.html @@ -320,7 +320,7 @@
{% 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 }}.
diff --git a/plinth/modules/tor/tor.py b/plinth/modules/tor/tor.py
index d4f430284..cb93235b4 100644
--- a/plinth/modules/tor/tor.py
+++ b/plinth/modules/tor/tor.py
@@ -51,7 +51,7 @@ class TorForm(forms.Form): # pylint: disable=W0232
required=False,
help_text=format_lazy(_(
'A hidden service will allow {box_name} to provide selected '
- 'services (such as ownCloud or Chat) without revealing its '
+ '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'),
From d32bfa1dd6f5d877714bb283d372c2efeef2f03c Mon Sep 17 00:00:00 2001
From: Sunil Mohan Adapa
{% blocktrans trimmed %}
- Something about snapper
+ Snapper creates 'snapshots' or backups of the FreedomBox filesystem on an hourly basis. It enables the option to revert to an earlier configuration. Snapper is not essential.
{% endblocktrans %}
- Something about backups
+ {% if not backups %}
+ Backups will be available here once created.
+ {% endif %}
+ {% if backups %}
+ {{ backup.number }}:{{ backup.date }} {% trans "Snapper" %}
{% trans "Configuration" %}
{% trans "Backups" %}
-
+
+
+{% trans "Backup number" %}
+ {% trans "Date" %}
+ {% trans "Restore" %}
+
+
{% for backup in backups %}
-
+
{% endfor %}
+
+
+
+
+
+
+
+
+ {% blocktrans trimmed %} + Repro is a SIP proxy service that a SIP softphone can connect to. Before + using Repro, the domain and users will need to be configured using the + web-based configuration panel, available at + /repro/domains.html. Users in the + admin group will be able to log in to the Repro configuration panel. + {% endblocktrans %} +
+ ++ {% blocktrans trimmed %} + Note: After setting the domain, it is required to restart the Repro + service. Disable the service using the checkbox and Update setup button + below. Then, re-enable the service. + {% endblocktrans %} +
+ ++ {% blocktrans trimmed %} + To make SIP calls, a client application is needed. Available clients include + Jitsi (for computers) and + + CSipSimple (for Android phones). + {% endblocktrans %} +
+ ++ {% if status.is_running %} + + {% trans "Repro service is running" %} + {% else %} + + {% trans "Repro service is not running" %} + {% endif %} +
+ +{% include "diagnostics_button.html" with module="repro" %} + +- {% blocktrans trimmed %} - Repro is a SIP proxy service that a SIP softphone can connect to. Before - using Repro, the domain and users will need to be configured using the - web-based configuration panel, available at - /repro/domains.html. Users in the - admin group will be able to log in to the Repro configuration panel. - {% endblocktrans %} -
++ {% blocktrans trimmed %} + repro provides various SIP services that a SIP softphone can utilize to + provide audio and video calls as well as presence and instant messaging. + repro provides a server and SIP user accounts that clients can use to let + their presence known. It also acts as a proxy to federate SIP + communications to other servers on the Internet similar to email. + {% endblocktrans %} +
-- {% blocktrans trimmed %} - Note: After setting the domain, it is required to restart the Repro - service. Disable the service using the checkbox and Update setup button - below. Then, re-enable the service. - {% endblocktrans %} -
++ {% blocktrans trimmed %} + To make SIP calls, a client application is needed. Available clients + include Jitsi (for computers) and + + CSipSimple (for Android phones). + {% endblocktrans %} +
-- {% blocktrans trimmed %} - To make SIP calls, a client application is needed. Available clients include - Jitsi (for computers) and - - CSipSimple (for Android phones). - {% endblocktrans %} -
++ {% blocktrans trimmed %} + Note: Before using repro, domains and users will need + to be configured using the web-based + configuration panel. Users in the admin group will be able + to log in to the repro configuration panel. After setting the domain, it + is required to restart the repro service. Disable the service and + re-enable it. + {% endblocktrans %} +
-- {% if status.is_running %} - - {% trans "Repro service is running" %} - {% else %} - - {% trans "Repro service is not running" %} - {% endif %} -
++ {% if status.is_running %} + + {% trans "repro service is running" %} + {% else %} + + {% trans "repro service is not running" %} + {% endif %} +
-{% include "diagnostics_button.html" with module="repro" %} + {% include "diagnostics_button.html" with module="repro" %} -imap.example.com. For IMAP over SSL (recommended), fill the "
+"server field like imaps://imap.example.com."
+msgstr ""
+
+#: plinth/modules/roundcube/templates/roundcube.html:50
+msgid ""
+"For Gmail, username will be your Gmail address, password will be your Google "
+"account password and server will be imaps://imap.gmail.com. "
+"Note that you will also need to enable \"Less secure apps\" in your Google "
+"account settings (https://www.google.com/settings/security/lesssecureapps"
+"a>)."
+msgstr ""
+
+#: plinth/modules/shaarli/__init__.py:37
+#: plinth/modules/shaarli/templates/shaarli.html:26
+#: plinth/modules/shaarli/views.py:52
+msgid "Bookmarks (Shaarli)"
+msgstr ""
+
+#: plinth/modules/shaarli/__init__.py:42
+msgid "Shaarli"
+msgstr ""
+
+#: plinth/modules/shaarli/forms.py:29
+msgid "Enable Shaarli"
+msgstr ""
+
+#: plinth/modules/shaarli/templates/shaarli.html:28
+msgid "Shaarli allows you to save and share bookmarks."
+msgstr ""
+
+#: plinth/modules/shaarli/templates/shaarli.html:31
+msgid ""
+"When enabled, Shaarli will be available from /shaarli"
+"a> path on the web server. Note that Shaarli only supports a single user "
+"account, which you will need to setup on the initial visit."
+msgstr ""
+
+#: plinth/modules/system/system.py:26
+msgid "System"
+msgstr ""
+
+#: plinth/modules/system/system.py:33
+#: plinth/modules/system/templates/system.html:25
+#: plinth/templates/base.html:109
+msgid "System Configuration"
+msgstr ""
+
+#: plinth/modules/system/templates/system.html:28
+#, python-format
+msgid "Here you can administrate the underlying system of your %(box_name)s."
+msgstr ""
+
+#: plinth/modules/system/templates/system.html:35
+#, python-format
+msgid ""
+"The options affect the %(box_name)s at its most general level, so be careful!"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:50
+msgid "Tor relay port available"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:58
+msgid "Obfs3 transport registered"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:64
+msgid "Obfs4 transport registered"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:101
+#, python-brace-format
+msgid "Access URL {url} on tcp{kind} via Tor"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:112
+#, python-brace-format
+msgid "Confirm Tor usage at {url} on tcp{kind}"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:68
+msgid "Anonymity Network (Tor)"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:29
+msgid ""
+"Tor is an anonymous communication system. You can learn more about it from "
+"the Tor Project website. For "
+"best protection when web surfing, the Tor Project recommends that you use "
+"the "
+"Tor Browser."
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:44
+msgid "Tor is running"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:47
+msgid "Tor is not running"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:59
+msgid "Hidden Service"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:60
+#: plinth/modules/tor/templates/tor.html:102
+msgid "Port"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:85
+msgid "Bridge"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:88
+#, python-format
+msgid ""
+"Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can "
+"help circumvent censorship. If your %(box_name)s is behind a router or "
+"firewall, you should make sure the following ports are open, and port-"
+"forwarded, if necessary:"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:101
+msgid "Service"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:117
+msgid "SOCKS"
+msgstr ""
+
+#: plinth/modules/tor/templates/tor.html:120
+#, python-format
+msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
+msgstr ""
+
+#: plinth/modules/tor/tor.py:47
+msgid "Enable Tor"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:50
+msgid "Enable Tor Hidden Service"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:53
+#, python-brace-format
+msgid ""
+"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:87 plinth/modules/tor/tor.py:287
+msgid "Tor Hidden Service"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:117
+msgid "Tor Control Panel"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:242
+#, python-brace-format
+msgid "Action error: {0} [{1}] [{2}]"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:258
+msgid "Tor enabled"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:261
+msgid "Tor disabled"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:266
+msgid "Tor hidden service enabled"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:269
+msgid "Tor hidden service disabled"
+msgstr ""
+
+#: plinth/modules/tor/tor.py:294
+msgid "Enabled package download over Tor"
+msgstr ""
+
+#: 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:67
+msgid "BitTorrent (Transmission)"
+msgstr ""
+
+#: plinth/modules/transmission/__init__.py:43
+msgid "Transmission BitTorrent"
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:29
+msgid "Enable Transmission daemon"
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:33
+msgid "Download directory"
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:34
+msgid ""
+"Directory where downloads are saved. If you change the default directory, "
+"ensure that the new directory exists and is writable by \"debian-transmission"
+"\" user."
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:40
+msgid "Username to login to the web interface."
+msgstr ""
+
+#: plinth/modules/transmission/forms.py:44
+msgid ""
+"Password to login to the web interface. Current password is shown in a "
+"hashed format. To set a new password, enter the password in plain text."
+msgstr ""
+
+#: plinth/modules/transmission/templates/transmission.html:29
+msgid ""
+"BitTorrent is a peer-to-peer file sharing protocol. Transmission daemon "
+"handles Bitorrent file sharing. Note that BitTorrent is not anonymous."
+msgstr ""
+
+#: plinth/modules/transmission/templates/transmission.html:37
+msgid ""
+"Access the web interface at /transmission."
+msgstr ""
+
+#: plinth/modules/transmission/templates/transmission.html:47
+msgid "Transmission daemon is running"
+msgstr ""
+
+#: plinth/modules/transmission/templates/transmission.html:50
+msgid "Transmission daemon is not running."
+msgstr ""
+
+#: plinth/modules/upgrades/__init__.py:33
+msgid "Software Upgrades"
+msgstr ""
+
+#: plinth/modules/upgrades/forms.py:29
+msgid "Enable automatic upgrades"
+msgstr ""
+
+#: plinth/modules/upgrades/forms.py:30
+msgid ""
+"When enabled, the unattended-upgrades program will be run once per day. It "
+"will attempt to perform any package upgrades that are available."
+msgstr ""
+
+#: plinth/modules/upgrades/templates/upgrades.html:37
+msgid ""
+"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: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:65
+msgid "A package manager is running."
+msgstr ""
+
+#: 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:38
+msgid "Upgrade Packages"
+msgstr ""
+
+#: 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:131
+#, python-brace-format
+msgid "Error when configuring unattended-upgrades: {error}"
+msgstr ""
+
+#: plinth/modules/upgrades/views.py:136
+msgid "Automatic upgrades enabled"
+msgstr ""
+
+#: plinth/modules/upgrades/views.py:138
+msgid "Automatic upgrades disabled"
+msgstr ""
+
+#: plinth/modules/users/__init__.py:36
+msgid "Users and Groups"
+msgstr ""
+
+#: plinth/modules/users/__init__.py:65
+#, python-brace-format
+msgid "Check LDAP entry \"{search_item}\""
+msgstr ""
+
+#: plinth/modules/users/forms.py:28
+msgid "admin"
+msgstr ""
+
+#: plinth/modules/users/forms.py:29
+msgid "wiki"
+msgstr ""
+
+#: plinth/modules/users/forms.py:41
+msgid "Groups"
+msgstr ""
+
+#: plinth/modules/users/forms.py:45
+msgid ""
+"Select which services should be available to the new user. The user will be "
+"able to log in to services that support single sign-on through LDAP, if they "
+"are in the appropriate group.- {% if status.is_running %} + {% if config_running %} + +
- {% trans "Tor is running" %} - {% else %} - - {% trans "Tor is not running" %} + {% trans "Tor configuration is being updated" %} +
+ + {% else %} + ++ {% if status.is_running %} + + {% trans "Tor is running" %} + {% else %} + + {% trans "Tor is not running" %} + {% endif %} +
+ + {% include "diagnostics_button.html" with module="tor" %} + + {% if status.hs_enabled %} +| {% trans "Hidden Service" %} | +{% trans "Port" %} | +
|---|---|
| {{ status.hs_hostname }} | +{{ status.hs_ports }} | +
+ {% 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 + ports are open, and port-forwarded, if necessary: + {% endblocktrans %} +
- {% if status.hs_enabled %}| {% trans "Hidden Service" %} | +{% trans "Service" %} | {% trans "Port" %} |
|---|---|---|
| {{ status.hs_hostname }} | -{{ status.hs_ports }} | -|
| {{ name }} | +{{ port }} | +
- {% 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 - ports are open, and port-forwarded, if necessary: - {% endblocktrans %} -
- -| {% trans "Service" %} | -{% trans "Port" %} | -
|---|---|
| {{ name }} | -{{ port }} | -
- {% blocktrans trimmed %} - A Tor SOCKS port is available on your {{ box_name }} on TCP port - 9050. - {% endblocktrans %} -
+ {% endif %} {% endblock %} diff --git a/plinth/modules/tor/views.py b/plinth/modules/tor/views.py index 864634b4d..8977970a4 100644 --- a/plinth/modules/tor/views.py +++ b/plinth/modules/tor/views.py @@ -31,6 +31,8 @@ from plinth.modules.names import SERVICES from plinth.signals import domain_added, domain_removed +config_process = None + def on_install(): """Setup Tor configuration as soon as it is installed.""" @@ -48,6 +50,9 @@ def index(request): """Serve configuration page.""" status = tor.get_status() + if config_process: + _collect_config_result(request, status) + form = None if request.method == 'POST': @@ -63,6 +68,7 @@ def index(request): return TemplateResponse(request, 'tor.html', {'title': _('Tor Control Panel'), 'status': status, + 'config_running': bool(config_process), 'form': form}) @@ -95,25 +101,48 @@ def __apply_changes(request, old_status, new_status): arguments.extend(['--apt-transport-tor', arg_value]) if arguments: - actions.superuser_run('tor', ['configure'] + arguments) - tor.socks_service.notify_enabled(None, new_status['enabled']) - tor.bridge_service.notify_enabled(None, new_status['enabled']) - messages.success(request, _('Configuration updated')) + global config_process + if not config_process: + config_process = actions.superuser_run( + 'tor', ['configure'] + arguments, async=True) else: messages.info(request, _('Setting unchanged')) + +def _collect_config_result(request, status): + """Handle config process completion.""" + global config_process + if not config_process: + return + + return_code = config_process.poll() + + # Config process is not complete yet + if return_code == None: + return + + tor.socks_service.notify_enabled(None, status['enabled']) + tor.bridge_service.notify_enabled(None, status['enabled']) + # Update hidden service name registered with Name Services module. domain_removed.send_robust( sender='tor', domain_type='hiddenservice') - (hs_enabled, hs_hostname, hs_ports) = tor.get_hs() - if tor.is_enabled() and tor.is_running() and hs_enabled and hs_hostname: + if status['enabled'] and status['is_running'] and \ + status['hs_enabled'] and status['hs_hostname']: hs_services = [] for service in SERVICES: - if str(service[2]) in hs_ports: + if str(service[2]) in status['hs_ports']: hs_services.append(service[0]) domain_added.send_robust( sender='tor', domain_type='hiddenservice', - name=hs_hostname, description=_('Tor Hidden Service'), + name=status['hs_hostname'], description=_('Tor Hidden Service'), services=hs_services) + + if not return_code: + messages.success(request, _('Configuration updated.')) + else: + messages.info(request, _('Error occurred during configuration.')) + + config_process = None From 1e67fcb61af1ea0278aa7a992edbe906af78439f Mon Sep 17 00:00:00 2001 From: James Valleroyimap.example.com. For IMAP over SSL (recommended), fill the "
"server field like imaps://imap.example.com."
msgstr ""
-"Vous pouvez accéder à RoundCube depuis /roundcube"
-". Renseigner le nom d'utilisateur et le mot de passe de votre compte de "
+"Vous pouvez accéder à RoundCube depuis /roundcube"
+"a>. Renseigner le nom d'utilisateur et le mot de passe de votre compte de "
"courrier électronique auquel vous souhaitez accéder, suivis du nom de "
-"domaine du serveur IMAP de votre fournisseur d'email, comme "
-"imap.example.com. Pour de l'IMAP sur du SSL (recommandé), "
-"remplissez les champs du serveur avec par exemple "
-"imaps://imap.example.com."
+"domaine du serveur IMAP de votre fournisseur d'email, comme imap."
+"example.com. Pour de l'IMAP sur du SSL (recommandé), remplissez les "
+"champs du serveur avec par exemple imaps://imap.example.com."
#: plinth/modules/roundcube/templates/roundcube.html:50
msgid ""
@@ -2418,7 +2791,7 @@ msgstr "Système"
#: 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 "Configuration Système"
@@ -2437,33 +2810,81 @@ msgstr ""
"Ces options affectent %(box_name)s à son niveau le plus général, faites "
"attention."
-#: plinth/modules/tor/__init__.py:50
+#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35
+msgid "Anonymity Network (Tor)"
+msgstr "Réseau Anonyme (Tor)"
+
+#: plinth/modules/tor/__init__.py:53
+#, fuzzy
+#| msgid "Anonymity Network (Tor)"
+msgid "Tor Anonymity Network"
+msgstr "Réseau Anonyme (Tor)"
+
+#: plinth/modules/tor/__init__.py:58
+msgid "Tor Bridge Relay"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144
+msgid "Tor Hidden Service"
+msgstr "Service Caché Tor"
+
+#: plinth/modules/tor/__init__.py:222
msgid "Tor relay port available"
msgstr "Port du relais Tor disponible"
-#: plinth/modules/tor/__init__.py:58
+#: plinth/modules/tor/__init__.py:230
msgid "Obfs3 transport registered"
msgstr "Transport Obfs3 enregistré"
-#: plinth/modules/tor/__init__.py:64
+#: plinth/modules/tor/__init__.py:236
msgid "Obfs4 transport registered"
msgstr "Transport Obfs4 enregistré"
-#: plinth/modules/tor/__init__.py:101
+#: plinth/modules/tor/__init__.py:273
#, python-brace-format
msgid "Access URL {url} on tcp{kind} via Tor"
msgstr "Accédez à l'URL {url} sur tcp{kind} via Tor"
-#: plinth/modules/tor/__init__.py:112
+#: plinth/modules/tor/__init__.py:284
#, python-brace-format
msgid "Confirm Tor usage at {url} on tcp{kind}"
msgstr "Confirmez l'utilisation de Tor pour {url} sur tcp{kind}"
-#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66
-msgid "Anonymity Network (Tor)"
-msgstr "Réseau Anonyme (Tor)"
+#: plinth/modules/tor/forms.py:32
+msgid "Enable Tor"
+msgstr "Activer Tor"
+
+#: plinth/modules/tor/forms.py:35
+msgid "Enable Tor Hidden Service"
+msgstr "Activer les Services Cachés Tor"
-#: plinth/modules/tor/templates/tor.html:29
+#: plinth/modules/tor/forms.py:38
+#, fuzzy, python-brace-format
+#| msgid ""
+#| "A hidden service will allow FreedomBox to provide selected services (such "
+#| "as ownCloud or Chat) without revealing its location."
+msgid ""
+"A hidden service will allow {box_name} to provide selected services (such as "
+"ownCloud or chat) without revealing its location."
+msgstr ""
+"Un service caché permettra à FreedomBox de proposer les services "
+"sélectionnés (comme ownCloud ou Chat) sans révéler votre emplacement."
+
+#: plinth/modules/tor/forms.py:42
+msgid "Download software packages over Tor"
+msgstr "Téléchargez les logiciels via Tor"
+
+#: plinth/modules/tor/forms.py:44
+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 ""
+"Lorsqu'activé, le logiciel sera téléchargé via le réseau Tor pour "
+"installation et mises à niveau. Ce processus ajoute un degré de sécurité et "
+"de confidentialité durant le téléchargement des logiciels."
+
+#: plinth/modules/tor/templates/tor.html:38
msgid ""
"Tor is an anonymous communication system. You can learn more about it from "
"the Tor Project website. For "
@@ -2477,28 +2898,34 @@ msgstr ""
"recommande l'utilisation du Navigateur Tor."
-#: plinth/modules/tor/templates/tor.html:44
+#: plinth/modules/tor/templates/tor.html:54
+#, fuzzy
+#| msgid "Configuration updated"
+msgid "Tor configuration is being updated"
+msgstr "Configuration actualisée"
+
+#: plinth/modules/tor/templates/tor.html:62
msgid "Tor is running"
msgstr "Tor est actif"
-#: plinth/modules/tor/templates/tor.html:47
+#: plinth/modules/tor/templates/tor.html:65
msgid "Tor is not running"
msgstr "Tot n'est pas actif"
-#: plinth/modules/tor/templates/tor.html:59
+#: plinth/modules/tor/templates/tor.html:77
msgid "Hidden Service"
msgstr "Services Cachés"
-#: plinth/modules/tor/templates/tor.html:60
-#: plinth/modules/tor/templates/tor.html:102
+#: plinth/modules/tor/templates/tor.html:78
+#: plinth/modules/tor/templates/tor.html:120
msgid "Port"
msgstr "Port"
-#: plinth/modules/tor/templates/tor.html:85
+#: plinth/modules/tor/templates/tor.html:103
msgid "Bridge"
msgstr "Pont"
-#: plinth/modules/tor/templates/tor.html:88
+#: plinth/modules/tor/templates/tor.html:106
#, python-format
msgid ""
"Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can "
@@ -2511,90 +2938,42 @@ msgstr ""
"routeur ou un pare-feu, vous devez vous assurer que les ports suivants "
"soient ouverts et réacheminés si nécessaire :"
-#: plinth/modules/tor/templates/tor.html:101
+#: plinth/modules/tor/templates/tor.html:119
msgid "Service"
msgstr "Service"
-#: plinth/modules/tor/templates/tor.html:117
+#: plinth/modules/tor/templates/tor.html:135
msgid "SOCKS"
msgstr "SOCKS"
-#: plinth/modules/tor/templates/tor.html:120
+#: plinth/modules/tor/templates/tor.html:138
#, python-format
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
"Un port SOCKS pour Tor est accessible pour %(box_name)s sur le port TCP 9050."
-#: plinth/modules/tor/tor.py:46
-msgid "Enable Tor"
-msgstr "Activer Tor"
-
-#: plinth/modules/tor/tor.py:49
-msgid "Enable Tor Hidden Service"
-msgstr "Activer les Services Cachés Tor"
-
-#: plinth/modules/tor/tor.py:51
-msgid ""
-"A hidden service will allow FreedomBox to provide selected services (such as "
-"ownCloud or Chat) without revealing its location."
-msgstr ""
-"Un service caché permettra à FreedomBox de proposer les services "
-"sélectionnés (comme ownCloud ou Chat) sans révéler votre emplacement."
-
-#: plinth/modules/tor/tor.py:55
-msgid "Download software packages over Tor"
-msgstr "Téléchargez les logiciels via Tor"
-
-#: plinth/modules/tor/tor.py:57
-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 ""
-"Lorsqu'activé, le logiciel sera téléchargé via le réseau Tor pour "
-"installation et mises à niveau. Ce processus ajoute un degré de sécurité et "
-"de confidentialité durant le téléchargement des logiciels."
-
-#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285
-msgid "Tor Hidden Service"
-msgstr "Service Caché Tor"
-
-#: plinth/modules/tor/tor.py:115
+#: plinth/modules/tor/views.py:68
msgid "Tor Control Panel"
msgstr "Panneau de configuration Tor"
-#: plinth/modules/tor/tor.py:240
+#: plinth/modules/tor/views.py:79
#, python-brace-format
msgid "Action error: {0} [{1}] [{2}]"
msgstr "Erreur sur action : {0} [{1}] [{2}]"
-#: plinth/modules/tor/tor.py:256
-msgid "Tor enabled"
-msgstr "Tor activé"
-
-#: plinth/modules/tor/tor.py:259
-msgid "Tor disabled"
-msgstr "Tor désactivé"
-
-#: plinth/modules/tor/tor.py:264
-msgid "Tor hidden service enabled"
-msgstr "Services cachés Tor activés"
-
-#: plinth/modules/tor/tor.py:267
-msgid "Tor hidden service disabled"
-msgstr "Services cachés Tor désactivés"
-
-#: plinth/modules/tor/tor.py:292
-msgid "Enabled package download over Tor"
-msgstr "Téléchargement de paquets via Tor activé"
+#: plinth/modules/tor/views.py:148
+#, fuzzy
+#| msgid "Configuration updated"
+msgid "Configuration updated."
+msgstr "Configuration actualisée"
-#: plinth/modules/tor/tor.py:295
-msgid "Disabled package download over Tor"
-msgstr "Téléchargement de paquets via Tor désactivé"
+#: plinth/modules/tor/views.py:150
+msgid "An error occurred during configuration."
+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 "BitTorrent (Transmission)"
@@ -2611,10 +2990,6 @@ msgid "Download directory"
msgstr "Répertoire de téléchargement"
#: plinth/modules/transmission/forms.py:34
-#| msgid ""
-#| "Directory where downloads are saved. If you change the default "
-#| "directory, ensure that the new directory exists and is writable by "
-#| "\"debian-tramission\" user."
msgid ""
"Directory where downloads are saved. If you change the default directory, "
"ensure that the new directory exists and is writable by \"debian-transmission"
@@ -2676,72 +3051,72 @@ msgstr ""
"Lorsqu'activé, le programme unattended-upgrades sera mis en œuvre une fois "
"par jour. Il essayera de réaliser l'ensemble des mises à niveau disponibles."
-#: plinth/modules/upgrades/templates/upgrades.html:40
-msgid "There was an error while upgrading."
-msgstr "Une erreur est survenue durant la mise à niveau."
-
-#: plinth/modules/upgrades/templates/upgrades.html:43
-#: plinth/modules/upgrades/templates/upgrades.html:59
-msgid "Output from unattended-upgrades:"
-msgstr "Résultat pour unattended-upgrades :"
-
-#: plinth/modules/upgrades/templates/upgrades.html:50
-msgid "The operating system is up to date now. "
-msgstr "Le système d'exploitation est à jour. "
-
-#: plinth/modules/upgrades/templates/upgrades.html:53
-msgid "Show Details"
-msgstr "Montrer les détails"
+#: plinth/modules/upgrades/templates/upgrades.html:37
+msgid ""
+"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:69
+#: plinth/modules/upgrades/templates/upgrades.html:45
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."
+"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 ""
-"Vous allez démarrer unattended-upgrades qui a pour but de mettre à niveau "
-"votre système avec les derniers paquets Debian."
-#: plinth/modules/upgrades/templates/upgrades.html:80
+#: plinth/modules/upgrades/templates/upgrades.html:58
msgid "Upgrade now »"
msgstr "Mettre à niveau »"
-#: plinth/modules/upgrades/templates/upgrades.html:87
-msgid "System is being upgraded."
-msgstr "Le système est en cours de mise à niveau."
+#: plinth/modules/upgrades/templates/upgrades.html:65
+#, fuzzy
+#| msgid "ejabberd is running"
+msgid "A package manager is running."
+msgstr "ejabberd est actif"
+
+#: plinth/modules/upgrades/templates/upgrades.html:70
+msgid "Recent log from upgrades:"
+msgstr ""
-#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64
+#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66
msgid "Automatic Upgrades"
msgstr "Mises à niveau automatiques"
-#: plinth/modules/upgrades/views.py:37
+#: plinth/modules/upgrades/views.py:38
msgid "Upgrade Packages"
msgstr "Mise à Niveau Paquets"
-#: plinth/modules/upgrades/views.py:75
+#: plinth/modules/upgrades/views.py:96
+#, fuzzy
+#| msgid "Upgrade completed."
+msgid "Upgrade process started."
+msgstr "Mise à niveau terminée."
+
+#: plinth/modules/upgrades/views.py:99
+#, fuzzy
+#| msgid "Upgrade failed."
+msgid "Starting upgrade failed."
+msgstr "Échec de la mise à niveau."
+
+#: plinth/modules/upgrades/views.py:102
msgid "Package Upgrades"
msgstr "Paquets Mis à Niveau"
-#: plinth/modules/upgrades/views.py:116
+#: plinth/modules/upgrades/views.py:131
#, python-brace-format
msgid "Error when configuring unattended-upgrades: {error}"
msgstr "Erreur lors de la configuration de unattended-upgrades : {error}"
-#: plinth/modules/upgrades/views.py:121
+#: plinth/modules/upgrades/views.py:136
msgid "Automatic upgrades enabled"
msgstr "Mises à niveau automatiques activées"
-#: plinth/modules/upgrades/views.py:123
+#: plinth/modules/upgrades/views.py:138
msgid "Automatic upgrades disabled"
msgstr "Mises à niveau automatiques désactivées"
-#: plinth/modules/upgrades/views.py:142
-msgid "Upgrade completed."
-msgstr "Mise à niveau terminée."
-
-#: plinth/modules/upgrades/views.py:144
-msgid "Upgrade failed."
-msgstr "Échec de la mise à niveau."
-
#: plinth/modules/users/__init__.py:36
msgid "Users and Groups"
msgstr "Utilisateurs et Groupes"
@@ -2783,19 +3158,30 @@ msgstr ""
msgid "Failed to add new user to {group} group."
msgstr "Échec de l'ajout d'un nouvel utilisateur au groupe {group}."
-#: plinth/modules/users/forms.py:126
+#: plinth/modules/users/forms.py:92
+msgid "SSH Keys"
+msgstr ""
+
+#: plinth/modules/users/forms.py:96
+msgid ""
+"Setting an SSH public key will allow this user to securely log in to the "
+"system without using a password. You may enter multiple keys, one on each "
+"line. Blank lines and lines starting with # will be ignored."
+msgstr ""
+
+#: plinth/modules/users/forms.py:136
msgid "Renaming LDAP user failed."
msgstr "Le changement du nom LDAP de l'utilisateur a échoué."
-#: plinth/modules/users/forms.py:138
+#: plinth/modules/users/forms.py:148
msgid "Failed to remove user from group."
msgstr "Échec du retrait de l'utilisateur du groupe."
-#: plinth/modules/users/forms.py:149
+#: plinth/modules/users/forms.py:159
msgid "Failed to add user to group."
msgstr "Échec de l'ajout de l'utilisateur au groupe."
-#: plinth/modules/users/forms.py:174
+#: plinth/modules/users/forms.py:188
msgid "Changing LDAP user password failed."
msgstr "Le changement de mot de passe pour l'utilisateur LDAP a échoué."
@@ -2814,7 +3200,7 @@ msgid "Create User"
msgstr "Créer Utilisateur"
#: plinth/modules/users/templates/users_delete.html:26
-#: plinth/modules/users/views.py:103
+#: plinth/modules/users/views.py:110
msgid "Delete User"
msgstr "Supprimer Utilisateur"
@@ -2869,20 +3255,20 @@ msgstr "Utilisateur %(username)s mis à jour."
msgid "Edit User"
msgstr "Modifier Utilisateur"
-#: plinth/modules/users/views.py:113
+#: plinth/modules/users/views.py:120
#, python-brace-format
msgid "User {user} deleted."
msgstr "Utilisateur {user} supprimé."
-#: plinth/modules/users/views.py:120
+#: plinth/modules/users/views.py:127
msgid "Deleting LDAP user failed."
msgstr "La suppression de l'utilisateur LDAP a échoué."
-#: plinth/modules/users/views.py:129
+#: plinth/modules/users/views.py:136
msgid "Change Password"
msgstr "Changer Mot de Passe"
-#: plinth/modules/users/views.py:130
+#: plinth/modules/users/views.py:137
msgid "Password changed successfully."
msgstr "Mot de passe changé avec succès."
@@ -2966,8 +3352,10 @@ msgstr "Serveur web via SSL (Secure Socket Layer)"
msgid "Secure Shell (SSH) Server"
msgstr "Serveur Secure Shell (SSH)"
-#: plinth/service.py:78
-msgid "FreedomBox Web Interface (Plinth)"
+#: plinth/service.py:79
+#, fuzzy, python-brace-format
+#| msgid "FreedomBox Web Interface (Plinth)"
+msgid "{box_name} Web Interface (Plinth)"
msgstr "Interface web Freedombox (Plinth)"
#: plinth/templates/404.html:25
@@ -3005,27 +3393,25 @@ msgstr ""
"traitement et réparation."
#: plinth/templates/base.html:49
-msgid "Plinth administrative interface for the FreedomBox"
+#, fuzzy, python-format
+#| msgid "Plinth administrative interface for the FreedomBox"
+msgid "Plinth administrative interface for the %(box_name)s"
msgstr "Interface d'administration Plinth pour FreedomBox"
-#: 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 "Basculer 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 "Changer le mot de passe"
-#: 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 "Se déconnecter"
-#: 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 "S'identifier"
@@ -3066,6 +3452,86 @@ msgstr "Installation de %(package_names)s: %(status)s"
msgid "%(percentage)s%% complete"
msgstr "%(percentage)s%% effectué"
+#~ msgid "show password"
+#~ msgstr "montrer le mot de passe"
+
+#~ msgid "The following is the current status:"
+#~ msgstr "Voici l'état actuel :"
+
+#~ msgid "Congratulations! Your FreedomBox is up and running!"
+#~ msgstr "Félicitations ! Votre FreedomBox fonctionne !"
+
+#~ msgid ""
+#~ "Please provide the following basic information to complete the setup "
+#~ "process."
+#~ msgstr ""
+#~ "Cliquer sur « Suivant » pour achever la configuration en enregistrant les "
+#~ "informations de base."
+
+#~ msgid "Next"
+#~ msgstr "Suivant"
+
+#~ msgid "FreedomBox Manual"
+#~ msgstr "Manuel FreedomBox"
+
+#~ msgid ""
+#~ "Many FreedomBox contributors and users are also available on the "
+#~ "#freedombox channel of the irc.oftc.net IRC network."
+#~ msgstr ""
+#~ "Un bon nombre de contributeurs et d'utilisateurs de la FreedomBox sont "
+#~ "également accessibles sur le canal IRC #freedombox du réseau irc.oftc.net."
+
+#~ msgid "Create Wiki/Blog"
+#~ msgstr "Créer Wiki/Blogue"
+
+#~ msgid ""
+#~ "Select Automatic (DHCP) if you are connecting to an existing wireless "
+#~ "network. Shared mode is useful when running an Access Point."
+#~ msgstr ""
+#~ "Sélectionner automatique (DHCP) si vous vous connectez à un réseau sans "
+#~ "fil existant. Le mode partagé est utile en cas de Point d'accès."
+
+#~ msgid "Tor enabled"
+#~ msgstr "Tor activé"
+
+#~ msgid "Tor disabled"
+#~ msgstr "Tor désactivé"
+
+#~ msgid "Tor hidden service enabled"
+#~ msgstr "Services cachés Tor activés"
+
+#~ msgid "Tor hidden service disabled"
+#~ msgstr "Services cachés Tor désactivés"
+
+#~ msgid "Enabled package download over Tor"
+#~ msgstr "Téléchargement de paquets via Tor activé"
+
+#~ msgid "Disabled package download over Tor"
+#~ msgstr "Téléchargement de paquets via Tor désactivé"
+
+#~ msgid "There was an error while upgrading."
+#~ msgstr "Une erreur est survenue durant la mise à niveau."
+
+#~ msgid "Output from unattended-upgrades:"
+#~ msgstr "Résultat pour unattended-upgrades :"
+
+#~ msgid "The operating system is up to date now. "
+#~ msgstr "Le système d'exploitation est à jour. "
+
+#~ msgid "Show Details"
+#~ msgstr "Montrer les détails"
+
+#~ 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 ""
+#~ "Vous allez démarrer unattended-upgrades qui a pour but de mettre à niveau "
+#~ "votre système avec les derniers paquets Debian."
+
+#~ msgid "System is being upgraded."
+#~ msgstr "Le système est en cours de mise à niveau."
+
#~ msgid ""
#~ "You can install and run various services and applications on your "
#~ "%(box_name)s."
diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po
index a63efe932..05cb7ca73 100644
--- a/plinth/locale/it/LC_MESSAGES/django.po
+++ b/plinth/locale/it/LC_MESSAGES/django.po
@@ -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-31 22:19+0530\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME imaps://imap.gmail.com olacaktır. Google hesap "
"seçeneklerinde (https://www.google.com/settings/security/lesssecureapps) \"daha az "
-"güvenli uygulamalara\" müsaade etmeniz gerekeceğini unutmayın."
+"lesssecureapps\" >https://www.google.com/settings/security/lesssecureapps"
+"a>) \"daha az güvenli uygulamalara\" müsaade etmeniz gerekeceğini unutmayın."
#: plinth/modules/shaarli/__init__.py:37
#: plinth/modules/shaarli/templates/shaarli.html:26
@@ -2532,8 +2749,8 @@ msgid ""
"a> path on the web server. Note that Shaarli only supports a single user "
"account, which you will need to setup on the initial visit."
msgstr ""
-"Etkinleştirildiğinde, Shaarli'ye ağ sunucusunda /shaarli yolunda erişilebilecektir. Shaarli'nin ilk ziyaretinizde "
+"Etkinleştirildiğinde, Shaarli'ye ağ sunucusunda /"
+"shaarli yolunda erişilebilecektir. Shaarli'nin ilk ziyaretinizde "
"ayarlamanız gerekecek olan sadece tek bir kullanıcı hesabını desteklediğini "
"unutmayın."
@@ -2543,8 +2760,7 @@ msgstr "Sistem"
#: plinth/modules/system/system.py:33
#: plinth/modules/system/templates/system.html:25
-#: plinth/templates/base.html:107
-#: plinth/templates/base.html:105
+#: plinth/templates/base.html:109
msgid "System Configuration"
msgstr "Sistem Yapılandırması"
@@ -2561,33 +2777,81 @@ msgstr ""
"Seçenekler %(box_name)s kutusunu en genel düzeyde etkiler, bu nedenle "
"dikkatli olun!"
-#: plinth/modules/tor/__init__.py:50
+#: plinth/modules/tor/__init__.py:48 plinth/modules/tor/templates/tor.html:35
+msgid "Anonymity Network (Tor)"
+msgstr "Anonimlik Ağı (Tor)"
+
+#: plinth/modules/tor/__init__.py:53
+#, fuzzy
+#| msgid "Anonymity Network (Tor)"
+msgid "Tor Anonymity Network"
+msgstr "Anonimlik Ağı (Tor)"
+
+#: plinth/modules/tor/__init__.py:58
+msgid "Tor Bridge Relay"
+msgstr ""
+
+#: plinth/modules/tor/__init__.py:76 plinth/modules/tor/views.py:144
+msgid "Tor Hidden Service"
+msgstr "Tor Gizli Servisi"
+
+#: plinth/modules/tor/__init__.py:222
msgid "Tor relay port available"
msgstr "Tor geçit portu mevcuttur"
-#: plinth/modules/tor/__init__.py:58
+#: plinth/modules/tor/__init__.py:230
msgid "Obfs3 transport registered"
msgstr "Obfs3 taşıma kayıtlıdır"
-#: plinth/modules/tor/__init__.py:64
+#: plinth/modules/tor/__init__.py:236
msgid "Obfs4 transport registered"
msgstr "Obfs4 taşıma kayıtlıdır"
-#: plinth/modules/tor/__init__.py:101
+#: plinth/modules/tor/__init__.py:273
#, python-brace-format
msgid "Access URL {url} on tcp{kind} via Tor"
msgstr "{url} bağlantısına tcp{kind} üzerinden Tor vasıtasıyla eriş"
-#: plinth/modules/tor/__init__.py:112
+#: plinth/modules/tor/__init__.py:284
#, python-brace-format
msgid "Confirm Tor usage at {url} on tcp{kind}"
msgstr "tcp{kind} üzerinden {url} konumunda Tor kullanımını teyit et"
-#: plinth/modules/tor/templates/tor.html:26 plinth/modules/tor/tor.py:66
-msgid "Anonymity Network (Tor)"
-msgstr "Anonimlik Ağı (Tor)"
+#: plinth/modules/tor/forms.py:32
+msgid "Enable Tor"
+msgstr "Tor'u Etkinleştir"
+
+#: plinth/modules/tor/forms.py:35
+msgid "Enable Tor Hidden Service"
+msgstr "Tor Gizli Servisi Etkinleştir"
+
+#: plinth/modules/tor/forms.py:38
+#, fuzzy, python-brace-format
+#| msgid ""
+#| "A hidden service will allow FreedomBox to provide selected services (such "
+#| "as ownCloud or Chat) without revealing its location."
+msgid ""
+"A hidden service will allow {box_name} to provide selected services (such as "
+"ownCloud or chat) without revealing its location."
+msgstr ""
+"Gizli servisler FreedomBox'un (ownCloud ya da sohbet gibi) seçili servisleri "
+"konumunu ortaya çıkarmadan sağlamasına imkân verir."
+
+#: plinth/modules/tor/forms.py:42
+msgid "Download software packages over Tor"
+msgstr "Yazılım paketlerini Tor üzerinden indir"
+
+#: plinth/modules/tor/forms.py:44
+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 ""
+"Etkinleştirildiğinde, kurulum ve güncellemeler için yazılımlar Tor ağı "
+"üzerinden indirilecektir. Bu, yazılım indirmeleri sırasında bir derece "
+"güvenlilik ve gizlilik ekler."
-#: plinth/modules/tor/templates/tor.html:29
+#: plinth/modules/tor/templates/tor.html:38
msgid ""
"Tor is an anonymous communication system. You can learn more about it from "
"the Tor Project website. For "
@@ -2601,28 +2865,34 @@ msgstr ""
"href=\"https://www.torproject.org/download/download-easy.html\"> Tor "
"Tarayıcısını kullanmanızı tavsiye eder."
-#: plinth/modules/tor/templates/tor.html:44
+#: plinth/modules/tor/templates/tor.html:54
+#, fuzzy
+#| msgid "Configuration updated"
+msgid "Tor configuration is being updated"
+msgstr "Kurulum güncellendi"
+
+#: plinth/modules/tor/templates/tor.html:62
msgid "Tor is running"
msgstr "Tor çalışmaktadır"
-#: plinth/modules/tor/templates/tor.html:47
+#: plinth/modules/tor/templates/tor.html:65
msgid "Tor is not running"
msgstr "Tor çalışmamaktadır"
-#: plinth/modules/tor/templates/tor.html:59
+#: plinth/modules/tor/templates/tor.html:77
msgid "Hidden Service"
msgstr "Gizli Servis"
-#: plinth/modules/tor/templates/tor.html:60
-#: plinth/modules/tor/templates/tor.html:102
+#: plinth/modules/tor/templates/tor.html:78
+#: plinth/modules/tor/templates/tor.html:120
msgid "Port"
msgstr "Port"
-#: plinth/modules/tor/templates/tor.html:85
+#: plinth/modules/tor/templates/tor.html:103
msgid "Bridge"
msgstr "Köprü"
-#: plinth/modules/tor/templates/tor.html:88
+#: plinth/modules/tor/templates/tor.html:106
#, python-format
msgid ""
"Your %(box_name)s is configured as a Tor bridge with obfsproxy, so it can "
@@ -2635,92 +2905,43 @@ msgstr ""
"güvenlik duvarı arkasındaysa ve gerekiyorsa aşağıdaki bağlantı noktalarının "
"(port) açık ve yönlendirilmiş olduğundan emin olun:"
-#: plinth/modules/tor/templates/tor.html:101
+#: plinth/modules/tor/templates/tor.html:119
msgid "Service"
msgstr "Servis"
-#: plinth/modules/tor/templates/tor.html:117
+#: plinth/modules/tor/templates/tor.html:135
msgid "SOCKS"
msgstr "SOCKS"
-#: plinth/modules/tor/templates/tor.html:120
+#: plinth/modules/tor/templates/tor.html:138
#, python-format
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
"Bir Tor SOCKS bağlantı noktası %(box_name)s kutunuzda TCP 9050 numaralı "
"portta mevcuttur."
-#: plinth/modules/tor/tor.py:46
-msgid "Enable Tor"
-msgstr "Tor'u Etkinleştir"
-
-#: plinth/modules/tor/tor.py:49
-msgid "Enable Tor Hidden Service"
-msgstr "Tor Gizli Servisi Etkinleştir"
-
-#: plinth/modules/tor/tor.py:51
-msgid ""
-"A hidden service will allow FreedomBox to provide selected services (such as "
-"ownCloud or Chat) without revealing its location."
-msgstr ""
-"Gizli servisler FreedomBox'un (ownCloud ya da sohbet gibi) seçili servisleri "
-"konumunu ortaya çıkarmadan sağlamasına imkân verir."
-
-#: plinth/modules/tor/tor.py:55
-msgid "Download software packages over Tor"
-msgstr "Yazılım paketlerini Tor üzerinden indir"
-
-#: plinth/modules/tor/tor.py:57
-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 ""
-"Etkinleştirildiğinde, kurulum ve güncellemeler için yazılımlar Tor ağı "
-"üzerinden indirilecektir. Bu, yazılım indirmeleri sırasında bir derece "
-"güvenlilik ve gizlilik ekler."
-
-#: plinth/modules/tor/tor.py:85 plinth/modules/tor/tor.py:285
-msgid "Tor Hidden Service"
-msgstr "Tor Gizli Servisi"
-
-#: plinth/modules/tor/tor.py:115
+#: plinth/modules/tor/views.py:68
msgid "Tor Control Panel"
msgstr "Tor Kontrol Panosu"
-#: plinth/modules/tor/tor.py:240
+#: plinth/modules/tor/views.py:79
#, python-brace-format
msgid "Action error: {0} [{1}] [{2}]"
msgstr "Eylem hatası: {0} [{1}] [{2}]"
-#: plinth/modules/tor/tor.py:256
-msgid "Tor enabled"
-msgstr "Tor etkindir"
-
-#: plinth/modules/tor/tor.py:259
-msgid "Tor disabled"
-msgstr "Tor devre dışıdır"
-
-#: plinth/modules/tor/tor.py:264
-msgid "Tor hidden service enabled"
-msgstr "Tor gizli servisi etkindir"
-
-#: plinth/modules/tor/tor.py:267
-msgid "Tor hidden service disabled"
-msgstr "Tor gizli servisi devre dışıdır"
-
-#: plinth/modules/tor/tor.py:292
-msgid "Enabled package download over Tor"
-msgstr "Yazılım paketlerinin Tor üzerinden indirilmesi etkinleştirildi"
+#: plinth/modules/tor/views.py:148
+#, fuzzy
+#| msgid "Configuration updated"
+msgid "Configuration updated."
+msgstr "Kurulum güncellendi"
-#: plinth/modules/tor/tor.py:295
-msgid "Disabled package download over Tor"
-msgstr "Yazılım paketlerinin Tor üzerinden indirilmesi devre dışı bırakıldı"
+#: plinth/modules/tor/views.py:150
+msgid "An error occurred during configuration."
+msgstr ""
#: plinth/modules/transmission/__init__.py:38
#: plinth/modules/transmission/templates/transmission.html:26
#: plinth/modules/transmission/views.py:67
-#: plinth/modules/transmission/views.py:63
msgid "BitTorrent (Transmission)"
msgstr "BitTorrent (Transmission)"
@@ -2799,73 +3020,72 @@ msgstr ""
"Etkinleştirildiğinde unattended-upgrades programı günde bir kez "
"çalıştırılacaktır. Mevcut paket yükseltmelerini uygulamayı deneyecektir."
-#: plinth/modules/upgrades/templates/upgrades.html:40
-msgid "There was an error while upgrading."
-msgstr "Yükseltme sırasında bir hata meydana geldi."
-
-#: plinth/modules/upgrades/templates/upgrades.html:43
-#: plinth/modules/upgrades/templates/upgrades.html:59
-msgid "Output from unattended-upgrades:"
-msgstr "unattended-upgrades çıktısı:"
-
-#: plinth/modules/upgrades/templates/upgrades.html:50
-msgid "The operating system is up to date now. "
-msgstr "İşletim sistemi artık günceldir. "
-
-#: plinth/modules/upgrades/templates/upgrades.html:53
-msgid "Show Details"
-msgstr "Ayrıntıları Göster"
+#: plinth/modules/upgrades/templates/upgrades.html:37
+msgid ""
+"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:69
+#: plinth/modules/upgrades/templates/upgrades.html:45
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."
+"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 ""
-"Bu, sisteminizi en güncel Debian paketlerine yükseltmeyi deneyecek "
-"unattended-upgrades programını çalıştıracaktır. Tamamlanması birkaç dakika "
-"alabilir."
-#: plinth/modules/upgrades/templates/upgrades.html:80
+#: plinth/modules/upgrades/templates/upgrades.html:58
msgid "Upgrade now »"
msgstr "Şimdi yükselt »"
-#: plinth/modules/upgrades/templates/upgrades.html:87
-msgid "System is being upgraded."
-msgstr "Sistem yükseltilmektedir."
+#: plinth/modules/upgrades/templates/upgrades.html:65
+#, fuzzy
+#| msgid "ejabberd is running"
+msgid "A package manager is running."
+msgstr "ejabberd çalışmaktadır"
+
+#: plinth/modules/upgrades/templates/upgrades.html:70
+msgid "Recent log from upgrades:"
+msgstr ""
-#: plinth/modules/upgrades/views.py:35 plinth/modules/upgrades/views.py:64
+#: plinth/modules/upgrades/views.py:36 plinth/modules/upgrades/views.py:66
msgid "Automatic Upgrades"
msgstr "Otomatik Yükseltmeler"
-#: plinth/modules/upgrades/views.py:37
+#: plinth/modules/upgrades/views.py:38
msgid "Upgrade Packages"
msgstr "Paketleri Yükselt"
-#: plinth/modules/upgrades/views.py:75
+#: plinth/modules/upgrades/views.py:96
+#, fuzzy
+#| msgid "Upgrade completed."
+msgid "Upgrade process started."
+msgstr "Yükseltme tamamlandı."
+
+#: plinth/modules/upgrades/views.py:99
+#, fuzzy
+#| msgid "Upgrade failed."
+msgid "Starting upgrade failed."
+msgstr "Yükseltme başarısız oldu."
+
+#: plinth/modules/upgrades/views.py:102
msgid "Package Upgrades"
msgstr "Paket Yükseltmeler"
-#: plinth/modules/upgrades/views.py:116
+#: plinth/modules/upgrades/views.py:131
#, python-brace-format
msgid "Error when configuring unattended-upgrades: {error}"
msgstr "unattended-upgrades yapılandırılırken bir hata oluştu: {error}"
-#: plinth/modules/upgrades/views.py:121
+#: plinth/modules/upgrades/views.py:136
msgid "Automatic upgrades enabled"
msgstr "Otomatik yükseltmeler etkinleştirildi"
-#: plinth/modules/upgrades/views.py:123
+#: plinth/modules/upgrades/views.py:138
msgid "Automatic upgrades disabled"
msgstr "Otomatik yükseltmeler devre dışı bırakıldı"
-#: plinth/modules/upgrades/views.py:142
-msgid "Upgrade completed."
-msgstr "Yükseltme tamamlandı."
-
-#: plinth/modules/upgrades/views.py:144
-msgid "Upgrade failed."
-msgstr "Yükseltme başarısız oldu."
-
#: plinth/modules/users/__init__.py:36
msgid "Users and Groups"
msgstr "Kullanıcılar ve Gruplar"
@@ -2906,19 +3126,30 @@ msgstr ""
msgid "Failed to add new user to {group} group."
msgstr "{group} grubuna yeni kullanıcı ilâve edilmesi başarısız oldu."
-#: plinth/modules/users/forms.py:126
+#: plinth/modules/users/forms.py:92
+msgid "SSH Keys"
+msgstr ""
+
+#: plinth/modules/users/forms.py:96
+msgid ""
+"Setting an SSH public key will allow this user to securely log in to the "
+"system without using a password. You may enter multiple keys, one on each "
+"line. Blank lines and lines starting with # will be ignored."
+msgstr ""
+
+#: plinth/modules/users/forms.py:136
msgid "Renaming LDAP user failed."
msgstr "LDAP kullanıcısının tekrar adlandırılması başarısız oldu."
-#: plinth/modules/users/forms.py:138
+#: plinth/modules/users/forms.py:148
msgid "Failed to remove user from group."
msgstr "Kullanıcının gruptan kaldırılması başarısız oldu."
-#: plinth/modules/users/forms.py:149
+#: plinth/modules/users/forms.py:159
msgid "Failed to add user to group."
msgstr "Kullanıcının gruba eklenmesi başarısız oldu."
-#: plinth/modules/users/forms.py:174
+#: plinth/modules/users/forms.py:188
msgid "Changing LDAP user password failed."
msgstr "LDAP kullanıcı parolasının değiştirilmesi başarısız oldu."
@@ -2937,7 +3168,7 @@ msgid "Create User"
msgstr "Kullanıcı Oluştur"
#: plinth/modules/users/templates/users_delete.html:26
-#: plinth/modules/users/views.py:103
+#: plinth/modules/users/views.py:110
msgid "Delete User"
msgstr "Kullanıcıyı Sil"
@@ -2992,20 +3223,20 @@ msgstr "%(username)s kullanıcısı güncellendi."
msgid "Edit User"
msgstr "Kullanıcıyı Düzenle"
-#: plinth/modules/users/views.py:113
+#: plinth/modules/users/views.py:120
#, python-brace-format
msgid "User {user} deleted."
msgstr "{user} kullanıcısı silindi."
-#: plinth/modules/users/views.py:120
+#: plinth/modules/users/views.py:127
msgid "Deleting LDAP user failed."
msgstr "LDAP kullanıcısının silinmesi başarısız oldu."
-#: plinth/modules/users/views.py:129
+#: plinth/modules/users/views.py:136
msgid "Change Password"
msgstr "Parolayı Değiştir"
-#: plinth/modules/users/views.py:130
+#: plinth/modules/users/views.py:137
msgid "Password changed successfully."
msgstr "Parola başarılı bir şekilde değiştirildi."
@@ -3089,8 +3320,10 @@ msgstr "SSL (Secure Socket Layer) üzerinden Web Sunucusu"
msgid "Secure Shell (SSH) Server"
msgstr "Güvenli Kabuk (SSH) Sunucusu"
-#: plinth/service.py:78
-msgid "FreedomBox Web Interface (Plinth)"
+#: plinth/service.py:79
+#, fuzzy, python-brace-format
+#| msgid "FreedomBox Web Interface (Plinth)"
+msgid "{box_name} Web Interface (Plinth)"
msgstr "FreedomBox Ağ Arayüzü (Plinth)"
#: plinth/templates/404.html:25
@@ -3123,40 +3356,29 @@ msgid ""
"\">bug tracker so we can fix it."
msgstr ""
"Bu dahili bir hatadır ve sizin yaptığınız ya da giderebileceğiniz bir hata "
-"değildir. Lütfen hatayı hata izleyicisinde rapor edin ki sorunu giderebilelim."
+"değildir. Lütfen hatayı hata izleyicisinde rapor edin ki sorunu giderebilelim."
#: plinth/templates/base.html:49
-msgid "Plinth administrative interface for the FreedomBox"
+#, fuzzy, python-format
+#| msgid "Plinth administrative interface for the FreedomBox"
+msgid "Plinth administrative interface for the %(box_name)s"
msgstr "FreedomBox için Plinth yönetim arayüzü"
-#: 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 "Tarama Geçişi"
-#: plinth/templates/base.html:123 plinth/templates/base.html.py:124
-#: 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 "Parolayı değiştir"
-#: plinth/templates/base.html:127 plinth/templates/base.html.py:128
-#: plinth/templates/base.html:141 plinth/templates/base.html.py:143
-#: 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 "Çıkış yap"
-#: plinth/templates/base.html:133 plinth/templates/base.html.py:135
-#: 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 "Giriş yap"
@@ -3197,3 +3419,64 @@ msgstr "%(package_names)s kuruluyor: %(status)s"
#, python-format
msgid "%(percentage)s%% complete"
msgstr "%(percentage)s%% tamamlandı"
+
+#~ msgid "show password"
+#~ msgstr "parolayı göster"
+
+#~ msgid "The following is the current status:"
+#~ msgstr "Aşağıdaki güncel durumdur:"
+
+#~ msgid "FreedomBox Manual"
+#~ msgstr "FreedomBox Kullanım Kılavuzu"
+
+#~ msgid ""
+#~ "Many FreedomBox contributors and users are also available on the "
+#~ "#freedombox channel of the irc.oftc.net IRC network."
+#~ msgstr ""
+#~ "Birçok FreedomBox iştirakçileri ve kullanıcıları irc.oftc.net IRC "
+#~ "ağındaki #freedombox kanalındadır."
+
+#~ msgid "Create Wiki/Blog"
+#~ msgstr "Viki/Blog Oluştur"
+
+#~ msgid "Tor enabled"
+#~ msgstr "Tor etkindir"
+
+#~ msgid "Tor disabled"
+#~ msgstr "Tor devre dışıdır"
+
+#~ msgid "Tor hidden service enabled"
+#~ msgstr "Tor gizli servisi etkindir"
+
+#~ msgid "Tor hidden service disabled"
+#~ msgstr "Tor gizli servisi devre dışıdır"
+
+#~ msgid "Enabled package download over Tor"
+#~ msgstr "Yazılım paketlerinin Tor üzerinden indirilmesi etkinleştirildi"
+
+#~ msgid "Disabled package download over Tor"
+#~ msgstr "Yazılım paketlerinin Tor üzerinden indirilmesi devre dışı bırakıldı"
+
+#~ msgid "There was an error while upgrading."
+#~ msgstr "Yükseltme sırasında bir hata meydana geldi."
+
+#~ msgid "Output from unattended-upgrades:"
+#~ msgstr "unattended-upgrades çıktısı:"
+
+#~ msgid "The operating system is up to date now. "
+#~ msgstr "İşletim sistemi artık günceldir. "
+
+#~ msgid "Show Details"
+#~ msgstr "Ayrıntıları Göster"
+
+#~ 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 ""
+#~ "Bu, sisteminizi en güncel Debian paketlerine yükseltmeyi deneyecek "
+#~ "unattended-upgrades programını çalıştıracaktır. Tamamlanması birkaç "
+#~ "dakika alabilir."
+
+#~ msgid "System is being upgraded."
+#~ msgstr "Sistem yükseltilmektedir."
diff --git a/plinth/locale/zh_CN/LC_MESSAGES/django.po b/plinth/locale/zh_CN/LC_MESSAGES/django.po
index 099853fec..21eb0148e 100644
--- a/plinth/locale/zh_CN/LC_MESSAGES/django.po
+++ b/plinth/locale/zh_CN/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-01-28 08:07+0530\n"
+"POT-Creation-Date: 2016-01-31 22:19+0530\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME - {% blocktrans trimmed %} - Exposing SSH with the default password for 'fbx' is a VERY BAD - idea. - {% endblocktrans %} -
-