Internationalize strings in template files

This commit is contained in:
Sunil Mohan Adapa 2015-11-13 22:02:17 +05:30
parent 139db064a9
commit 02cd89b60d
64 changed files with 1331 additions and 815 deletions

View File

@ -18,16 +18,26 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Services and Applications</h2> <h2>{% trans "Services and Applications" %}</h2>
<p>You can install and run various services and applications on your <p>
{{ cfg.box_name }}.</p> {% blocktrans trimmed %}
You can install and run various services and applications on
your {{ cfg.box_name }}.
{% endblocktrans %}
</p>
<p>This box can be your photo sharing site, your instant <p>
messaging site, your social networking site, your news site. Remember {% blocktrans trimmed %}
web portals? We can be one of those too. Many of the services you This box can be your photo sharing site, your instant messaging
use on the web could soon be on site and under your control!</p> site, your social networking site, your news site. Remember web
portals? We can be one of those too. Many of the services you
use on the web could soon be on site and under your control!
{% endblocktrans %}
</p>
{% endblock %} {% endblock %}

View File

@ -19,36 +19,45 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Service Discovery</h2> <h2>{% trans "Service Discovery" %}</h2>
<p>Service discovery allows other machines on the network to discover <p>
your FreedomBox and services running on it. It also allows {% blocktrans trimmed %}
FreedomBox to discover other machines and services running on your Service discovery allows other machines on the network to
local network. Service discovery is not essential and works only on discover your FreedomBox and services running on it. It also
internal networks. It may be disabled to improve security allows FreedomBox to discover other machines and services
especially when connecting to a hostile local network.</p> 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 %}
</p>
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class="running-status active"></span> Service discovery server is running <span class="running-status active"></span>
{% else %} {% trans "Service discovery server is running" %}
<span class="running-status inactive"></span> Service discovery server is not running {% else %}
{% endif %} <span class="running-status inactive"></span>
</p> {% trans "Service discovery server is not running" %}
{% endif %}
</p>
<h3>Configuration</h3> <h3>{% trans "Configuration" %}</h3>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/> <input type="submit" class="btn btn-primary"
</form> value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -27,8 +28,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Submit"/> <input type="submit" class="btn btn-primary"
value="{% trans "Submit" %}"/>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -19,32 +19,41 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Date & Time</h2> <h2>{% trans "Date & Time" %}</h2>
<p>Network time server is a program that maintians the system time in synchronization with servers on the Internet.</p> <p>
{% blocktrans trimmed %}
Network time server is a program that maintians the system time
in synchronization with servers on the Internet.
{% endblocktrans %}
</p>
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class="running-status active"></span> Network time server is running <span class="running-status active"></span>
{% else %} {% trans "Network time server is running" %}
<span class="running-status inactive"></span> Network time server is not running {% else %}
{% endif %} <span class="running-status inactive"></span>
</p> {% trans "Network time server is not running" %}
{% include "diagnostics_button.html" with module="datetime" %} {% endif %}
</p>
{% include "diagnostics_button.html" with module="datetime" %}
<h3>Configuration</h3> <h3>{% trans "Configuration" %}</h3>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/> <input type="submit" class="btn btn-primary"
</form> value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -19,37 +19,46 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>BitTorrent Web Client (Deluge)</h2> <h2>{% trans "BitTorrent Web Client (Deluge)" %}</h2>
<p>Deluge is a BitTorrent client that features a Web UI.</p> <p>{% trans "Deluge is a BitTorrent client that features a Web UI." %}</p>
<p>When enabled, the Deluge web client will be available from <p>
<a href="/deluge">/deluge</a> path on the web server. The default {% blocktrans trimmed %}
password is 'deluge', but you should log in and change it immediately after When enabled, the Deluge web client will be available from
enabling this service.</p> <a href="/deluge">/deluge</a> path on the web server. The
default password is 'deluge', but you should log in and change
it immediately after enabling this service.
{% endblocktrans %}
</p>
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class="running-status active"></span> deluge-web is running <span class="running-status active"></span>
{% else %} {% trans "deluge-web is running" %}
<span class="running-status inactive"></span> deluge-web is not running {% else %}
{% endif %} <span class="running-status inactive"></span>
</p> {% trans "deluge-web is not running" %}
{% include "diagnostics_button.html" with module="deluge" %} {% endif %}
</p>
<h3>Configuration</h3> {% include "diagnostics_button.html" with module="deluge" %}
<form class="form" method="post"> <h3>{% trans "Configuration" %}</h3>
{% csrf_token %}
{{ form|bootstrap }} <form class="form" method="post">
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="Update setup"/> {{ form|bootstrap }}
</form>
<input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -18,6 +18,7 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block page_head %} {% block page_head %}
@ -30,49 +31,55 @@
{% block content %} {% block content %}
<h2>{{ title }}</h2> <h2>{{ title }}</h2>
<p>The system diagnostic test will run a number of checks on your <p>
system to confirm that applications and services are working as expected.</p> {% blocktrans trimmed %}
The system diagnostic test will run a number of checks on your
system to confirm that applications and services are working as
expected.
{% endblocktrans %}
</p>
{% if not is_running %} {% if not is_running %}
<form class="form form-diagnostics-button" method="post" <form class="form form-diagnostics-button" method="post"
action="{% url 'diagnostics:index' %}"> action="{% url 'diagnostics:index' %}">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-primary" value="Run Diagnostics"/> <input type="submit" class="btn btn-primary"
</form> value="{% trans "Run Diagnostics" %}"/>
{% else %} </form>
<p>Diagnotics test is currently running</p>
<div class="progress">
<div class="progress-bar progress-bar-striped active"
role="progressbar" aria-valuemin="0" aria-valuemax="100"
aria-valuenow="{{ results.progress_percentage }}"
style="width: {{ results.progress_percentage }}%">
{{ results.progress_percentage }}%
</div>
</div>
{% endif %}
{% if results %}
<h3>Results</h3>
{% if results.error %}
<div class="alert alert-danger alert-dismissable">
<a class="close" data-dismiss="alert">&times;</a>
{{ results.error }}
</div>
{% else %} {% else %}
{% for module, module_results in results.results.items %} <p>{% trans "Diagnotics test is currently running" %}</p>
<h4>Module: {{ module }}</h4> <div class="progress">
<div class="progress-bar progress-bar-striped active"
role="progressbar" aria-valuemin="0" aria-valuemax="100"
aria-valuenow="{{ results.progress_percentage }}"
style="width: {{ results.progress_percentage }}%">
{{ results.progress_percentage }}%
</div>
</div>
{% if module_results %}
{% include "diagnostics_results.html" with results=module_results %}
{% else %}
<p><span class="glyphicon glyphicon-hourglass"></span></p>
{% endif %}
{% endfor %}
{% endif %} {% endif %}
{% endif %}
{% if results %}
<h3>{% trans "Results" %}</h3>
{% if results.error %}
<div class="alert alert-danger alert-dismissable">
<a class="close" data-dismiss="alert">&times;</a>
{{ results.error }}
</div>
{% else %}
{% for module, module_results in results.results.items %}
<h4>{% blocktrans %}Module: {{ module }}{% endblocktrans %}</h4>
{% if module_results %}
{% include "diagnostics_results.html" with results=module_results %}
{% else %}
<p><span class="glyphicon glyphicon-hourglass"></span></p>
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
{% endblock %} {% endblock %}

View File

@ -17,9 +17,12 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
<form class="form form-diagnostics-button" method="post" <form class="form form-diagnostics-button" method="post"
action="{% url 'diagnostics:module' module %}"> action="{% url 'diagnostics:module' module %}">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-default" value="Run Diagnostics"/> <input type="submit" class="btn btn-default"
value="{% trans "Run Diagnostics" %}"/>
</form> </form>

View File

@ -18,16 +18,18 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Diagnostic Results</h2> <h2>{% trans "Diagnostic Results" %}</h2>
<h3>Module: {{ module_name }}</h3> <h3>{% blocktrans %}Module: {{ module_name }}{% endblocktrans %}</h3>
{% if results %} {% if results %}
{% include "diagnostics_results.html" with results=results %} {% include "diagnostics_results.html" with results=results %}
{% else %} {% else %}
<p>This module does not support diagnostics</p> <p>{% trans "This module does not support diagnostics" %}</p>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -17,31 +17,33 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
<div class="row"> <div class="row">
<div class="col-sm-5"> <div class="col-sm-5">
<table class="table table-bordered table-striped diagnostics-results"> <table class="table table-bordered table-striped diagnostics-results">
<thead> <thead>
<tr> <tr>
<th class="diagnostic-test">Test</th> <th class="diagnostic-test">{% trans "Test" %}</th>
<th class="diagnostics-result">Result</th> <th class="diagnostics-result">{% trans "Result" %}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for test, result in results %} {% for test, result in results %}
<tr> <tr>
<td>{{ test }}</td> <td>{{ test }}</td>
<td> <td>
{% if result == 'passed' %} {% if result == 'passed' %}
<span class="label label-success">{{ result }}</span> <span class="label label-success">{{ result }}</span>
{% elif result == 'failed' %} {% elif result == 'failed' %}
<span class="label label-danger">{{ result }}</span> <span class="label label-danger">{{ result }}</span>
{% elif result == 'error' %} {% elif result == 'error' %}
<span class="label label-warning">{{ result }}</span> <span class="label label-warning">{{ result }}</span>
{% else %} {% else %}
{{ result }} {{ result }}
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>

View File

@ -18,29 +18,50 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>DynamicDNS client</h2>
<p>If your internet provider changes your IP address periodic (i.e. every 24h) <h2>{% trans "DynamicDNS client" %}</h2>
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). <p>
</br> </br> {% blocktrans trimmed %}
The solution is to assign a DNS name to your IP address and update the DNS If your internet provider changes your IP address periodic
name every time your IP is changed by your Internet provider. Dynamic DNS (i.e. every 24h) it may be hard for others to find you in the
allows you to push your current public IP address to an WEB. And for this reason nobody may find the services which are
<a href='http://gnudip2.sourceforge.net/' target='_blank'> gnudip </a> provided by FreedomBox (like your ownCloud).
server. Afterwards the Server will assign your DNS name with the new IP {% endblocktrans %}
and if someone from the internet asks for your DNS name he will get your </p>
current IP answered.
</br> </br> <p>
If you are looking for a free dynamic DNS account, you may find a free {% blocktrans trimmed %}
GnuDIP service at <a href='http://gnudip.datasystems24.net' The solution is to assign a DNS name to your IP address and
target='_blank'>gnudip.datasystems24.net</a> or you may find free update update the DNS name every time your IP is changed by your
URL based services on Internet provider. Dynamic DNS allows you to push your current
<a href='http://freedns.afraid.org/' target='_blank'> public IP address to an
freedns.afraid.org</a> <a href='http://gnudip2.sourceforge.net/' target='_blank'> gnudip </a>
</br> </br> server. Afterwards the Server will assign your DNS name with the
If your freedombox is connected behind some NAT router, don't forget new IP and if someone from the internet asks for your DNS name
to add portforwarding (i.e. forward some standard ports like 80 and 443) he will get your current IP answered.
to your freedombox device. {% endblocktrans %}
</p> </p>
<p>
{% blocktrans trimmed %}
If you are looking for a free dynamic DNS account, you may find
a free GnuDIP service at <a href='http://gnudip.datasystems24.net'
target='_blank'>gnudip.datasystems24.net</a> or you may find
free update URL based services on
<a href='http://freedns.afraid.org/' target='_blank'>
freedns.afraid.org</a>
{% endblocktrans %}
</p>
<p>
{% 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.
{% endblocktrans %}
</p>
{% endblock %} {% endblock %}

View File

@ -19,22 +19,25 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
<noscript> <noscript>
You have disabled Javascript. Dynamic form mode is disabled and {% blocktrans trimmed %}
some helper functions may not work <br> You have disabled Javascript. Dynamic form mode is disabled
(but the main functionality should work) and some helper functions may not work (but the main
<br><hr> functionality should work).
{% endblocktrans %}
</noscript> </noscript>
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/> <input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -18,25 +18,35 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h3>{% trans "NAT type" %}</h3>
<p> <p>
<h3>NAT type</h3> {% if nat_unchecked %}
{% if nat_unchecked %} {% blocktrans trimmed %}
NAT type not detected yet, if you do not provide a "IP check URL" we will NAT type not detected yet, if you do not provide a "IP check
not detect a NAT type. URL" we will not detect a NAT type.
{% else %} {% endblocktrans %}
{% if no_nat %}
Direct connection to the internet.
{% else %} {% else %}
Behind NAT, this means that dynamic DNS service will poll the {% if no_nat %}
"IP check URL" for changes (we need the "IP check URL" for this reason {% trans "Direct connection to the internet." %}
- otherwise we will not detect IP changes). {% else %}
It may take up to {{ timer }} minutes until we update your DNS entry in {% blocktrans trimmed %}
case of WAN IP change. Behind NAT, this means that dynamic DNS service will poll
the "IP check URL" for changes (we need the "IP check URL"
for this reason - otherwise we will not detect IP changes).
It may take up to {{ timer }} minutes until we update your
DNS entry in case of WAN IP change.
{% endblocktrans %}
{% endif %}
{% endif %} {% endif %}
{% endif %}
<h3>Last update</h3>
{{ last_update }}
</p> </p>
<h3>{% trans "Last update" %}</h3>
<p>{{ last_update }}</p>
{% endblock %} {% endblock %}

View File

@ -18,77 +18,96 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>{{ title }}</h2> <h2>{{ title }}</h2>
<p>Firewall is a network security system that controls the incoming <p>
and outgoing network traffic on your {{ cfg.box_name }}. Keeping a {% blocktrans trimmed %}
firewall enabled and properly configured reduces risk of security Firewall is a network security system that controls the incoming
threat from the Internet.</p> and outgoing network traffic on your {{ cfg.box_name }}. Keeping
a firewall enabled and properly configured reduces risk of
security threat from the Internet.
{% endblocktrans %}
</p>
<p>The following is the current status:</p> <p>{% trans "The following is the current status:" %}</p>
{% if firewall_status = 'not_running' %} {% if firewall_status = 'not_running' %}
<p>Firewall daemon is not running. Please run it. Firewall comes <p>
enabled by default on {{ cfg.box_name }}. On any Debian based system {% blocktrans trimmed %}
(such as {{ cfg.box_name }}) you may run it using the command 'service Firewall daemon is not running. Please run it. Firewall comes
firewalld start' or in case of a system with systemd 'systemctl start enabled by default on {{ cfg.box_name }}. On any Debian based
firewalld'</p> system (such as {{ cfg.box_name }}) you may run it using the
command 'service firewalld start' or in case of a system with
systemd 'systemctl start firewalld'
{% endblocktrans %}
</p>
{% else %} {% else %}
<div class="row"> <div class="row">
<div class="col-sm-8"> <div class="col-sm-8">
<table class='table table-autowidth table-striped'> <table class='table table-autowidth table-striped'>
<thead> <thead>
<th>Service/Port</th> <th>{% trans "Service/Port" %}</th>
<th>Status</th> <th>{% trans "Status" %}</th>
</thead> </thead>
<tbody> <tbody>
{% for service in services %} {% for service in services %}
<tr> <tr>
<td><strong>{{ service.name }}</strong></td> <td><strong>{{ service.name }}</strong></td>
<td> <td>
{% if service.is_enabled %} {% if service.is_enabled %}
<span class='label label-success'>Enabled</span> <span class='label label-success'>
{% else %} {% trans "Enabled" %}</span>
<span class='label label-warning'>Disabled</span> {% else %}
{% endif %} <span class='label label-warning'>
</td> {% trans "Disabled" %}</span>
</tr> {% endif %}
</td>
</tr>
{% for port in service.ports %} {% for port in service.ports %}
<tr> <tr>
<td class='cell-indented'><em>{{ port }}</em></td> <td class='cell-indented'><em>{{ port }}</em></td>
<td> <td>
{% if port in internal_enabled_services and port in external_enabled_services %} {% if port in internal_enabled_services and port in external_enabled_services %}
<span class='label label-success'>Permitted</span> <span class='label label-success'>
{% elif port in internal_enabled_services %} {% trans "Permitted" %}</span>
<span class='label label-warning'>Permitted (internal only)</span> {% elif port in internal_enabled_services %}
{% elif port in external_enabled_services %} <span class='label label-warning'>
<span class='label label-warning'>Permitted (external only)</span> {% trans "Permitted (internal only)" %}</span>
{% else %} {% elif port in external_enabled_services %}
<span class='label label-danger'>Blocked</span> <span class='label label-warning'>
{% endif %} {% trans "Permitted (external only)" %}</span>
</td> {% else %}
</tr> <span class='label label-danger'>
{% endfor %} {% trans "Blocked" %}</span>
{% endif %}
</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endfor %} <p>
<em>
{% blocktrans trimmed %}
The operation of the firewall is automatic. When you enable
a service it is automatically permitted in the firewall and
you disable a service is automatically disabled in the firewall.
{% endblocktrans %}
</em>
</p>
</tbody> {% endif %}
</table>
</div>
</div>
<p><em>The operation of the firewall is automatic. When you enable a
service it is automatically permitted in the firewall and you disable
a service is automatically disabled in the firewall.</em></p>
{% endif %}
{% endblock %} {% endblock %}

View File

@ -18,8 +18,9 @@
# #
{% endcomment %} {% endcomment %}
{% load static %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% load static %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
@ -46,14 +47,18 @@
</p> </p>
<h3 class="text-center"> <h3 class="text-center">
Congratulations! Your FreedomBox is up and running! {% trans "Congratulations! Your FreedomBox is up and running!" %}
</h3> </h3>
<p class="text-center">Please provide the following basic <p class="text-center">
information to complete the setup process.</p> {% blocktrans trimmed %}
Please provide the following basic information to complete the
setup process.
{% endblocktrans %}
</p>
<p class="text-center"> <p class="text-center">
<a href="{% url 'first_boot:state1' %}" <a href="{% url 'first_boot:state1' %}"
class="btn btn-primary btn-large">Next</a> class="btn btn-primary btn-large">{% trans "Next" %}</a>
</p> </p>
{% endblock %} {% endblock %}

View File

@ -18,8 +18,9 @@
# #
{% endcomment %} {% endcomment %}
{% load static %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% load static %}
{% block add_nav_and_login %} {% block add_nav_and_login %}
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right">
@ -35,17 +36,24 @@
<div class="col-md-6 col-md-offset-3"> <div class="col-md-6 col-md-offset-3">
{% include 'messages.html' %} {% include 'messages.html' %}
<h2>Administrator Account</h2> <h2>{% trans "Administrator Account" %}</h2>
<p>Choose a username and password to access this web interface. <p>
The password can be changed and other users can be added {% blocktrans trimmed %}
later. An LDAP user with administrative privileges (sudo) is Choose a username and password to access this web interface.
also created.</p> The password can be changed and other users can be added
later. An LDAP user with administrative privileges (sudo) is
also created.
{% endblocktrans %}
</p>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Box it up!"/>
<input type="submit" class="btn btn-primary"
value="{% trans "Box it up!" %}"/>
</form> </form>
</div> </div>

View File

@ -19,34 +19,44 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content_row %} {% block content_row %}
<div class="col-lg-6 col-lg-offset-3"> <div class="col-lg-6 col-lg-offset-3">
{% include 'messages.html' %} {% include 'messages.html' %}
<h2>Setup Complete!</h2> <h2>{% trans "Setup Complete!" %}</h2>
<p>FreedomBox setup is now complete. However, you should check <p>
the network setup and modify it if necessary. Do not forget to {% blocktrans trimmed %}
change the default Wi-Fi passwords.</p> FreedomBox setup is now complete. However, you should check
the network setup and modify it if necessary. Do not forget
to change the default Wi-Fi passwords.
{% endblocktrans %}
</p>
<p>To make your FreedomBox functional, you need some applications. <p>
Applications will be installed the first time you access them.</p> {% blocktrans trimmed %}
To make your FreedomBox functional, you need some
applications. Applications will be installed the first time
you access them.
{% endblocktrans %}
</p>
<h3>Network Configuration</h3> <h3>{% trans "Network Configuration" %}</h3>
{% include "connections_diagram.html" %} {% include "connections_diagram.html" %}
<div class="row"> <div class="row">
<div class="col-xs-6 text-center"> <div class="col-xs-6 text-center">
<a class="btn btn-lg btn-primary" href="{% url 'networks:index' %}"> <a class="btn btn-lg btn-primary" href="{% url 'networks:index' %}">
Go to Networks</a> {% trans "Go to Networks" %}</a>
</div> </div>
<div class="col-xs-6 text-center"> <div class="col-xs-6 text-center">
<a class="btn btn-lg btn-primary" href="{% url 'apps:index' %}"> <a class="btn btn-lg btn-primary" href="{% url 'apps:index' %}">
Go to Apps</a> {% trans "Go to Apps" %}</a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -19,41 +19,62 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<img src="{% static 'theme/img/freedombox-logo-250px.png' %}" <img src="{% static 'theme/img/freedombox-logo-250px.png' %}"
class="main-graphic" /> class="main-graphic" />
<p>FreedomBox is a community project to develop, design and promote <p>
personal servers running free software for private, personal {% blocktrans trimmed %}
communications. It is a networking appliance designed to allow FreedomBox is a community project to develop, design and promote
interfacing with the rest of the Internet under conditions of personal servers running free software for private, personal
protected privacy and data security. It hosts applications such as communications. It is a networking appliance designed to allow
blog, wiki, website, social network, email, web proxy and a Tor relay interfacing with the rest of the Internet under conditions of
on a device that can replace your Wi-Fi router so that your data stays protected privacy and data security. It hosts applications such
with you.</p> 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 %}
</p>
<p>We live in a world where our use of the network is mediated by <p>
those who often do not have our best interests at heart. By building {% blocktrans trimmed %}
software that does not rely on a central service, we can regain We live in a world where our use of the network is mediated by
control and privacy. By keeping our data in our homes, we gain useful those who often do not have our best interests at heart. By
legal protections over it. By giving back power to the users over building software that does not rely on a central service, we
their networks and machines, we are returning the Internet to its can regain control and privacy. By keeping our data in our
intended peer-to-peer architecture.</p> homes, we gain useful legal protections over it. By giving back
power to the users over their networks and machines, we are
returning the Internet to its intended peer-to-peer
architecture.
{% endblocktrans %}
</p>
<p>There are a number of projects working to realize a future of <p>
distributed services; FreedomBox aims to bring them all together in a {% blocktrans trimmed %}
convenient package.</p> 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.
{% endblocktrans %}
</p>
<p>For more information about the FreedomBox project, see the <p>
<a href="https://wiki.debian.org/FreedomBox">FreedomBox Wiki</a>.</p> {% blocktrans trimmed %}
For more information about the FreedomBox project, see the
<a href="https://wiki.debian.org/FreedomBox">FreedomBox Wiki</a>.
{% endblocktrans %}
</p>
<p><a class="btn btn-primary btn-lg" <p><a class="btn btn-primary btn-lg"
href="https://wiki.debian.org/FreedomBox" target="_blank">Learn more href="https://wiki.debian.org/FreedomBox"
&raquo;</a></p> target="_blank">{% trans "Learn more &raquo;" %}</a></p>
<p style='margin-top:30px'> <p style='margin-top:30px'>
You are running Plinth version {{ version }}. {% blocktrans trimmed %}
</p> You are running Plinth version {{ version }}.
{% endblocktrans %}
</p>
{% endblock %} {% endblock %}

View File

@ -18,24 +18,42 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Help</h2> <h2>{% trans "Help" %}</h2>
<p>The <a href={% url 'help:manual' %}>FreedomBox Manual</a> is the <p>
best place to start for information regarding {{ cfg.box_name }}.</p> {% url 'help:manual' as manual_url %}
{% blocktrans trimmed %}
The <a href="{{ manual_url }}">FreedomBox Manual</a> is the
best place to start for information regarding {{ cfg.box_name }}.
{% endblocktrans %}
</p>
<p><a href="http://wiki.debian.org/FreedomBox" <p>
target="_blank">FreedomBox project wiki </a> contains further {% blocktrans trimmed %}
information.</p> <a href="http://wiki.debian.org/FreedomBox" target="_blank">
FreedomBox project wiki </a> contains further information.
{% endblocktrans %}
</p>
<p>To seek help from FreedomBox community, queries may be posted on <p>
the {% blocktrans trimmed %}
<a href="https://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss"> To seek help from FreedomBox community, queries may be posted on
mailing list</a>. The list archives also contain information about the
problems faced by other users and possible solutions.</p> <a href="https://lists.alioth.debian.org/mailman/listinfo/freedombox-discuss">
mailing list</a>. The list archives also contain information
about problems faced by other users and possible solutions.
{% endblocktrans %}
</p>
<p>Many FreedomBox contributors and users are also available on the <p>
#freedombox channel of the irc.oftc.net IRC network.</p> {% blocktrans trimmed %}
Many FreedomBox contributors and users are also available on the
#freedombox channel of the irc.oftc.net IRC network.
{% endblocktrans %}
</p>
{% endblock %} {% endblock %}

View File

@ -18,6 +18,8 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
dd { dd {
@ -29,4 +31,3 @@
{% block content %} {% block content %}
{{ content|safe }} {{ content|safe }}
{% endblock %} {% endblock %}

View File

@ -19,22 +19,28 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<p>When enabled, the blogs and wikis will be available <p>
from <a href="/ikiwiki">/ikiwiki</a>.</p> {% blocktrans trimmed %}
When enabled, the blogs and wikis will be available
from <a href="/ikiwiki">/ikiwiki</a>.
{% endblocktrans %}
</p>
{% include "diagnostics_button.html" with module="ikiwiki" %} {% include "diagnostics_button.html" with module="ikiwiki" %}
<h3>Configuration</h3> <h3>{% trans "Configuration" %}</h3>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/> <input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -19,15 +19,17 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/> <input type="submit" class="btn btn-primary"
</form> value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -19,23 +19,31 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h3>Delete Wiki/Blog <em>{{ name }}</em></h3> <h3>
{% blocktrans trimmed %}
Delete Wiki/Blog <em>{{ name }}</em>
{% endblocktrans %}
</h3>
<p>This action will remove all the posts, pages and comments <p>
including revision history. Delete this wiki/blog {% blocktrans trimmed %}
permanently?</p> This action will remove all the posts, pages and comments
including revision history. Delete this wiki/blog permanently?
{% endblocktrans %}
</p>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-md btn-primary" <input type="submit" class="btn btn-md btn-primary"
value="Delete {{ name }}"/> value="{% blocktrans %}Delete {{ name }}{% endblocktrans %}"/>
<a href="{% url 'ikiwiki:manage' %}" role="button" <a href="{% url 'ikiwiki:manage' %}" role="button"
class="btn btn-md btn-primary">Cancel</a> class="btn btn-md btn-primary">{% trans "Cancel" %}</a>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
@ -37,28 +38,29 @@
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
{% if not sites %} {% if not sites %}
<p>No wikis or blogs available.</p> <p>{% trans "No wikis or blogs available." %}</p>
<p> <p>
<a class="btn btn-primary btn-md" <a class="btn btn-primary btn-md"
href="{% url 'ikiwiki:create' %}">Create a Wiki or Blog</a> href="{% url 'ikiwiki:create' %}">
{% trans "Create a Wiki or Blog" %}
</a>
</p> </p>
{% else %} {% else %}
<div class="list-group"> <div class="list-group">
{% for site in sites %} {% for site in sites %}
<div class="list-group-item clearfix"> <div class="list-group-item clearfix">
<a href="{% url 'ikiwiki:delete' site %}" <a href="{% url 'ikiwiki:delete' site %}"
class="btn btn-default btn-sm pull-right" class="btn btn-default btn-sm pull-right"
role="button" title="Delete site {{ site }}"> role="button"
title="{% blocktrans %}Delete site {{ site }}{% endblocktrans %}">
<span class="glyphicon glyphicon-trash" <span class="glyphicon glyphicon-trash"
aria-hidden="true"></span> aria-hidden="true"></span>
</a> </a>
<a class="wiki-label" <a class="wiki-label" href="/ikiwiki/{{ site }}"
href="/ikiwiki/{{ site }}" title="{% blocktrans %}Go to site {{ site }}{% endblocktrans %}">
title="Go to site {{ site }}">
{{ site }} {{ site }}
</a> </a>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>

View File

@ -19,39 +19,52 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Voice Chat (Mumble)</h2> <h2>{% trans "Voice Chat (Mumble)" %}</h2>
<p>Mumble is an open source, low-latency, encrypted, high quality voice chat <p>
software.</p> {% blocktrans trimmed %}
Mumble is an open source, low-latency, encrypted, high quality
voice chat software.
{% endblocktrans %}
</p>
<p>You can connect to your Mumble server on the regular Mumble port 64738. <p>
<a href="http://mumble.info">Clients</a> to connect to Mumble from your {% blocktrans trimmed %}
desktop and Android devices are available.</p> You can connect to your Mumble server on the regular Mumble port 64738.
<a href="http://mumble.info">Clients</a> to connect to Mumble
from your desktop and Android devices are available.
{% endblocktrans %}
</p>
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class="running-status active"></span> Mumble server is running <span class="running-status active"></span>
{% else %} {% trans "Mumble server is running" %}
<span class="running-status inactive"></span> Mumble server is not running {% else %}
{% endif %} <span class="running-status inactive"></span>
</p> {% trans "Mumble server is not running" %}
{% include "diagnostics_button.html" with module="mumble" %} {% endif %}
</p>
{% include "diagnostics_button.html" with module="mumble" %}
<h3>Configuration</h3> <h3>{% trans "Configuration" %}</h3>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/> <input type="submit" class="btn btn-primary"
</form> value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -18,6 +18,10 @@
# #
# ToDo: if connection is disabled, no information are visible anymore (Bug) # ToDo: if connection is disabled, no information are visible anymore (Bug)
{% endcomment %} {% endcomment %}
{% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
.list-group-item .btn { .list-group-item .btn {
@ -28,123 +32,131 @@
} }
</style> </style>
{% endblock %} {% endblock %}
{% load bootstrap %}
{% block content %} {% block content %}
<div class="row"> <div class="row">
<div class="col-sm-8"> <div class="col-sm-8">
<div> <div>
<a href="{% url 'networks:edit' connection.uuid %}" <a href="{% url 'networks:edit' connection.uuid %}"
class="btn btn-primary" role="button" class="btn btn-primary" role="button"
title="Edit connection">Edit</a> title="{% trans "Edit connection" %}">{% trans "Edit" %}</a>
{% if active_connection %} {% if active_connection %}
<form class="form form-inline" method="post" <form class="form form-inline" method="post"
action="{% url 'networks:deactivate' connection.uuid %}"> action="{% url 'networks:deactivate' connection.uuid %}">
{% csrf_token %} {% csrf_token %}
<button class="btn btn-default" type="submit">Deactivate</button> <button class="btn btn-default" type="submit">
{% trans "Deactivate" %}</button>
</form> </form>
{% else %} {% else %}
<form class="form form-inline" method="post" <form class="form form-inline" method="post"
action="{% url 'networks:activate' connection.uuid %}"> action="{% url 'networks:activate' connection.uuid %}">
{% csrf_token %} {% csrf_token %}
<button class="btn btn-default" type="submit">Activate</button> <button class="btn btn-default" type="submit">
{% trans "Activate" %}</button>
</form> </form>
{% endif %} {% endif %}
<a href="{% url 'networks:delete' connection.uuid %}" <a href="{% url 'networks:delete' connection.uuid %}"
class="btn btn-default" role="button" class="btn btn-default" role="button"
title="Delete connection">Delete</a> title="{% trans "Delete connection" %}">{% trans "Delete" %}</a>
</div> </div>
<h3>Connection</h3> <h3>{% trans "Connection" %}</h3>
<div class="list-group"> <div class="list-group">
{% if connection.primary %} {% if connection.primary %}
<div class="list-group-item"> <div class="list-group-item">
Primary connection {% trans "Primary connection" %}
<div class="pull-right"> <div class="pull-right">
<span class="label label-success">yes</span> <span class="label label-success">{% trans "yes" %}</span>
</div> </div>
</div> </div>
{% endif %} {% endif %}
<div class="list-group-item"> <div class="list-group-item">
Name {% trans "Name" %}
<div class="pull-right">{{ connection.id }}</div> <div class="pull-right">{{ connection.id }}</div>
</div> </div>
</div> </div>
{% if device %} {% if device %}
<h3>Device</h3> <h3>{% trans "Device" %}</h3>
<div class="list-group"> <div class="list-group">
<div class="list-group-item"> <div class="list-group-item">
State {% trans "State" %}
<span class="pull-right">{{ device.state }}</span> <span class="pull-right">{{ device.state }}</span>
</div> </div>
{% if device.state_reason != 'none' %} {% if device.state_reason != 'none' %}
<div class="list-group-item"> <div class="list-group-item">
State reason {% trans "State reason" %}
<span class="pull-right">{{ device.state_reason }}</span> <span class="pull-right">{{ device.state_reason }}</span>
</div> </div>
{% endif %} {% endif %}
<div class="list-group-item"> <div class="list-group-item">
Type {% trans "Type" %}
<span class="pull-right">{{ device.type }}</span> <span class="pull-right">{{ device.type }}</span>
</div> </div>
<div class="list-group-item"> <div class="list-group-item">
MAC address {% trans "MAC address" %}
<span class="pull-right">{{ device.hw_address }}</span> <span class="pull-right">{{ device.hw_address }}</span>
</div> </div>
<div class="list-group-item"> <div class="list-group-item">
Interface {% trans "Interface" %}
<span class="pull-right">{{ device.interface_name }}</span> <span class="pull-right">{{ device.interface_name }}</span>
</div> </div>
<div class="list-group-item"> <div class="list-group-item">
Description {% trans "Description" %}
<span class="pull-right">{{ device.description }}</span> <span class="pull-right">{{ device.description }}</span>
</div> </div>
</div> </div>
{% endif %} {% endif %}
<h3>Physical Link</h3> <h3>{% trans "Physical Link" %}</h3>
<div class="list-group"> <div class="list-group">
{% if device.ethernet %} {% if device.ethernet %}
<div class="list-group-item"> <div class="list-group-item">
Link state {% trans "Link state" %}
<div class="pull-right"> <div class="pull-right">
{% if device.ethernet.carrier %} {% if device.ethernet.carrier %}
<span class='label label-success'>cable is connected</span> <span class='label label-success'>
{% trans "cable is connected" %}</span>
{% else %} {% else %}
<span class='label label-warning'>please check cable</span> <span class='label label-warning'>
{% trans "please check cable" %}</span>
{% endif %} {% endif %}
</div> </div>
</div> </div>
<div class="list-group-item"> <div class="list-group-item">
Speed {% trans "Speed" %}
<span class="pull-right">{{ device.ethernet.speed }} Mbit/s</span> <span class="pull-right">
{% blocktrans %}{{ device.ethernet.speed }} Mbit/s{% endblocktrans %}
</span>
</div> </div>
{% endif %} {% endif %}
{% if connection.type == "802-11-wireless" %} {% if connection.type == "802-11-wireless" %}
<div class="list-group-item"> <div class="list-group-item">
SSID {% trans "SSID" %}
<span class="pull-right">{{ connection.wireless.ssid }}</span> <span class="pull-right">{{ connection.wireless.ssid }}</span>
</div> </div>
{% if device %} {% if device %}
<div class="list-group-item"> <div class="list-group-item">
Speed {% trans "Speed" %}
<span class="pull-right">{{ device.wireless.bitrate }} Mbit/s</span> <span class="pull-right">
{% blocktrans %}{{ device.wireless.bitrate }} Mbit/s{% endblocktrans %}
</span>
</div> </div>
<div class="list-group-item"> <div class="list-group-item">
Mode {% trans "Mode" %}
<span class="pull-right">{{ device.wireless.mode }}</span> <span class="pull-right">{{ device.wireless.mode }}</span>
</div> </div>
{% endif %} {% endif %}
{% if access_point.channel %} {% if access_point.channel %}
<div class="list-group-item"> <div class="list-group-item">
Signal strength {% trans "Signal strength" %}
<div class="pull-right"> <div class="pull-right">
<span class="btn btn-primary btn-xs"> <span class="btn btn-primary btn-xs">
{{ access_point.strength }}% {{ access_point.strength }}%
@ -154,7 +166,7 @@
{% endif %} {% endif %}
{% if access_point.channel %} {% if access_point.channel %}
<div class="list-group-item"> <div class="list-group-item">
Channel {% trans "Channel" %}
<span class="pull-right">{{ access_point.channel }}</span> <span class="pull-right">{{ access_point.channel }}</span>
</div> </div>
{% endif %} {% endif %}
@ -162,19 +174,19 @@
</div> </div>
{% if active_connection %} {% if active_connection %}
<h3>IPv4</h3> <h3>{% trans "IPv4" %}</h3>
<div class="list-group"> <div class="list-group">
{% if connection.ipv4.method %} {% if connection.ipv4.method %}
<div class="list-group-item"> <div class="list-group-item">
Method {% trans "Method" %}
<span class="pull-right">{{ connection.ipv4.method }}</span> <span class="pull-right">{{ connection.ipv4.method }}</span>
</div> </div>
{% endif %} {% endif %}
{% for address in device.ip4.addresses %} {% for address in device.ip4.addresses %}
<div class="list-group-item"> <div class="list-group-item">
IP address {% trans "IP address" %}
<span class="pull-right"> <span class="pull-right">
{{ address.address }}/{{ address.prefix }} {{ address.address }}/{{ address.prefix }}
</span> </span>
@ -183,76 +195,76 @@
{% if device.ip4.gateway %} {% if device.ip4.gateway %}
<div class="list-group-item"> <div class="list-group-item">
Gateway {% trans "Gateway" %}
<span class="pull-right">{{ device.ip4.gateway }}</span> <span class="pull-right">{{ device.ip4.gateway }}</span>
</div> </div>
{% endif %} {% endif %}
{% for server in device.ip4.nameservers %} {% for server in device.ip4.nameservers %}
<div class="list-group-item"> <div class="list-group-item">
DNS server {% trans "DNS server" %}
<span class="pull-right">{{ server }}</span> <span class="pull-right">{{ server }}</span>
</div> </div>
{% endfor %} {% endfor %}
{% if active_connection.ip4.default %} {% if active_connection.ip4.default %}
<div class="list-group-item"> <div class="list-group-item">
Default {% trans "Default" %}
<span class="pull-right">yes</span> <span class="pull-right">{% trans "yes" %}</span>
</div> </div>
{% endif %} {% endif %}
</div> </div>
<h3>IPv6</h3> <h3>{% trans "IPv6" %}</h3>
<div class="list-group"> <div class="list-group">
{% if connection.ipv6.method %} {% if connection.ipv6.method %}
<div class="list-group-item"> <div class="list-group-item">
Method {% trans "Method" %}
<span class="pull-right">{{ connection.ipv6.method }}</span> <span class="pull-right">{{ connection.ipv6.method }}</span>
</div> </div>
{% endif %} {% endif %}
{% for address in device.ip6.addresses %} {% for address in device.ip6.addresses %}
<div class="list-group-item"> <div class="list-group-item">
IP address {% trans "IP address" %}
<span class="pull-right">{{ address.address }}/{{ address.prefix }}</span> <span class="pull-right">{{ address.address }}/{{ address.prefix }}</span>
</div> </div>
{% endfor %} {% endfor %}
{% if device.ip6.gateway %} {% if device.ip6.gateway %}
<div class="list-group-item"> <div class="list-group-item">
Gateway {% trans "Gateway" %}
<span class="pull-right">{{ device.ip6.gateway }}</span> <span class="pull-right">{{ device.ip6.gateway }}</span>
</div> </div>
{% endif %} {% endif %}
{% for server in device.ip6.nameservers %} {% for server in device.ip6.nameservers %}
<div class="list-group-item"> <div class="list-group-item">
DNS server {% trans "DNS server" %}
<span class="pull-right">{{ server }}</span> <span class="pull-right">{{ server }}</span>
</div> </div>
{% endfor %} {% endfor %}
{% if active_connection.ip6.default %} {% if active_connection.ip6.default %}
<div class="list-group-item"> <div class="list-group-item">
Default {% trans "Default" %}
<span class="pull-right">yes</span> <span class="pull-right">{% trans "yes" %}</span>
</div> </div>
{% endif %} {% endif %}
</div> </div>
{% else %} {% else %}
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p>This connection is not active.</p> <p>{% trans "This connection is not active." %}</p>
{% endif %} {% endif %}
<h3>Security</h3> <h3>{% trans "Security" %}</h3>
{% if connection.zone == "internal" %} {% if connection.zone == "internal" %}
<div class="list-group"> <div class="list-group">
<div class="list-group-item"> <div class="list-group-item">
Firewall zone {% trans "Firewall zone" %}
<div class="pull-right"> <div class="pull-right">
<span class="label label-success">{{ connection.zone }}</span> <span class="label label-success">{{ connection.zone }}</span>
</div> </div>
@ -261,15 +273,18 @@
<div class="alert alert-info"> <div class="alert alert-info">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
This interface should be connected to local network/machine. If you {% blocktrans trimmed %}
connect this interface to a public network, services meant to This interface should be connected to local
be available only internally will become available externally. network/machine. If you connect this interface to a
This is a security risk. public network, services meant to be available only
internally will become available externally. This is a
security risk.
{% endblocktrans %}
</div> </div>
{% elif connection.zone == "external" %} {% elif connection.zone == "external" %}
<div class="list-group"> <div class="list-group">
<div class="list-group-item"> <div class="list-group-item">
Firewall zone {% trans "Firewall zone" %}
<div class="pull-right"> <div class="pull-right">
<span class="label label-warning">{{ connection.zone }}</span> <span class="label label-warning">{{ connection.zone }}</span>
</div> </div>
@ -278,14 +293,17 @@
<div class="alert alert-info"> <div class="alert alert-info">
<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> <span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span>
This interface should receive your Internet connection. If {% blocktrans trimmed %}
you connect it your a local network/machine, many services This interface should receive your Internet connection.
meant to available only internally will not be available. If you connect it your a local network/machine, many
services meant to available only internally will not be
available.
{% endblocktrans %}
</div> </div>
{% else %} {% else %}
<div class="list-group"> <div class="list-group">
<div class="list-group-item"> <div class="list-group-item">
Firewall zone {% trans "Firewall zone" %}
<div class="pull-right"> <div class="pull-right">
<span class="label label-danger">{{ connection.zone }}</span> <span class="label label-danger">{{ connection.zone }}</span>
</div> </div>
@ -294,10 +312,13 @@
<div class="alert alert-danger"> <div class="alert alert-danger">
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
This interface is not maintained by FreedomBox. Its security {% blocktrans trimmed %}
status is unknown to FreedomBox. Many FreedomBox services may This interface is not maintained by FreedomBox. Its
not be available on this interface. It is recommended that security status is unknown to FreedomBox. Many FreedomBox
you deactivate/delete this connection and re-configure it. services may not be available on this interface. It is
recommended that you deactivate/delete this connection and
re-configure it.
{% endblocktrans %}
</div> </div>
{% endif %} {% endif %}
</div> </div>

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -29,8 +30,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Create..."/> <input type="submit" class="btn btn-primary"
value="{% trans "Create..." %}"/>
</form> </form>
</div> </div>
</div> </div>

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -29,8 +30,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Create Connection"/> <input type="submit" class="btn btn-primary"
value="{% trans "Create Connection" %}"/>
</form> </form>
</div> </div>
</div> </div>

View File

@ -19,12 +19,13 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h3>Delete Connection <em>{{ name }}</em></h3> <h3>{% blocktrans %}Delete Connection <em>{{ name }}</em>{% endblocktrans %}</h3>
<p>Delete connection permanently?</p> <p>{% trans "Delete connection permanently?" %}</p>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
@ -33,7 +34,7 @@
value="Delete {{ name }}"/> value="Delete {{ name }}"/>
<a href="{% url 'networks:index' %}" role="button" <a href="{% url 'networks:index' %}" role="button"
class="btn btn-md btn-primary">Cancel</a> class="btn btn-md btn-primary">{% trans "Cancel" %}</a>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -18,6 +18,7 @@
{% endcomment %} {% endcomment %}
{% load static %} {% load static %}
{% load i18n %}
<style type="text/css"> <style type="text/css">
.connection-diagram { .connection-diagram {
@ -61,28 +62,31 @@
<div class="row connection-diagram"> <div class="row connection-diagram">
<div class="col-sm-2"> <div class="col-sm-2">
<img src="{% static 'theme/img/network-internet.svg' %}" <img src="{% static 'theme/img/network-internet.svg' %}"
class="col-image network-entity" alt="Internet"/> class="col-image network-entity" alt="{% trans "Internet" %}"/>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<img src="{% static 'theme/img/network-spacing.svg' %}" <img src="{% static 'theme/img/network-spacing.svg' %}"
class="col-image network-spacing hidden-xs" alt="Spacing"/> class="col-image network-spacing hidden-xs"
alt="{% trans "Spacing" %}"/>
<img src="{% static 'theme/img/network-connection.svg' %}" <img src="{% static 'theme/img/network-connection.svg' %}"
class="col-image network-connection hidden-xs" alt="Connection"/> class="col-image network-connection hidden-xs"
alt="{% trans "Connection" %}"/>
<img src="{% static 'theme/img/network-connection-vertical.svg' %}" <img src="{% static 'theme/img/network-connection-vertical.svg' %}"
class="network-connection-vertical visible-xs-block" alt="Connection"/> class="network-connection-vertical visible-xs-block"
alt="{% trans "Connection" %}"/>
<div class="connection-list"> <div class="connection-list">
<p class="connection-list-heading">External</p> <p class="connection-list-heading">{% trans "External" %}</p>
{% for connection in connections %} {% for connection in connections %}
{% if connection.interface_name and connection.is_active and connection.zone == 'external' %} {% if connection.interface_name and connection.is_active and connection.zone == 'external' %}
{% if connection.type == '802-3-ethernet' %} {% if connection.type == '802-3-ethernet' %}
<img src="{% static 'theme/img/network-ethernet.svg' %}" <img src="{% static 'theme/img/network-ethernet.svg' %}"
class="network-type-icon" alt="Ethernet"/> class="network-type-icon" alt="{% trans "Ethernet" %}"/>
{% elif connection.type == '802-11-wireless' %} {% elif connection.type == '802-11-wireless' %}
<img src="{% static 'theme/img/network-wireless.svg' %}" <img src="{% static 'theme/img/network-wireless.svg' %}"
class="network-type-icon" alt="Wi-Fi"/> class="network-type-icon" alt="{% trans "Wi-Fi" %}"/>
{% endif %} {% endif %}
<a href="{% url 'networks:show' connection.uuid %}" <a href="{% url 'networks:show' connection.uuid %}"
title="Show connection {{ connection.name }}"> title="{% blocktrans %}Show connection {{ connection.name }}{% endblocktrans %}">
{{ connection.name }} ({{ connection.interface_name }})</a> {{ connection.name }} ({{ connection.interface_name }})</a>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
@ -90,37 +94,40 @@
</div> </div>
<div class="col-sm-2"> <div class="col-sm-2">
<img src="{% static 'theme/img/network-freedombox.svg' %}" <img src="{% static 'theme/img/network-freedombox.svg' %}"
class="col-image network-entity" alt="FreedomBox"/> class="col-image network-entity" alt="{{ cfg.box_name }}"/>
</div> </div>
<div class="col-sm-3"> <div class="col-sm-3">
<img src="{% static 'theme/img/network-spacing.svg' %}" <img src="{% static 'theme/img/network-spacing.svg' %}"
class="col-image network-spacing hidden-xs" alt="Spacing"/> class="col-image network-spacing hidden-xs"
alt="{% trans "Spacing" %}"/>
<img src="{% static 'theme/img/network-connection.svg' %}" <img src="{% static 'theme/img/network-connection.svg' %}"
class="col-image network-connection hidden-xs" alt="Connection"/> class="col-image network-connection hidden-xs"
alt="{% trans "Connection" %}"/>
<div class="connection-list"> <div class="connection-list">
<p class="connection-list-heading">Internal</p> <p class="connection-list-heading">{% trans "Internal" %}</p>
{% for connection in connections %} {% for connection in connections %}
{% if connection.interface_name and connection.is_active and connection.zone == 'internal' %} {% if connection.interface_name and connection.is_active and connection.zone == 'internal' %}
<p> <p>
{% if connection.type == '802-3-ethernet' %} {% if connection.type == '802-3-ethernet' %}
<img src="{% static 'theme/img/network-ethernet.svg' %}" <img src="{% static 'theme/img/network-ethernet.svg' %}"
class="network-type-icon" alt="Ethernet"/> class="network-type-icon" alt="{% trans "Ethernet" %}"/>
{% elif connection.type == '802-11-wireless' %} {% elif connection.type == '802-11-wireless' %}
<img src="{% static 'theme/img/network-wireless.svg' %}" <img src="{% static 'theme/img/network-wireless.svg' %}"
class="network-type-icon" alt="Wi-Fi"/> class="network-type-icon" alt="{% trans "Wi-Fi" %}"/>
{% endif %} {% endif %}
<a href="{% url 'networks:show' connection.uuid %}" <a href="{% url 'networks:show' connection.uuid %}"
title="Show connection {{ connection.name }}"> title="{% blocktrans %}Show connection {{ connection.name }}{% endblocktrans %}">
{{ connection.name }} ({{ connection.interface_name }})</a> {{ connection.name }} ({{ connection.interface_name }})</a>
</p> </p>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</div> </div>
<img src="{% static 'theme/img/network-connection-vertical.svg' %}" <img src="{% static 'theme/img/network-connection-vertical.svg' %}"
class="network-connection-vertical visible-xs-block" alt="Connection"/> class="network-connection-vertical visible-xs-block"
alt="{% trans "Connection" %}"/>
</div> </div>
<div class="col-sm-2"> <div class="col-sm-2">
<img src="{% static 'theme/img/network-computer.svg' %}" <img src="{% static 'theme/img/network-computer.svg' %}"
class="col-image network-entity" alt="Computer"/> class="col-image network-entity" alt="{% trans "Computer" %}"/>
</div> </div>
</div> </div>

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -29,8 +30,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Edit Connection"/> <input type="submit" class="btn btn-primary"
value="{% trans "Edit Connection" %}"/>
</form> </form>
</div> </div>
</div> </div>

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
@ -62,7 +63,8 @@
<div class="list-group-item clearfix"> <div class="list-group-item clearfix">
<a href="{% url 'networks:delete' connection.uuid %}" <a href="{% url 'networks:delete' connection.uuid %}"
class="btn btn-default btn-sm pull-right" class="btn btn-default btn-sm pull-right"
role="button" title="Delete connection {{ connection.name }}"> role="button"
title="{% blocktrans %}Delete connection {{ connection.name }}{% endblocktrans %}">
<span class="glyphicon glyphicon-trash" <span class="glyphicon glyphicon-trash"
aria-hidden="true"></span> aria-hidden="true"></span>
</a> </a>
@ -73,7 +75,7 @@
{% csrf_token %} {% csrf_token %}
<button type="submit" class="btn btn-default btn-sm"> <button type="submit" class="btn btn-default btn-sm">
Deactivate</button> {% trans "Deactivate" %}</button>
</form> </form>
{% else %} {% else %}
<form class="form pull-right" method="post" <form class="form pull-right" method="post"
@ -81,16 +83,16 @@
{% csrf_token %} {% csrf_token %}
<button type="submit" class="btn btn-default btn-sm"> <button type="submit" class="btn btn-default btn-sm">
Activate</button> {% trans "Activate" %}</button>
</form> </form>
{% endif %} {% endif %}
{% if connection.is_active %} {% if connection.is_active %}
<span class="label label-success connection-status-label"> <span class="label label-success connection-status-label">
Active</span> {% trans "Active" %}</span>
{% else %} {% else %}
<span class="label label-warning connection-status-label"> <span class="label label-warning connection-status-label">
Inactive</span> {% trans "Inactive" %}</span>
{% endif %} {% endif %}
<a class="connection-show-label" <a class="connection-show-label"

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -29,8 +30,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Create..."/> <input type="submit" class="btn btn-primary"
value="{% trans "Create..." %}"/>
</form> </form>
</div> </div>
</div> </div>

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -26,19 +27,19 @@
<div class="col-sm-6"> <div class="col-sm-6">
<div class="list-group"> <div class="list-group">
{% for access_point in access_points %} {% for access_point in access_points %}
<div class="list-group-item clearfix"> <div class="list-group-item clearfix">
{% if access_point.ssid %} {% if access_point.ssid %}
<a display="inline-block" width="40%" <a display="inline-block" width="40%"
href="{% url 'networks:add_wifi' access_point.ssid access_point.interface_name %}"> href="{% url 'networks:add_wifi' access_point.ssid access_point.interface_name %}">
{{ access_point.ssid }} {{ access_point.ssid }}
</a> </a>
{% else %} {% else %}
-- --
{% endif %} {% endif %}
<span class="btn btn-primary btn-xs pull-right"> <span class="btn btn-primary btn-xs pull-right">
{{ access_point.strength }}% {{ access_point.strength }}%
</span> </span>
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
</div> </div>

View File

@ -19,7 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
@ -32,84 +32,111 @@
{% block content %} {% block content %}
<h2>Virtual Private Network (OpenVPN)</h2> <h2>{% trans "Virtual Private Network (OpenVPN)" %}</h2>
<p>Virtual Private Network (VPN) is a technique for securely <p>
connecting two machines in order to access resources of a private {% blocktrans trimmed %}
network. While you are away from home, you can connect to your Virtual Private Network (VPN) is a technique for securely
{{ cfg.box_name }} in order to join your home network and access connecting two machines in order to access resources of a
private/internal services provided by {{ cfg.box_name }}. You can private network. While you are away from home, you can connect
also access the rest of the Internet via {{ cfg.box_name }} for to your {{ cfg.box_name }} in order to join your home network
added security and anonymity.</p> and access private/internal services provided by
{{ cfg.box_name }}. You can also access the rest of the
Internet via {{ cfg.box_name }} for added security and
anonymity.
{% endblocktrans %}
</p>
{% if status.is_setup %} {% if status.is_setup %}
<h3>Profile</h3> <h3>{% trans "Profile" %}</h3>
<p>To connect to {{ cfg.box_name }}'s VPN, you need to download a <p>
profile and feed it to an OpenVPN client on your mobile or {% blocktrans trimmed %}
desktop machine. OpenVPN Clients are available for most To connect to {{ cfg.box_name }}'s VPN, you need to download a
platforms. See profile and feed it to an OpenVPN client on your mobile or
<a href="https://wiki.debian.org/FreedomBox/Manual/OpenVPN" desktop machine. OpenVPN Clients are available for most
title="FreedomBox Manual - OpenVPN">documentation</a> on platforms. See
recommended clients and instructions on how to configure them.</p> <a href="https://wiki.debian.org/FreedomBox/Manual/OpenVPN"
title="FreedomBox Manual - OpenVPN">documentation</a> on
recommended clients and instructions on how to configure them.
{% endblocktrans %}
</p>
<p>Profile is specific to each user of {{ cfg.box_name }}. Keep <p>
it a secret.</p> {% blocktrans trimmed %}
Profile is specific to each user of {{ cfg.box_name }}. Keep
it a secret.
{% endblocktrans %}
</p>
<form class="form" method="post" action="{% url 'openvpn:profile' %}"> <form class="form" method="post" action="{% url 'openvpn:profile' %}">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-primary" value="Download my profile"/> <input type="submit" class="btn btn-primary"
value="{% trans "Download my profile" %}"/>
</form> </form>
{% endif %} {% endif %}
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
{% if not status.is_setup and not status.setup_running %} {% if not status.is_setup and not status.setup_running %}
<p>OpenVPN has not yet been setup. Performing a secure setup <p>
takes a very long time. Depending on how fast your {% blocktrans trimmed %}
{{ cfg.box_name }} is, it may even take hours. If the setup is OpenVPN has not yet been setup. Performing a secure setup
interrupted, you may start it again.</p> takes a very long time. Depending on how fast your
{{ cfg.box_name }} is, it may even take hours. If the setup
is interrupted, you may start it again.
{% endblocktrans %}
</p>
<form class="form" method="post" action="{% url 'openvpn:setup' %}"> <form class="form" method="post" action="{% url 'openvpn:setup' %}">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-primary" value="Start setup"/> <input type="submit" class="btn btn-primary"
value="{% trans "Start setup" %}"/>
</form> </form>
{% endif %} {% endif %}
{% if not status.is_setup and status.setup_running %} {% if not status.is_setup and status.setup_running %}
<p class="running-status-parent"> <p class="running-status-parent">
<span class='running-status active'></span> OpenVPN setup is running <span class='running-status active'></span>
{% trans "OpenVPN setup is running" %}
</p> </p>
<p>To perform a secure setup, this process takes a very long time. <p>
Depending on how fast your {{ cfg.box_name }} is, it may even {% blocktrans trimmed %}
take hours. If the setup is interrupted, you may start it To perform a secure setup, this process takes a very long
again.</p> time. Depending on how fast your {{ cfg.box_name }} is, it
may even take hours. If the setup is interrupted, you may
start it again.
{% endblocktrans %}
</p>
{% endif %} {% endif %}
{% if status.is_setup %} {% if status.is_setup %}
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class='running-status active'></span> OpenVPN server is running <span class='running-status active'></span>
{% trans "OpenVPN server is running" %}
{% else %} {% else %}
<span class='running-status inactive'></span> OpenVPN server is not running <span class='running-status inactive'></span>
{% trans "OpenVPN server is not running" %}
{% endif %} {% endif %}
</p> </p>
{% include "diagnostics_button.html" with module="openvpn" %} {% include "diagnostics_button.html" with module="openvpn" %}
<h3>Configuration</h3> <h3>{% trans "Configuration" %}</h3>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/> <input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form> </form>
{% endif %} {% endif %}

View File

@ -19,34 +19,44 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>File Hosting (ownCloud)</h2> <h2>{% trans "File Hosting (ownCloud)" %}</h2>
<p>ownCloud gives you universal access to your files through a web <p>
interface or WebDAV. It also provides a platform to easily view & {% blocktrans trimmed %}
sync your contacts, calendars and bookmarks across all your devices ownCloud gives you universal access to your files through a web
and enables basic editing right on the web. Installation has minimal interface or WebDAV. It also provides a platform to easily view
server requirements, doesn't need special permissions and is & sync your contacts, calendars and bookmarks across all your
quick. ownCloud is extendable via a simple but powerful API for devices and enables basic editing right on the web. Installation
applications and plugins.</p> has minimal server requirements, doesn't need special
permissions and is quick. ownCloud is extendable via a simple
but powerful API for applications and plugins.
{% endblocktrans %}
</p>
<p>When enabled, the ownCloud installation will be available <p>
from <a href="/owncloud">/owncloud</a> path on the web server. {% blocktrans trimmed %}
Visit this URL to set up the initial administration account for When enabled, the ownCloud installation will be available
ownCloud.</p> from <a href="/owncloud">/owncloud</a> path on the web server.
Visit this URL to set up the initial administration account for
ownCloud.
{% endblocktrans %}
</p>
{% include "diagnostics_button.html" with module="owncloud" %} {% include "diagnostics_button.html" with module="owncloud" %}
<h3>Configuration</h3> <h3>{% trans "Configuration" %}</h3>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary btn-md" value="Apply changes"/>
<input type="submit" class="btn btn-primary btn-md"
value="{% trans "Apply changes" %}"/>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -29,14 +30,15 @@
<div id='pagekite-post-enabled-form' <div id='pagekite-post-enabled-form'
style='display: {{ form.enabled.value|yesno:'block,none' }};'> style='display: {{ form.enabled.value|yesno:'block,none' }};'>
<h3>PageKite Account</h3> <h3>{% trans "PageKite Account" %}</h3>
{{ form.server_domain|bootstrap_horizontal }} {{ form.server_domain|bootstrap_horizontal }}
{{ form.server_port|bootstrap_horizontal }} {{ form.server_port|bootstrap_horizontal }}
{{ form.kite_name|bootstrap_horizontal }} {{ form.kite_name|bootstrap_horizontal }}
{{ form.kite_secret|bootstrap_horizontal }} {{ form.kite_secret|bootstrap_horizontal }}
</div> </div>
<input type="submit" class="btn btn-primary" value="Save settings"/>
<input type="submit" class="btn btn-primary"
value="{% trans "Save settings" %}"/>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% load pagekite_extras %} {% load pagekite_extras %}
@ -40,31 +41,39 @@
{% block content %} {% block content %}
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
<b>Warning:</b><br>Your PageKite frontend server may not support all the {% blocktrans trimmed %}
protocol/port combinations that you are able to define here. For example, <b>Warning:</b><br>Your PageKite frontend server may not support
HTTPS on ports other than 443 is known to cause problems. all the protocol/port combinations that you are able to define
here. For example, HTTPS on ports other than 443 is known to
cause problems.
{% endblocktrans %}
</div> </div>
<div class="row custom-services"> <div class="row custom-services">
<div class="col-lg-6"> <div class="col-lg-6">
<form class="form add-service" method="post"> <form class="form add-service" method="post">
<h4>Create a custom service</h4> <h4>{% trans "Create a custom service" %}</h4>
{{ form|bootstrap_horizontal:'col-lg-6' }} {{ form|bootstrap_horizontal:'col-lg-6' }}
{% csrf_token %} {% csrf_token %}
<div class="form-group"> <div class="form-group">
<div class=" col-lg-offset-6 col-lg-6"> <div class=" col-lg-offset-6 col-lg-6">
<input type="submit" class="btn btn-primary" value="Add Service"/> <input type="submit" class="btn btn-primary"
value="{% trans "Add Service" %}"/>
</div> </div>
</div> </div>
</form> </form>
</div> </div>
<div class="col-lg-5 col-lg-offset-1"> <div class="col-lg-5 col-lg-offset-1">
<h4>Existing custom services</h4> <h4>{% trans "Existing custom services" %}</h4>
{% if not custom_services %} {% if not custom_services %}
<i>You don't have any Custom Services enabled</i> <i>{% trans "You don't have any Custom Services enabled" %}</i>
{% endif %} {% endif %}
<div class="list-group"> <div class="list-group">
{% for service in custom_services %} {% for service in custom_services %}
{% create_pagekite_service_url service kite_name as service_url %} {% create_pagekite_service_url service kite_name as service_url %}
@ -77,7 +86,9 @@
{{ service_url }} {{ service_url }}
{% endif %} {% endif %}
<br> <br>
connected to {{ service.backend_host }}:{{ service.backend_port }} {% blocktrans trimmed %}
connected to {{ service.backend_host }}:{{ service.backend_port }}
{% endblocktrans %}
</span> </span>
</span> </span>
<form class="form pull-right" method="post" <form class="form pull-right" method="post"
@ -87,7 +98,7 @@
{{ service.form.as_p }} {{ service.form.as_p }}
</div> </div>
<button type="submit" class="btn btn-default" <button type="submit" class="btn btn-default"
title="Delete this service"> title="{% trans "Delete this service" %}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"> <span class="glyphicon glyphicon-trash" aria-hidden="true">
</span> </span>
</button> </button>

View File

@ -18,38 +18,65 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<p>PageKite is a system for exposing {{ cfg.box_name }} services when <p>
you don't have a direct connection to the Internet. You only need this {% blocktrans trimmed %}
if your {{ cfg.box_name }} services are unreachable from the PageKite is a system for exposing {{ cfg.box_name }} services
rest of the Internet. This includes the following situations: </p> when you don't have a direct connection to the Internet. You
only need this if your {{ cfg.box_name }} services are
unreachable from the rest of the Internet. This includes the
following situations:
{% endblocktrans %}
</p>
<ul> <ul>
<li>{{ cfg.box_name }} is behind a restricted firewall.</li> <li>
{% blocktrans trimmed %}
{{ cfg.box_name }} is behind a restricted firewall.
{% endblocktrans %}
</li>
<li>{{ cfg.box_name }} is connected to a (wireless) router which you <li>
don't control.</li> {% blocktrans trimmed %}
{{ cfg.box_name }} is connected to a (wireless) router which
you don't control.
{% endblocktrans %}
</li>
<li>Your ISP does not provide you an external IP address and instead <li>
provides Internet connection through NAT.</li> {% blocktrans trimmed %}
Your ISP does not provide you an external IP address and
instead provides Internet connection through NAT.
{% endblocktrans %}
</li>
<li>Your ISP does not provide you a static IP address and your IP <li>
address changes evertime you connect to Internet.</li> {% blocktrans trimmed %}
Your ISP does not provide you a static IP address and your IP
address changes evertime you connect to Internet.
{% endblocktrans %}
</li>
<li>Your ISP limits incoming connections.</li> <li>{% trans "Your ISP limits incoming connections." %}</li>
</ul> </ul>
<p>PageKite works around NAT, firewalls and IP-address limitations by <p>
using a combination of tunnels and reverse proxies. You can use any {% blocktrans trimmed %}
pagekite service provider, for example PageKite works around NAT, firewalls and IP-address limitations
<a href="https://pagekite.net">pagekite.net</a>. by using a combination of tunnels and reverse proxies. You can
In future it might be possible to use your buddy's use any pagekite service provider, for example
{{ cfg.box_name }} for this.</p> <a href="https://pagekite.net">pagekite.net</a>. In future it
might be possible to use your buddy's {{ cfg.box_name }} for
this.
{% endblocktrans %}
</p>
<p> <p>
<a class="btn btn-primary btn-md" <a class="btn btn-primary btn-md" href="{% url 'pagekite:configure' %}">
href="{% url 'pagekite:configure' %}">Configure PageKite</a> {% trans "Configure PageKite" %}</a>
</p> </p>
{% endblock %} {% endblock %}

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
@ -35,9 +36,23 @@
{% block content %} {% block content %}
<div class="alert alert-warning" role="alert"> <div class="alert alert-warning" role="alert">
<b>Warning:</b><br>
<p>Published services are accessible and attackable from the evil internet.<p> {% trans "<b>Warning:</b><br/>" %}
<p>Exposing SSH with the default password for 'fbx' is a VERY BAD idea.</p>
<p>
{% blocktrans trimmed %}
Published services are accessible and attackable from the evil
internet.
{% endblocktrans %}
</p>
<p>
{% blocktrans trimmed %}
Exposing SSH with the default password for 'fbx' is a VERY BAD
idea.
{% endblocktrans %}
</p>
</div> </div>
<form class="form predefined" method="post"> <form class="form predefined" method="post">
@ -45,7 +60,9 @@
{{ form.https|bootstrap_horizontal:'col-lg-0' }} {{ form.https|bootstrap_horizontal:'col-lg-0' }}
{{ form.ssh|bootstrap_horizontal:'col-lg-0' }} {{ form.ssh|bootstrap_horizontal:'col-lg-0' }}
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-primary" value="Save Services"/>
<input type="submit" class="btn btn-primary"
value="{% trans "Save Services" %}"/>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -19,42 +19,55 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Web Proxy (Privoxy)</h2> <h2>{% trans "Web Proxy (Privoxy)" %}</h2>
<p>Privoxy is a non-caching web proxy with advanced filtering <p>
capabilities for enhancing privacy, modifying web page data and HTTP {% blocktrans trimmed %}
headers, controlling access, and removing ads and other obnoxious Privoxy is a non-caching web proxy with advanced filtering
Internet junk.</p> capabilities for enhancing privacy, modifying web page data and
HTTP headers, controlling access, and removing ads and other
obnoxious Internet junk.
{% endblocktrans %}
</p>
<p>You can use Privoxy by modifying your browser proxy settings to <p>
your {{ cfg.box_name }} hostname (or IP address) with port 8118. {% blocktrans trimmed %}
While using Privoxy, you can see its configuration details and You can use Privoxy by modifying your browser proxy settings to
documentation your {{ cfg.box_name }} hostname (or IP address) with port 8118.
at <a href="http://config.privoxy.org">http://config.privoxy.org/</a> While using Privoxy, you can see its configuration details and
or <a href="http://p.p">http://p.p</a></p> documentation at
<a href="http://config.privoxy.org">http://config.privoxy.org/</a>
or <a href="http://p.p">http://p.p</a>
{% endblocktrans %}
</p>
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class="running-status active"></span> Privoxy is running <span class="running-status active"></span>
{% else %} {% trans "Privoxy is running" %}
<span class="running-status inactive"></span> Privoxy is not running {% else %}
{% endif %} <span class="running-status inactive"></span>
</p> {% trans "Privoxy is not running" %}
{% include "diagnostics_button.html" with module="privoxy" %} {% endif %}
</p>
<h3>Configuration</h3> {% include "diagnostics_button.html" with module="privoxy" %}
<form class="form" method="post"> <h3>{% trans "Configuration" %}</h3>
{% csrf_token %}
{{ form|bootstrap }} <form class="form" method="post">
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="Update setup"/> {{ form|bootstrap }}
</form>
<input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -19,25 +19,37 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>reStore</h2> <h2>{% trans "reStore" %}</h2>
<p>reStore is a server for <a href='https://unhosted.org/'>unhosted</a>
web applications. The idea is to uncouple web applications from the
data, and thus the data can be stored on any unhosted storage server.</p>
<p>You can create and edit accounts in the <p>
<a href='/restore/'>reStore web-interface</a>.</p> {% blocktrans trimmed %}
reStore is a server for <a href='https://unhosted.org/'>unhosted</a>
web applications. The idea is to uncouple web applications from
the data, and thus the data can be stored on any unhosted
storage server.
{% endblocktrans %}
</p>
<h3>Configuration</h3> <p>
{% blocktrans trimmed %}
You can create and edit accounts in the
<a href='/restore/'>reStore web-interface</a>.
{% endblocktrans %}
</p>
<form class="form" method="post"> <h3>Configuration</h3>
{% csrf_token %}
{{ form|bootstrap }} <form class="form" method="post">
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="Update setup"/> {{ form|bootstrap }}
</form>
<input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -19,40 +19,55 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Email Client (Roundcube)</h2> <h2>{% trans "Email Client (Roundcube)" %}</h2>
<p>Roundcube webmail is a browser-based multilingual IMAP client with <p>
an application-like user interface. It provides full functionality {% blocktrans trimmed %}
you expect from an email client, including MIME support, address Roundcube webmail is a browser-based multilingual IMAP client
book, folder manipulation, message searching and spell checking.</p> with an application-like user interface. It provides full
functionality you expect from an email client, including MIME
support, address book, folder manipulation, message searching
and spell checking.
{% endblocktrans %}
</p>
<p>You can access Roundcube from <a href="/roundcube">/roundcube</a>. <p>
Provide the username and password of the email account you wish to {% blocktrans trimmed %}
access followed by the domain name of the IMAP server for your email You can access Roundcube from <a href="/roundcube">/roundcube</a>.
provider, like <code>imap.example.com</code>. For IMAP over SSL Provide the username and password of the email account you wish
(recommended), fill the server field to access followed by the domain name of the IMAP server for
like <code>imaps://imap.example.com</code>.</p> your email provider, like <code>imap.example.com</code>. For
IMAP over SSL (recommended), fill the server field like
<code>imaps://imap.example.com</code>.
{% endblocktrans %}
</p>
<p>For Gmail, username will be your Gmail address, password will be <p>
your Google account password and server will be {% blocktrans trimmed %}
<code>imaps://imap.gmail.com</code>. Note that you will also need For Gmail, username will be your Gmail address, password will be
to enable "Less secure apps" in your Google account settings your Google account password and server will be
(<a href="https://www.google.com/settings/security/lesssecureapps" <code>imaps://imap.gmail.com</code>. Note that you will also need
>https://www.google.com/settings/security/lesssecureapps</a>).</p> to enable "Less secure apps" in your Google account settings
(<a href="https://www.google.com/settings/security/lesssecureapps"
>https://www.google.com/settings/security/lesssecureapps</a>).
{% endblocktrans %}
</p>
{% include "diagnostics_button.html" with module="roundcube" %} {% include "diagnostics_button.html" with module="roundcube" %}
<h3>Configuration</h3> <h3>{% trans "Configuration" %}</h3>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Update setup"/> <input type="submit" class="btn btn-primary"
</form> value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -19,25 +19,33 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Bookmarks (Shaarli)</h2> <h2>{% trans "Bookmarks (Shaarli)" %}</h2>
<p>Shaarli allows you to save and share bookmarks.</p> <p>{% trans "Shaarli allows you to save and share bookmarks." %}</p>
<p>When enabled, Shaarli will be available from <a href="/shaarli">/shaarli</a> <p>
path on the web server. Note that Shaarli only supports a single user {% blocktrans trimmed %}
account, which you will need to setup on the initial visit.<p>
<h3>Configuration</h3> When enabled, Shaarli will be available from <a href="/shaarli">/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.
<form class="form" method="post"> {% endblocktrans %}
{% csrf_token %} </p>
{{ form|bootstrap }} <h3>{% trans "Configuration" %}</h3>
<input type="submit" class="btn btn-primary" value="Update setup"/> <form class="form" method="post">
</form> {% csrf_token %}
{{ form|bootstrap }}
<input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -18,13 +18,24 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>System Configuration</h2> <h2>{% trans "System Configuration" %}</h2>
<p>Here you can administrate the underlying system of your {{ cfg.box_name }}. <p>
</p> {% blocktrans trimmed %}
<p>The options affect the {{ cfg.box_name }} at its most Here you can administrate the underlying system of your
general level, so be careful!</p> {{ cfg.box_name }}.
{% endblocktrans %}
</p>
<p>
{% blocktrans trimmed %}
The options affect the {{ cfg.box_name }} at its most general
level, so be careful!
{% endblocktrans %}
</p>
{% endblock %} {% endblock %}

View File

@ -19,91 +19,109 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Anonymity Network (Tor)</h2> <h2>{% trans "Anonymity Network (Tor)" %}</h2>
<p>Tor is an anonymous communication system. You can learn more about <p>
it from the <a href="https://www.torproject.org/">Tor Project</a> {% blocktrans trimmed %}
website. For best protection when web surfing, the Tor Project Tor is an anonymous communication system. You can learn more
recommends that you use about it from the <a href="https://www.torproject.org/">Tor
the <a href="https://www.torproject.org/download/download-easy.html.en"> Project</a> website. For best protection when web surfing, the
Tor Browser</a>.</p> Tor Project recommends that you use the
<a href="https://www.torproject.org/download/download-easy.html.en">
Tor Browser</a>.
{% endblocktrans %}
</p>
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class="running-status active"></span> Tor is running <span class="running-status active"></span>
{% else %} {% trans "Tor is running" %}
<span class="running-status inactive"></span> Tor is not running {% else %}
<span class="running-status inactive"></span>
{% trans "Tor is not running" %}
{% endif %}
</p>
{% include "diagnostics_button.html" with module="tor" %}
{% if status.hs_enabled %}
<div class="row">
<div class="col-sm-3">
<table class="table table-bordered table-condensed table-striped">
<thead>
<tr>
<th>{% trans "Hidden Service" %}</th>
<th>{% trans "Port" %}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ status.hs_hostname }}</td>
<td>{{ status.hs_ports }}</td>
</tr>
</tbody>
</table>
</div>
</div>
{% endif %} {% endif %}
</p>
{% include "diagnostics_button.html" with module="tor" %}
{% if status.hs_enabled %} <h3>{% trans "Configuration" %}</h3>
<form class="form" method="post">
{% csrf_token %}
{{ form|bootstrap }}
<input type="submit" class="btn btn-primary btn-md"
value="{% trans "Update setup" %}"/>
</form>
<h3>{% trans "Bridge" %}</h3>
<p>
{% blocktrans trimmed %}
Your {{ cfg.box_name }} is configured as a Tor bridge with
obfsproxy, so it can help circumvent censorship. If your {{
cfg.box_name }} is behind a router or firewall, you should make
sure the following ports are open, and port-forwarded, if
necessary:
{% endblocktrans %}
</p>
<div class="row"> <div class="row">
<div class="col-sm-3"> <div class="col-sm-3">
<table class="table table-bordered table-condensed table-striped"> <table class="table table-bordered table-condensed table-striped">
<thead> <thead>
<tr> <tr>
<th>Hidden Service</th> <th>{% trans "Service" %}</th>
<th>Port</th> <th>{% trans "Port" %}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> {% for name, port in status.ports.items %}
<td>{{ status.hs_hostname }}</td> <tr>
<td>{{ status.hs_ports }}</td> <td>{{ name }}</td>
</tr> <td>{{ port }}</td>
</tr>
{% endfor %}
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
{% endif %}
<h3>Configuration</h3> <h3>{% trans "SOCKS" %}</h3>
<form class="form" method="post"> <p>
{% csrf_token %} {% blocktrans trimmed %}
A Tor SOCKS port is available on your {{ cfg.box_name }} on TCP port
{{ form|bootstrap }} 9050.
{% endblocktrans %}
<input type="submit" class="btn btn-primary btn-md" value="Update setup"/> </p>
</form>
<h3>Bridge</h3>
<p>Your {{ cfg.box_name }} is configured as a Tor bridge with obfsproxy, so it
can help circumvent censorship. If your {{ cfg.box_name }} is behind a router
or firewall, you should make sure the following ports are open, and
port-forwarded, if necessary:</p>
<div class="row">
<div class="col-sm-3">
<table class="table table-bordered table-condensed table-striped">
<thead>
<tr>
<th>Service</th>
<th>Port</th>
</tr>
</thead>
<tbody>
{% for name, port in status.ports.items %}
<tr>
<td>{{ name }}</td>
<td>{{ port }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<h3>SOCKS</h3>
<p>A Tor SOCKS port is available on your {{ cfg.box_name }} on TCP port
9050.</p>
{% endblock %} {% endblock %}

View File

@ -19,36 +19,49 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Bittorrent (Transmission)</h2> <h2>{% trans "Bittorrent (Transmission)" %}</h2>
<p>BitTorrent is a peer-to-peer file sharing protocol. Transmission <p>
daemon handles Bitorrent file sharing. Note that BitTorrent is not {% blocktrans trimmed %}
anonymous.</p> BitTorrent is a peer-to-peer file sharing protocol.
Transmission daemon handles Bitorrent file sharing. Note that
BitTorrent is not anonymous.
{% endblocktrans %}
</p>
<p>Access the web interface at <a href="/transmission">/transmission</a></p> <p>
{% blocktrans trimmed %}
Access the web interface at <a href="/transmission">/transmission</a>
{% endblocktrans %}
</p>
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class='running-status active'></span> Transmission daemon is running <span class='running-status active'></span>
{% else %} {% trans "Transmission daemon is running" %}
<span class='running-status inactive'></span> Transmission daemon is not running {% else %}
{% endif %} <span class='running-status inactive'></span>
</p> {% trans "Transmission daemon is not running" %}
{% include "diagnostics_button.html" with module="transmission" %} {% endif %}
</p>
<h3>Configuration</h3> {% include "diagnostics_button.html" with module="transmission" %}
<form class="form" method="post"> <h3>{% trans "Configuration" %}</h3>
{% csrf_token %}
{{ form|bootstrap }} <form class="form" method="post">
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="Update setup"/> {{ form|bootstrap }}
</form>
<input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -18,18 +18,25 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>{{ title }}</h2> <h2>{{ title }}</h2>
<p>This will run unattended-upgrades, which will attempt to upgrade your system <p>
with the latest Debian packages. It may take a few minutes to complete.</p> {% 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 %}
</p>
<form class="form" method="post" action="{% url 'upgrades:run' %}"> <form class="form" method="post" action="{% url 'upgrades:run' %}">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-primary" value="Upgrade now &raquo;"/> <input type="submit" class="btn btn-primary"
value="{% trans "Upgrade now &raquo;" %}"/>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -29,8 +30,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary btn-md" value="Update setup"/> <input type="submit" class="btn btn-primary btn-md"
value="{% trans "Update setup" %}"/>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -18,37 +18,42 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>{{title}}</h2> <h2>{{title}}</h2>
{% if upgrades_error %} {% if upgrades_error %}
<div class="alert alert-danger" role="alert"> <div class="alert alert-danger" role="alert">
There was an error while upgrading. {% trans "There was an error while upgrading." %}
</div> </div>
<h5>Output from unattended-upgrades:</h5>
<pre>{{ upgrades_error }}</pre>
{% endif %}
{% if upgrades_output %} <h5>{% trans "Output from unattended-upgrades:" %}</h5>
<div class="row">
<div class="col-lg-6"> <pre>{{ upgrades_error }}</pre>
<div class="alert alert-success" role="alert"> {% endif %}
The operating system is up to date now. &nbsp;
<button type="button" class="btn btn-default show-details" style='display:none'> {% if upgrades_output %}
Show Details <div class="row">
<div class="caret"></div> <div class="col-lg-6">
</button> <div class="alert alert-success" role="alert">
{% trans "The operating system is up to date now. &nbsp;" %}
<button type="button" class="btn btn-default show-details"
style='display:none'>
{% trans "Show Details" %}
<div class="caret"></div>
</button>
</div>
</div> </div>
</div> </div>
</div>
<div class="details"> <div class="details">
<h5>Output from unattended-upgrades:</h5> <h5>{% trans "Output from unattended-upgrades:" %}</h5>
<pre>{{ upgrades_output }}</pre> <pre>{{ upgrades_output }}</pre>
</div> </div>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@ -19,10 +19,15 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h3>Change Password for <em>{{ form.user.username }}</em></h3> <h3>
{% blocktrans trimmed %}
Change Password for <em>{{ form.user.username }}</em>
{% endblocktrans %}
</h3>
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
@ -31,8 +36,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Save Password"/> <input type="submit" class="btn btn-primary"
value="{% trans "Save Password" %}"/>
</form> </form>
</div> </div>
</div> </div>

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
@ -37,8 +38,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Create User"/> <input type="submit" class="btn btn-primary"
value="{%trans "Create User" %}"/>
</form> </form>
</div> </div>
</div> </div>

View File

@ -19,21 +19,26 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h3>Delete User <em>{{ object.username }}</em></h3> <h3>
{% blocktrans trimmed %}
Delete User <em>{{ object.username }}</em>
{% endblocktrans %}
</h3>
<p>Delete user permanently?</p> <p>{% trans "Delete user permanently?" %}</p>
<form class="form" method="post"> <form class="form" method="post">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-md btn-primary" <input type="submit" class="btn btn-md btn-primary"
value="Delete {{ object.username }}"/> value="{% blocktrans %}Delete {{ object.username }}{% endblocktrans %}"/>
<a href="{% url 'users:index' %}" role="button" <a href="{% url 'users:index' %}" role="button"
class="btn btn-md btn-primary">Cancel</a> class="btn btn-md btn-primary">{% trans "Cancel" %}</a>
</form> </form>
{% endblock %} {% endblock %}

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
@ -41,14 +42,15 @@
<div class="list-group-item clearfix"> <div class="list-group-item clearfix">
<a href="{% url 'users:delete' user.username %}" <a href="{% url 'users:delete' user.username %}"
class="btn btn-default btn-sm pull-right" class="btn btn-default btn-sm pull-right"
role="button" title="Delete user {{ user.username }}"> role="button"
title="{% blocktrans %}Delete user {{ user.username }}{% endblocktrans %}">
<span class="glyphicon glyphicon-trash" <span class="glyphicon glyphicon-trash"
aria-hidden="true"></span> aria-hidden="true"></span>
</a> </a>
<a class='user-edit-label' <a class='user-edit-label'
href="{% url 'users:edit' user.username %}" href="{% url 'users:edit' user.username %}"
title="Edit user {{ user.username }}"> title="{% blocktrans %}Edit user {{ user.username }}{% endblocktrans %}">
{{ user.username }} {{ user.username }}
</a> </a>

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
<style type="text/css"> <style type="text/css">
@ -30,13 +31,19 @@
{% block content %} {% block content %}
<h3>Edit User <em>{{ object.username }}</em></h3> <h3>
{% blocktrans trimmed %}
Edit User <em>{{ object.username }}</em>
{% endblocktrans %}
</h3>
<p> <p>
Use the {% url 'users:change_password' as change_password_url %}
<a href='{% url 'users:change_password' object.username %}'>
change password form {% blocktrans trimmed %}
</a> to change the password. Use the <a href='{{ change_password_url }}'>change password form
</a> to change the password.
{% endblocktrans %}
</p> </p>
<div class="row"> <div class="row">
@ -46,8 +53,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<input type="submit" class="btn btn-primary" value="Save Changes"/> <input type="submit" class="btn btn-primary"
value="{% trans "Save Changes" %}"/>
</form> </form>
</div> </div>
</div> </div>

View File

@ -19,45 +19,65 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
<h2>Chat Server (XMPP)</h2> <h2>{% trans "Chat Server (XMPP)" %}</h2>
<p>XMPP is an open and standardized communication protocol. Here you <p>
can run and configure your XMPP server, called ejabberd.</p> {% blocktrans trimmed %}
XMPP is an open and standardized communication protocol. Here
you can run and configure your XMPP server, called ejabberd.
{% endblocktrans %}
</p>
<p>To actually communicate, you can use the <a href='/jwchat'>web client</a> or <p>
any other <a href='http://xmpp.org/xmpp-software/clients/' target='_blank'> {% blocktrans trimmed %}
XMPP client </a>.</p> To actually communicate, you can use the <a href='/jwchat'>web
client</a> or any other <a href='http://xmpp.org/xmpp-software/clients/'
target='_blank'>XMPP client</a>.
{% endblocktrans %}
</p>
<p>Your XMPP server domain is set to <b>{{ status.domainname }}</b>. User IDs <p>
will look like <i>username@{{ status.domainname }}</i>. You can setup your {% url 'config:index' as index_url %}
domain on the system <a href="{% url 'config:index' %}">Configure</a> {% blocktrans trimmed with domainname=status.domainname %}
page.</p> Your XMPP server domain is set to <b>{{ domainname }}</b>. User
IDs will look like <i>username@{{ domainname }}</i>. You
can setup your domain on the system
<a href="{{ index_url }}">Configure</a> page.
{% endblocktrans %}
</p>
<p><a href='/jwchat' target='_blank' class='btn btn-primary'> Launch web <p>
client</a></p> <a href='/jwchat' target='_blank' class='btn btn-primary'>
{% trans "Launch web client" %}</a>
</p>
<h3>Status</h3> <h3>{% trans "Status" %}</h3>
<p class="running-status-parent"> <p class="running-status-parent">
{% if status.is_running %} {% if status.is_running %}
<span class="running-status active"></span> ejabberd is running <span class="running-status active"></span>
{% else %} {% trans "ejabberd is running" %}
<span class="running-status inactive"></span> ejabberd is not running {% else %}
{% endif %} <span class="running-status inactive"></span>
</p> {% trans "ejabberd is not running" %}
{% include "diagnostics_button.html" with module="xmpp" %} {% endif %}
</p>
<h3>Configuration</h3> {% include "diagnostics_button.html" with module="xmpp" %}
<form class="form" method="post"> <h3>{% trans "Configuration" %}</h3>
{% csrf_token %}
{{ form|bootstrap }} <form class="form" method="post">
{% csrf_token %}
<input type="submit" class="btn btn-primary" value="Update setup"/> {{ form|bootstrap }}
</form>
<input type="submit" class="btn btn-primary"
value="{% trans "Update setup" %}"/>
</form>
{% endblock %} {% endblock %}

View File

@ -18,17 +18,25 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>404</h2> <h2>{% trans "404" %}</h2>
<p>Requested page {{ request_path }} was not found.</p> <p>
{% blocktrans trimmed %}
Requested page {{ request_path }} was not found.
{% endblocktrans %}
</p>
<p>If you believe this missing page should exist, please file a bug with either <p>
the Plinth project (<a href="https://github.com/freedombox/Plinth/issues">it {% blocktrans trimmed %}
has an issue tracker</a>) or the people responsible for the module you are If you believe this missing page should exist, please file a bug
trying to access.</p> at the Plinth project
<a href="https://github.com/freedombox/Plinth/issues">issue
<p>Sorry for the mistake.</p> tracker</a>.
{% endblocktrans %}
</p>
{% endblock %} {% endblock %}

View File

@ -18,13 +18,19 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% block content %} {% block content %}
<h2>500</h2> <h2>{% trans "500" %}</h2>
<p>This is an internal error and not something you caused or can fix. Please <p>
report the error on {% blocktrans trimmed %}
the <a href="https://github.com/freedombox/Plinth/issues">bug tracker</a> so This is an internal error and not something you caused or can
we can fix it.</p> fix. Please report the error on
the <a href="https://github.com/freedombox/Plinth/issues">bug
tracker</a> so we can fix it.
{% endblocktrans %}
</p>
{% endblock %} {% endblock %}

View File

@ -1,3 +1,4 @@
{% load i18n %}
{% load static %} {% load static %}
{% load plinth_extras %} {% load plinth_extras %}
@ -44,10 +45,11 @@
<meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noodp, noimageindex, notranslate" /> <meta name="googlebot" content="noindex, nofollow, noarchive, nosnippet, noodp, noimageindex, notranslate" />
<meta name="msnbot" content="noindex, nofollow, noarchive, noodp" /> <meta name="msnbot" content="noindex, nofollow, noarchive, noodp" />
<meta name="slurp" content="noindex, nofollow, noarchive, noodp, noydir" /> <meta name="slurp" content="noindex, nofollow, noarchive, noodp, noydir" />
<meta name="description" content="Plinth administrative interface for the FreedomBox" /> <meta name="description"
content="{% trans "Plinth administrative interface for the FreedomBox" %}" />
{% block title %} {% block title %}
<title> <title>
{% if title %} {{ title }} {% else %} FreedomBox {% endif %} {% if title %} {{ title }} {% else %} {% trans "FreedomBox" %} {% endif %}
</title> </title>
{% endblock %} {% endblock %}
@ -76,29 +78,29 @@
<div class="navbar-header"> <div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" <button type="button" class="navbar-toggle" data-toggle="collapse"
data-target=".navbar-collapse"> data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span> <span class="sr-only">{% trans "Toggle navigation" %}</span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<a href="{% url 'index' %}" class="navbar-brand" title="Applications"> <a href="{% url 'index' %}" class="navbar-brand" title="{% trans "Applications" %}">
<img src="{% static 'theme/img/freedombox-logo-32px.png' %}" <img src="{% static 'theme/img/freedombox-logo-32px.png' %}"
alt="FreedomBox" /> alt="{% trans "FreedomBox" %}" />
Applications {% trans "Applications" %}
</a> </a>
</div> </div>
<div class="collapse navbar-collapse"> <div class="collapse navbar-collapse">
{% block add_nav_and_login %} {% block add_nav_and_login %}
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right">
<li> <li>
<a href="{% url 'help:index' %}" title="Help"> <a href="{% url 'help:index' %}" title="{% trans "Help" %}">
<span class="glyphicon-question-sign glyphicon nav-icon"></span> <span class="glyphicon-question-sign glyphicon nav-icon"></span>
</a> </a>
</li> </li>
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li> <li>
<a href="{% url 'system:index' %}" title="System Configuration"> <a href="{% url 'system:index' %}" title="{% trans "System Configuration" %}">
<span class="glyphicon-cog glyphicon nav-icon"></span> <span class="glyphicon-cog glyphicon nav-icon"></span>
</a> </a>
</li> </li>
@ -112,27 +114,29 @@
<span class="caret"></span></a> <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li><a href="{% url 'users:edit' user.username %}" <li><a href="{% url 'users:edit' user.username %}"
title="Edit">Edit</a></li> title="{% trans "Edit"%}">{% trans "Edit" %}</a></li>
<li><a href="{% url 'users:change_password' user.username %}" <li><a href="{% url 'users:change_password' user.username %}"
title="Change password">Change password</a></li> title="{% trans "Change password" %}">
{% trans "Change password" %}</a></li>
<li class="divider"></li> <li class="divider"></li>
<li><a href="{% url 'users:logout' %}" title="Log out"> <li><a href="{% url 'users:logout' %}"
Log out</a></li> title="{% trans "Log out" %}">
{% trans "Log out" %}</a></li>
</ul> </ul>
</li> </li>
{% else %} {% else %}
<li> <li>
<a href="{% url 'users:login' %}" title="Log in"> <a href="{% url 'users:login' %}" title="{% trans "Log in" %}">
<i class="glyphicon glyphicon-user nav-icon"></i> <i class="glyphicon glyphicon-user nav-icon"></i>
Log in</a> {% trans "Log in" %}</a>
</li> </li>
{% endif %} {% endif %}
{% if user.is_authenticated %} {% if user.is_authenticated %}
<li id="logout-nojs"> <li id="logout-nojs">
<a href="{% url 'users:logout' %}" title="Log out"> <a href="{% url 'users:logout' %}" title="{% trans "Log out" %}">
<i class="glyphicon glyphicon-remove-circle nav-icon"></i> <i class="glyphicon glyphicon-remove-circle nav-icon"></i>
Log out</a> {% trans "Log out" %}</a>
</li> </li>
{% endif %} {% endif %}
</ul> </ul>

View File

@ -19,6 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block content %} {% block content %}
@ -30,7 +31,8 @@
{{ form|bootstrap }} {{ form|bootstrap }}
<div class="text-center"> <div class="text-center">
<input type="submit" class="btn btn-primary" value="Login" /> <input type="submit" class="btn btn-primary"
value="{% trans "Login" %}" />
</div> </div>
</div> </div>
</div> </div>

View File

@ -17,6 +17,8 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
<ul class="nav nav-pills nav-stacked"> <ul class="nav nav-pills nav-stacked">
{% for item in menu.items %} {% for item in menu.items %}

View File

@ -17,6 +17,8 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
{% for message in messages %} {% for message in messages %}
<div class='alert alert-{{ message.tags }} alert-dismissable'> <div class='alert alert-{{ message.tags }} alert-dismissable'>
<a class="close" data-dismiss="alert">&times;</a> <a class="close" data-dismiss="alert">&times;</a>

View File

@ -19,7 +19,7 @@
{% endcomment %} {% endcomment %}
{% load bootstrap %} {% load bootstrap %}
{% load i18n %}
{% block page_head %} {% block page_head %}
@ -32,16 +32,23 @@
{% block content %} {% block content %}
<h2>Installation</h2> <h2>{% trans "Installation" %}</h2>
{% if not is_installing %} {% if not is_installing %}
<p>This feature requires addtional packages to be installed. Do you <p>
wish to install them?</p> {% blocktrans trimmed %}
This feature requires addtional packages to be installed. Do
you wish to install them?
{% endblocktrans %}
</p>
<table class="table"> <table class="table">
<thead> <thead>
<tr><th>Package</th><th>Summary</th></tr> <tr>
<th>{% trans "Package" %}</th>
<th>{% trans "Summary" %}</th>
</tr>
</thead> </thead>
<tbody> <tbody>
{% for package_name, package in packages.items %} {% for package_name, package in packages.items %}
@ -55,21 +62,30 @@
<form action="" method="post"> <form action="" method="post">
{% csrf_token %} {% csrf_token %}
<input type="submit" class="btn btn-md btn-primary" value="Install" />
<input type="submit" class="btn btn-md btn-primary"
value="{% trans "Install" %}" />
</form> </form>
{% else %} {% else %}
{% for key, transaction in transactions.items %} {% for key, transaction in transactions.items %}
<div>Installing {{ transaction.package_names|join:", " }}: <div>
{{ transaction.status_string }} {% blocktrans trimmed %}
Installing {{ transaction.package_names|join:", " }}:
{{ transaction.status_string }}
{% endblocktrans %}
</div> </div>
<div class="progress"> <div class="progress">
<div class="progress-bar progress-bar-striped active" <div class="progress-bar progress-bar-striped active"
role="progressbar" aria-valuemin="0" aria-valuemax="100" role="progressbar" aria-valuemin="0" aria-valuemax="100"
aria-valuenow="{{ transaction.percentage }}" aria-valuenow="{{ transaction.percentage }}"
style="width: {{ transaction.percentage }}%"> style="width: {{ transaction.percentage }}%">
<span class="sr-only">{{ transaction.percentage }}% complete</span> <span class="sr-only">
{% blocktrans trimmed %}
{{ transaction.percentage }}% complete
{% endblocktrans %}
</span>
</div> </div>
</div> </div>
{% endfor %} {% endfor %}

View File

@ -17,6 +17,8 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
<ul class="nav nav-pills nav-stacked"> <ul class="nav nav-pills nav-stacked">
{% for item in menu.items %} {% for item in menu.items %}

View File

@ -17,6 +17,8 @@
# #
{% endcomment %} {% endcomment %}
{% load i18n %}
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
{% for urlitem in subsubmenu %} {% for urlitem in subsubmenu %}
<li {% if urlitem.active %} class="active"{% endif %} <li {% if urlitem.active %} class="active"{% endif %}