From f6130c2335367863f59f6696fb1396af7106bbe7 Mon Sep 17 00:00:00 2001
From: Laouen Fernet <laouen.fernet@supelec.fr>
Date: Sun, 5 Aug 2018 18:57:36 +0200
Subject: [PATCH] Translation of logs/ (front)

---
 logs/acl.py                                |   5 +-
 logs/locale/fr/LC_MESSAGES/django.mo       | Bin 0 -> 5018 bytes
 logs/locale/fr/LC_MESSAGES/django.po       | 338 +++++++++++++++++++++
 logs/templates/logs/aff_stats_general.html |  17 +-
 logs/templates/logs/aff_stats_logs.html    |  60 ++--
 logs/templates/logs/aff_stats_models.html  |  33 +-
 logs/templates/logs/aff_stats_users.html   |  43 +--
 logs/templates/logs/aff_summary.html       |  87 +++---
 logs/templates/logs/delete.html            |  15 +-
 logs/templates/logs/index.html             |  16 +-
 logs/templates/logs/sidebar.html           |  14 +-
 logs/templates/logs/stats_general.html     |  16 +-
 logs/templates/logs/stats_logs.html        |  16 +-
 logs/templates/logs/stats_models.html      |  16 +-
 logs/templates/logs/stats_users.html       |  16 +-
 logs/views.py                              | 165 +++++-----
 16 files changed, 619 insertions(+), 238 deletions(-)
 create mode 100644 logs/locale/fr/LC_MESSAGES/django.mo
 create mode 100644 logs/locale/fr/LC_MESSAGES/django.po

diff --git a/logs/acl.py b/logs/acl.py
index 1ec227d3..ee9a7b1b 100644
--- a/logs/acl.py
+++ b/logs/acl.py
@@ -25,6 +25,7 @@
 
 Here are defined some functions to check acl on the application.
 """
+from django.utils.translation import ugettext as _
 
 
 def can_view(user):
@@ -38,4 +39,6 @@ def can_view(user):
         viewing is granted and msg is a message (can be None).
     """
     can = user.has_module_perms('admin')
-    return can, None if can else "Vous ne pouvez pas voir cette application."
+    return can, None if can else _("You don't have the right to view this"
+                                   " application.")
+
diff --git a/logs/locale/fr/LC_MESSAGES/django.mo b/logs/locale/fr/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000000000000000000000000000000000..030b0cac0059428ce6aeedd0cde9e2a0d4404c1b
GIT binary patch
literal 5018
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

literal 0
HcmV?d00001

diff --git a/logs/locale/fr/LC_MESSAGES/django.po b/logs/locale/fr/LC_MESSAGES/django.po
new file mode 100644
index 00000000..70c58073
--- /dev/null
+++ b/logs/locale/fr/LC_MESSAGES/django.po
@@ -0,0 +1,338 @@
+# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
+# se veut agnostique au réseau considéré, de manière à être installable en
+# quelques clics.
+#
+# Copyright © 2018 Maël Kervella
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-08-15 20:12+0200\n"
+"PO-Revision-Date: 2018-06-23 16:01+0200\n"
+"Last-Translator: Laouen Fernet <laouen.fernet@supelec.fr>\n"
+"Language-Team: \n"
+"Language: fr_FR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: acl.py:42
+msgid "You don't have the right to view this application."
+msgstr "Vous n'avez pas le droit de voir cette application."
+
+#: templates/logs/aff_stats_logs.html:36
+msgid "Edited object"
+msgstr "Objet modifié"
+
+#: templates/logs/aff_stats_logs.html:37
+#: templates/logs/aff_stats_models.html:32
+msgid "Object type"
+msgstr "Type d'objet"
+
+#: templates/logs/aff_stats_logs.html:38
+msgid "Edited by"
+msgstr "Modifié par"
+
+#: templates/logs/aff_stats_logs.html:40
+msgid "Date of editing"
+msgstr "Date de modification"
+
+#: templates/logs/aff_stats_logs.html:42
+msgid "Comment"
+msgstr "Commentaire"
+
+#: templates/logs/aff_stats_logs.html:58 templates/logs/aff_summary.html:62
+#: templates/logs/aff_summary.html:85 templates/logs/aff_summary.html:104
+#: templates/logs/aff_summary.html:123 templates/logs/aff_summary.html:142
+msgid "Cancel"
+msgstr "Annuler"
+
+#: templates/logs/aff_stats_models.html:29
+#, python-format
+msgid "Statistics of the set %(key)s"
+msgstr "Statistiques de l'ensemble %(key)s"
+
+#: templates/logs/aff_stats_models.html:33
+msgid "Number of stored entries"
+msgstr "Nombre d'entrées enregistrées"
+
+#: templates/logs/aff_stats_users.html:31
+#, python-format
+msgid "Statistics per %(key_dict)s of %(key)s"
+msgstr "Statistiques par %(key_dict)s de %(key)s"
+
+#: templates/logs/aff_stats_users.html:34
+#, python-format
+msgid "Number of %(key)s per %(key_dict)s"
+msgstr "Nombre de %(key)s par %(key_dict)s"
+
+#: templates/logs/aff_stats_users.html:35
+msgid "Rank"
+msgstr "Rang"
+
+#: templates/logs/aff_summary.html:37
+msgid "Date"
+msgstr "Date"
+
+#: templates/logs/aff_summary.html:39
+msgid "Editing"
+msgstr "Modification"
+
+#: templates/logs/aff_summary.html:48
+#, python-format
+msgid "%(username)s has banned"
+msgstr "%(username)s a banni"
+
+#: templates/logs/aff_summary.html:52 templates/logs/aff_summary.html:75
+msgid "No reason"
+msgstr "Aucun motif"
+
+#: templates/logs/aff_summary.html:71
+#, python-format
+msgid "%(username)s has graciously authorised"
+msgstr "%(username)s a autorisé gracieusement"
+
+#: templates/logs/aff_summary.html:94
+#, python-format
+msgid "%(username)s has updated"
+msgstr "%(username)s a mis à jour"
+
+#: templates/logs/aff_summary.html:113
+#, python-format
+msgid "%(username)s has sold %(number)sx %(name)s to"
+msgstr "%(username)s a vendu %(number)sx %(name)s à"
+
+#: templates/logs/aff_summary.html:116
+#, python-format
+msgid "+%(duration)s months"
+msgstr "+%(duration)s mois"
+
+#: templates/logs/aff_summary.html:132
+#, python-format
+msgid "%(username)s has edited an interface of"
+msgstr "%(username)s a modifié une interface de"
+
+#: templates/logs/delete.html:29
+msgid "Deletion of actions"
+msgstr "Suppression d'actions"
+
+#: templates/logs/delete.html:35
+#, python-format
+msgid ""
+"Warning: are you sure you want to delete this action %(objet_name)s "
+"( %(objet)s )?"
+msgstr ""
+"Attention: voulez-vous vraiment supprimer cette action %(objet_name)s "
+"( %(objet)s ) ?"
+
+#: templates/logs/delete.html:36
+msgid "Confirm"
+msgstr "Confirmer"
+
+#: templates/logs/index.html:29 templates/logs/stats_general.html:29
+#: templates/logs/stats_logs.html:29 templates/logs/stats_models.html:29
+#: templates/logs/stats_users.html:29
+msgid "Statistics"
+msgstr "Statistiques"
+
+#: templates/logs/index.html:32 templates/logs/stats_logs.html:32 views.py:403
+msgid "Actions performed"
+msgstr "Actions effectuées"
+
+#: templates/logs/sidebar.html:33
+msgid "Summary"
+msgstr "Résumé"
+
+#: templates/logs/sidebar.html:37
+msgid "Events"
+msgstr "Évènements"
+
+#: templates/logs/sidebar.html:41
+msgid "General"
+msgstr "Général"
+
+#: templates/logs/sidebar.html:45
+msgid "Database"
+msgstr "Base de données"
+
+#: templates/logs/sidebar.html:49
+msgid "Wiring actions"
+msgstr "Actions de câblage"
+
+#: templates/logs/sidebar.html:53 views.py:325
+msgid "Users"
+msgstr "Utilisateurs"
+
+#: templates/logs/stats_general.html:32
+msgid "General statistics"
+msgstr "Statistiques générales"
+
+#: templates/logs/stats_models.html:32
+msgid "Database statistics"
+msgstr "Statistiques sur la base de données"
+
+#: templates/logs/stats_users.html:32
+msgid "Statistics about users"
+msgstr "Statistiques sur les utilisateurs"
+
+#: views.py:191
+msgid "Nonexistent revision."
+msgstr "Révision inexistante."
+
+#: views.py:194
+msgid "The action was deleted."
+msgstr "L'action a été supprimée."
+
+#: views.py:227
+msgid "Category"
+msgstr "Catégorie"
+
+#: views.py:228
+msgid "Number of users (members and clubs)"
+msgstr "Nombre d'utilisateurs (adhérents et clubs)"
+
+#: views.py:229
+msgid "Number of members"
+msgstr "Nombre d'adhérents"
+
+#: views.py:230
+msgid "Number of clubs"
+msgstr "Nombre de clubs"
+
+#: views.py:234
+msgid "Activated users"
+msgstr "Utilisateurs activés"
+
+#: views.py:242
+msgid "Disabled users"
+msgstr "Utilisateurs désactivés"
+
+#: views.py:250
+msgid "Archived users"
+msgstr "Utilisateurs archivés"
+
+#: views.py:258
+msgid "Contributing members"
+msgstr "Adhérents cotisants"
+
+#: views.py:264
+msgid "Users benefiting from a connection"
+msgstr "Utilisateurs bénéficiant d'une connexion"
+
+#: views.py:270
+msgid "Banned users"
+msgstr "Utilisateurs bannis"
+
+#: views.py:276
+msgid "Users benefiting from a free connection"
+msgstr "Utilisateurs bénéficiant d'une connexion gratuite"
+
+#: views.py:282
+msgid "Active interfaces (with access to the network)"
+msgstr "Interfaces actives (ayant accès au réseau)"
+
+#: views.py:292
+msgid "Active interfaces assigned IPv4"
+msgstr "Interfaces actives assignées IPv4"
+
+#: views.py:305
+msgid "IP range"
+msgstr "Plage d'IP"
+
+#: views.py:306
+msgid "VLAN"
+msgstr "VLAN"
+
+#: views.py:307
+msgid "Total number of IP addresses"
+msgstr "Nombre total d'adresses IP"
+
+#: views.py:308
+msgid "Number of assigned IP addresses"
+msgstr "Nombre d'adresses IP non assignées"
+
+#: views.py:309
+msgid "Number of IP address assigned to an activated machine"
+msgstr "Nombre d'adresses IP assignées à une machine activée"
+
+#: views.py:310
+msgid "Number of nonassigned IP addresses"
+msgstr "Nombre d'adresses IP non assignées"
+
+#: views.py:337
+msgid "Subscriptions"
+msgstr "Cotisations"
+
+#: views.py:359 views.py:420
+msgid "Machines"
+msgstr "Machines"
+
+#: views.py:386
+msgid "Topology"
+msgstr "Topologie"
+
+#: views.py:405
+msgid "Number of actions"
+msgstr "Nombre d'actions"
+
+#: views.py:419 views.py:437 views.py:442 views.py:447 views.py:462
+msgid "User"
+msgstr "Utilisateur"
+
+#: views.py:423
+msgid "Invoice"
+msgstr "Facture"
+
+#: views.py:426
+msgid "Ban"
+msgstr "Bannissement"
+
+#: views.py:429
+msgid "Whitelist"
+msgstr "Accès gracieux"
+
+#: views.py:432
+msgid "Rights"
+msgstr "Droits"
+
+#: views.py:436
+msgid "School"
+msgstr "Établissement"
+
+#: views.py:441
+msgid "Payment method"
+msgstr "Moyen de paiement"
+
+#: views.py:446
+msgid "Bank"
+msgstr "Banque"
+
+#: views.py:463
+msgid "Action"
+msgstr "Action"
+
+#: views.py:494
+msgid "No model found."
+msgstr "Aucun modèle trouvé."
+
+#: views.py:500
+msgid "Nonexistent entry."
+msgstr "Entrée inexistante."
+
+#: views.py:507
+msgid "You don't have the right to access this menu."
+msgstr "Vous n'avez pas le droit d'accéder à ce menu."
diff --git a/logs/templates/logs/aff_stats_general.html b/logs/templates/logs/aff_stats_general.html
index 49d067d0..662efa54 100644
--- a/logs/templates/logs/aff_stats_general.html
+++ b/logs/templates/logs/aff_stats_general.html
@@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 {% endcomment %}
 
-    {% for stats in stats_list %}
+{% for stats in stats_list %}
     <table class="table table-striped">
         <thead>
             <tr>
@@ -32,11 +32,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
             </tr>
         </thead>
        {% for key, stat in stats.1.items %}
-        <tr>
-            {% for item in stat %}
-            <td>{{ item }}</td>
-            {% endfor %}
-        </tr>
-        {% endfor %}
+           <tr>
+               {% for item in stat %}
+               <td>{{ item }}</td>
+               {% endfor %}
+           </tr>
+       {% endfor %}
     </table>
-        {% endfor %}
+{% endfor %}
+
diff --git a/logs/templates/logs/aff_stats_logs.html b/logs/templates/logs/aff_stats_logs.html
index 77e9e9b4..1ca79df9 100644
--- a/logs/templates/logs/aff_stats_logs.html
+++ b/logs/templates/logs/aff_stats_logs.html
@@ -28,39 +28,43 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 {% load logs_extra %}
 {% load acl %}
+{% load i18n %}
 
-    <table class="table table-striped">
-        <thead>
+<table class="table table-striped">
+    <thead>
+        <tr>
+            <th>{% trans "Edited object" %}</th>
+            <th>{% trans "Object type" %}</th>
+            {% trans "Edited by" as tr_edited_by %}
+            <th>{% include "buttons/sort.html" with prefix='logs' col='author' text=tr_edited_by %}</th>
+            {% trans "Date of editing" as tr_date_of_editing %}
+            <th>{% include "buttons/sort.html" with prefix='logs' col='date' text=tr_date_of_editing %}</th>
+            <th>{% trans "Comment" %}</th>
+            <th></th>
+        </tr>
+    </thead>
+    {% for revision in revisions_list %}
+        {% for reversion in revision.version_set.all %}
             <tr>
-                <th>Objet modifié</th>
-                <th>Type de l'objet</th>
-                <th>{% include "buttons/sort.html" with prefix='logs' col='author' text='Modification par' %}</th>
-                <th>{% include "buttons/sort.html" with prefix='logs' col='date' text='Date de modification' %}</th>
-                <th>Commentaire</th>
-                <th></th>
+                <td>{{ reversion.object|truncatechars:20 }}</td>
+                <td>{{ reversion.object|classname }}</td>
+                <td>{{ revision.user }}</td>
+                <td>{{ revision.date_created }}</td>
+                <td>{{ revision.comment }}</td>
+                {% can_edit_history %}
+                <td>
+                    <a class="btn btn-danger btn-sm" role="button" href="{% url 'logs:revert-action' revision.id %}">
+                        <i class="fa fa-times"></i>
+                        {% trans "Cancel" %}
+                    </a>
+                </td>
+                {% acl_end %}
             </tr>
-        </thead>
-        {% for revision in revisions_list %}
-        	{% for reversion in revision.version_set.all %}
-		<tr>
-            	    <td>{{ reversion.object|truncatechars:20 }}</td>
-                    <td>{{ reversion.object|classname }}</td>
-                    <td>{{ revision.user }}</td>
-                    <td>{{ revision.date_created }}</td>
-                    <td>{{ revision.comment }}</td>
-                    {% can_edit_history %}
-                    <td>
-                	<a class="btn btn-danger btn-sm" role="button" href="{% url 'logs:revert-action' revision.id %}">
-                    	<i class="fa fa-times"></i>
-                    	Annuler
-                	</a>
-            	    </td>
-            	    {% acl_end %}
-        	</tr>
-		{% endfor %}
         {% endfor %}
-    </table>
+    {% endfor %}
+</table>
 
 {% if revisions_list.paginator %}
 {% include "pagination.html" with list=revisions_list %}
 {% endif %}
+
diff --git a/logs/templates/logs/aff_stats_models.html b/logs/templates/logs/aff_stats_models.html
index bd035f82..7809dfdf 100644
--- a/logs/templates/logs/aff_stats_models.html
+++ b/logs/templates/logs/aff_stats_models.html
@@ -22,20 +22,23 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 {% endcomment %}
 
-    {% for key, stats in stats_list.items %}
+{% load i18n %}
+
+{% for key, stats in stats_list.items %}
     <table class="table table-striped">
-      <h4>Statistiques de l'ensemble {{ key }}</h4>
-        <thead>
-            <tr>
-                <th>Type d'objet</th>
-                <th>Nombre d'entrée stockées</th>
-            </tr>
-        </thead>
-       {% for key, stat in stats.items %}
-        <tr>
-            <td>{{ stat.0 }}</td>
-            <td>{{ stat.1 }}</td>
-	</tr>
-        {% endfor %}
+        <h4>{% blocktrans %}Statistics of the set {{ key }}{% endblocktrans %}</h4>
+            <thead>
+                <tr>
+                    <th>{% trans "Object type" %}</th>
+                    <th>{% trans "Number of stored entries" %}</th>
+                </tr>
+            </thead>
+            {% for key, stat in stats.items %}
+                <tr>
+                    <td>{{ stat.0 }}</td>
+                    <td>{{ stat.1 }}</td>
+                </tr>
+            {% endfor %}
     </table>
-        {% endfor %}
+{% endfor %}
+
diff --git a/logs/templates/logs/aff_stats_users.html b/logs/templates/logs/aff_stats_users.html
index f5b21c7e..0ea6a426 100644
--- a/logs/templates/logs/aff_stats_users.html
+++ b/logs/templates/logs/aff_stats_users.html
@@ -22,24 +22,27 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 {% endcomment %}
 
-    {% for key_dict, stats_dict in stats_list.items %}
+{% load i18n %}
+
+{% for key_dict, stats_dict in stats_list.items %}
     {% for key, stats in stats_dict.items %}
-    <table class="table table-striped">
-        <thead>
-	<h4>Statistiques par {{ key_dict }} de {{ key }}</h4>
-            <tr>
-		<th>{{ key_dict }}</th>
-		<th>Nombre de {{ key }} par {{ key_dict }}</th>
-		<th>Rang</th>
-            </tr>
-        </thead>
-       {% for stat in stats %}
-        <tr>
-            <td>{{ stat|truncatechars:25 }}</td>
-            <td>{{ stat.num }}</td>
-	    <td>{{ forloop.counter }}</td>
-	</tr>
-        {% endfor %}
-    </table>
-        {% endfor %}
-	{% endfor %}
+        <table class="table table-striped">
+            <thead>
+                <h4>{% blocktrans %}Statistics per {{ key_dict }} of {{ key }}{% endblocktrans %}</h4>
+                <tr>
+                    <th>{{ key_dict }}</th>
+                    <th>{% blocktrans %}Number of {{ key }} per {{ key_dict }}{% endblocktrans %}</th>
+                    <th>{% trans "Rank" %}</th>
+                </tr>
+            </thead>
+            {% for stat in stats %}
+                <tr>
+                    <td>{{ stat|truncatechars:25 }}</td>
+                    <td>{{ stat.num }}</td>
+                    <td>{{ forloop.counter }}</td>
+                </tr>
+            {% endfor %}
+        </table>
+    {% endfor %}
+{% endfor %}
+
diff --git a/logs/templates/logs/aff_summary.html b/logs/templates/logs/aff_summary.html
index f743d637..c9ebfe55 100644
--- a/logs/templates/logs/aff_summary.html
+++ b/logs/templates/logs/aff_summary.html
@@ -28,122 +28,127 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 {% load logs_extra %}
 {% load acl %}
-    <table class="table table-striped">
-        <thead>
-            <tr>
-                <th>{% include "buttons/sort.html" with prefix='sum' col='date' text='Date' %}</th>
-                <th>Modification</th>
-		<th></th>
-            </tr>
-        </thead>
+
+{% load i18n %}
+
+<table class="table table-striped">
+    <thead>
+        <tr>
+            {% trans "Date" as tr_date %}
+            <th>{% include "buttons/sort.html" with prefix='sum' col='date' text=tr_date %}</th>
+            <th>{% trans "Editing" %}</th>
+            <th></th>
+        </tr>
+    </thead>
     {% for v in versions_list %}
     {% if v.version.content_type.model == 'ban' %}
         <tr class="danger">
             <td>{{ v.datetime }}</td>
             <td>
-                {{ v.username }} a banni
+                {% blocktrans with username=v.username %}{{ username }} has banned{% endblocktrans %}
                 <a href="{% url 'users:profil' v.version.object.user_id %}">{{ v.version.object.user.get_username }}</a>
-		(<i>
+                (<i>
                 {% if v.version.object.raison == '' %}
-                    Aucune raison
+                    {% trans "No reason" %}
                 {% else %}
                     {{ v.version.object.raison }}
                 {% endif %}
                 </i>)
             </td>
-        {% can_edit_history %}
+	    {% can_edit_history %}
             <td>
                 <a class="btn btn-danger btn-sm" role="button" href="{% url 'logs:revert-action' v.rev_id %}">
                     <i class="fa fa-times"></i>
-                    Annuler
+                    {% trans "Cancel" %}
                 </a>
             </td>
-        {% acl_end %}
+            {% acl_end %}
         </tr>
     {% elif v.version.content_type.model == 'whitelist' %}
         <tr class="success">
             <td>{{ v.datetime }}</td>
             <td>
-                {{ v.username }} a autorisé gracieusement
+                {% blocktrans with username=v.username %}{{ username }} has graciously authorised{% endblocktrans %}
                 <a href="{% url 'users:profil' v.version.object.user_id %}">{{ v.version.object.user.get_username }}</a>
                 (<i>
                 {% if v.version.object.raison == '' %}
-                    Aucune raison
+                    {% trans "No reason" %}
                 {% else %}
                     {{ v.version.object.raison }}
                 {% endif %}
                 </i>)
             </td>
-        {% can_edit_history%}
+            {% can_edit_history%}
             <td>
                 <a class="btn btn-danger btn-sm" role="button" href="{% url 'logs:revert-action' v.rev_id %}">
                     <i class="fa fa-times"></i>
-                    Annuler
+                    {% trans "Cancel" %}
                 </a>
             </td>
-        {% acl_end %}
+            {% acl_end %}
         </tr>
     {% elif v.version.content_type.model == 'user' %}
         <tr>
             <td>{{ v.datetime }}</td>
             <td>
-                {{ v.username }} a mis à jour
+                {% blocktrans with username=v.username %}{{ username }} has updated{% endblocktrans %}
                 <a href="{% url 'users:profil' v.version.object.id %}">{{ v.version.object.get_username }}</a>
-            {% if v.comment != '' %}
-                (<i>{{ v.comment }}</i>)
-            {% endif %}
+                {% if v.comment != '' %}
+                    (<i>{{ v.comment }}</i>)
+                {% endif %}
             </td>
-        {% can_edit_history %}
+            {% can_edit_history %}
             <td>
                 <a class="btn btn-danger btn-sm" role="button" href="{% url 'logs:revert-action' v.rev_id %}">
                     <i class="fa fa-times"></i>
-                    Annuler
+                    {% trans "Cancel" %}
                 </a>
             </td>
-        {% acl_end %}
+            {% acl_end %}
         </tr>
     {% elif v.version.content_type.model == 'vente' %}
         <tr>
             <td>{{ v.datetime }}</td>
             <td>
-                {{ v.username }} a vendu {{ v.version.object.number }}x {{ v.version.object.name }} à
+                {% blocktrans with username=v.username number=v.version.object.number name=v.version.object.name %}{{ username }} has sold {{ number }}x {{ name }} to{% endblocktrans %}
                 <a href="{% url 'users:profil' v.version.object.facture.user_id %}">{{ v.version.object.facture.user.get_username }}</a>
-            {% if v.version.object.iscotisation %}
-                (<i>+{{ v.version.object.duration }} mois</i>)
-            {% endif %}
+                {% if v.version.object.iscotisation %}
+                    (<i>{% blocktrans with duration=v.version.object.duration %}+{{ duration }} months{% endblocktrans %}</i>)
+                {% endif %}
             </td>
-        {% can_edit_history %}
+            {% can_edit_history %}
             <td>
                 <a class="btn btn-danger btn-sm" role="button" href="{% url 'logs:revert-action' v.rev_id %}">
                     <i class="fa fa-times"></i>
-                    Annuler
+                    {% trans "Cancel" %}
                 </a>
             </td>
-        {% acl_end %}
+            {% acl_end %}
         </tr>
     {% elif v.version.content_type.model == 'interface' %}
         <tr>
             <td>{{ v.datetime }}</td>
             <td>
-                {{ v.username }} a modifié une interface de
+                {% blocktrans with username=v.username %}{{ username }} has edited an interface of{% endblocktrans %}
                 <a href="{% url 'users:profil' v.version.object.machine.user_id %}">{{ v.version.object.machine.user.get_username }}</a>
-            {% if v.comment != '' %}
-                (<i>{{ v.comment }}</i>)
-            {% endif %}
+                {% if v.comment != '' %}
+                    (<i>{{ v.comment }}</i>)
+                {% endif %}
             </td>
-        {% can_edit_history %}
+            {% can_edit_history %}
             <td>
                 <a class="btn btn-danger btn-sm" role="button" href="{% url 'logs:revert-action' v.rev_id %}">
                     <i class="fa fa-times"></i>
-                    Annuler
+                    {% trans "Cancel" %}
                 </a>
             </td>
-        {% acl_end %}
+            {% acl_end %}
         </tr>
     {% endif %}
     {% endfor %}
-    </table>
+</table>
 
 {% if versions_list.paginator %}
 {% include "pagination.html" with list=versions_list %}
 {% endif %}
+
diff --git a/logs/templates/logs/delete.html b/logs/templates/logs/delete.html
index 8bda7cb6..6ad11195 100644
--- a/logs/templates/logs/delete.html
+++ b/logs/templates/logs/delete.html
@@ -24,17 +24,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 {% endcomment %}
 
 {% load bootstrap3 %}
+{% load i18n %}
 
-{% block title %}Supression d'action{% endblock %}
+{% block title %}{% trans "Deletion of actions" %}{% endblock %}
 
 {% block content %}
 
 <form class="form" method="post">
     {% csrf_token %}
-    <h4>Attention, voulez-vous vraiment annuler cette action {{ objet_name }} ( {{ objet }} ) ?</h4>
-    {% bootstrap_button "Confirmer" button_type="submit" icon="trash" %}
+    <h4>{% blocktrans %}Warning: are you sure you want to delete this action {{ objet_name }} ( {{ objet }} )?{% endblocktrans %}</h4>
+    {% trans "Confirm" as tr_confirm %}
+    {% bootstrap_button tr_confirm button_type="submit" icon="trash" %}
 </form>
-  <br />
-  <br />
-  <br />
+    <br />
+    <br />
+    <br />
 {% endblock %}
+
diff --git a/logs/templates/logs/index.html b/logs/templates/logs/index.html
index a120a531..dde47c7d 100644
--- a/logs/templates/logs/index.html
+++ b/logs/templates/logs/index.html
@@ -24,13 +24,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 {% endcomment %}
 
 {% load bootstrap3 %}
+{% load i18n %}
 
-{% block title %}Statistiques{% endblock %}
+{% block title %}{%trans "Statistics" %}{% endblock %}
 
 {% block content %}
-  <h2>Actions effectuées</h2>
-  {%  include "logs/aff_summary.html" with  versions_list=versions_list %}
-  <br />
-  <br />
-  <br />
- {% endblock %}
+<h2>{% trans "Actions performed" %}</h2>
+    {%  include "logs/aff_summary.html" with  versions_list=versions_list %}
+    <br />
+    <br />
+    <br />
+{% endblock %}
+
diff --git a/logs/templates/logs/sidebar.html b/logs/templates/logs/sidebar.html
index 0e3048e3..87011cfc 100644
--- a/logs/templates/logs/sidebar.html
+++ b/logs/templates/logs/sidebar.html
@@ -24,32 +24,34 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 {% endcomment %}
 
 {% load acl %}
+{% load i18n %}
 
 {% block sidebar %}
     {% can_view_app logs %}
     <a class="list-group-item list-group-item-info" href="{% url "logs:index" %}">
         <i class="fa fa-clipboard-list"></i>
-        Résumé
+        {% trans "Summary" %}
     </a>
     <a class="list-group-item list-group-item-info" href="{% url "logs:stats-logs" %}">
         <i class="fa fa-calendar-alt"></i>
-        Évènements
+        {% trans "Events" %}
     </a>
     <a class="list-group-item list-group-item-info" href="{% url "logs:stats-general" %}">
         <i class="fa fa-chart-area"></i>
-        Général
+        {% trans "General" %}
     </a>
     <a class="list-group-item list-group-item-info" href="{% url "logs:stats-models" %}">
         <i class="fa fa-database"></i>
-        Base de données
+        {% trans "Database" %}
     </a>
     <a class="list-group-item list-group-item-info" href="{% url "logs:stats-actions" %}">
         <i class="fa fa-plug"></i>
-        Actions de cablage
+        {% trans "Wiring actions" %}
     </a>
     <a class="list-group-item list-group-item-info" href="{% url "logs:stats-users" %}">
         <i class="fa fa-users"></i>
-        Utilisateurs
+        {% trans "Users" %}
     </a>
     {% acl_end %}
 {% endblock %}
+
diff --git a/logs/templates/logs/stats_general.html b/logs/templates/logs/stats_general.html
index b8590df1..07e3ec26 100644
--- a/logs/templates/logs/stats_general.html
+++ b/logs/templates/logs/stats_general.html
@@ -24,13 +24,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 {% endcomment %}
 
 {% load bootstrap3 %}
+{% load i18n %}
 
-{% block title %}Statistiques générales{% endblock %}
+{% block title %}{% trans "Statistics" %}{% endblock %}
 
 {% block content %}
-  <h2>Statistiques générales</h2>
-  {%  include "logs/aff_stats_general.html" with stats_list=stats_list %}
-  <br />
-  <br />
-  <br />
- {% endblock %}
+<h2>{% trans "General statistics" %}</h2>
+    {%  include "logs/aff_stats_general.html" with stats_list=stats_list %}
+    <br />
+    <br />
+    <br />
+{% endblock %}
+
diff --git a/logs/templates/logs/stats_logs.html b/logs/templates/logs/stats_logs.html
index 4db77c68..4f547cc3 100644
--- a/logs/templates/logs/stats_logs.html
+++ b/logs/templates/logs/stats_logs.html
@@ -24,13 +24,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 {% endcomment %}
 
 {% load bootstrap3 %}
+{% load i18n %}
 
-{% block title %}Statistiques{% endblock %}
+{% block title %}{% trans "Statistics" %}{% endblock %}
 
 {% block content %}
-  <h2>Actions effectuées</h2>
-  {%  include "logs/aff_stats_logs.html" with  revisions_list=revisions_list %}
-  <br />
-  <br />
-  <br />
- {% endblock %}
+<h2>{% trans "Actions performed" %}</h2>
+    {%  include "logs/aff_stats_logs.html" with  revisions_list=revisions_list %}
+    <br />
+    <br />
+    <br />
+{% endblock %}
+
diff --git a/logs/templates/logs/stats_models.html b/logs/templates/logs/stats_models.html
index 0ed28525..9b912da2 100644
--- a/logs/templates/logs/stats_models.html
+++ b/logs/templates/logs/stats_models.html
@@ -24,13 +24,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 {% endcomment %}
 
 {% load bootstrap3 %}
+{% load i18n %}
 
-{% block title %}Statistiques des objets base de données{% endblock %}
+{% block title %}{% trans "Statistics" %}{% endblock %}
 
 {% block content %}
-  <h2>Statistiques bdd</h2>
-  {%  include "logs/aff_stats_models.html" with stats_list=stats_list %}
-  <br />
-  <br />
-  <br />
- {% endblock %}
+<h2>{% trans "Database statistics" %}</h2>
+    {%  include "logs/aff_stats_models.html" with stats_list=stats_list %}
+    <br />
+    <br />
+    <br />
+{% endblock %}
+
diff --git a/logs/templates/logs/stats_users.html b/logs/templates/logs/stats_users.html
index fa0843ec..8cc645ab 100644
--- a/logs/templates/logs/stats_users.html
+++ b/logs/templates/logs/stats_users.html
@@ -24,13 +24,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 {% endcomment %}
 
 {% load bootstrap3 %}
+{% load i18n %}
 
-{% block title %}Statistiques par utilisateur{% endblock %}
+{% block title %}{% trans "Statistics" %}{% endblock %}
 
 {% block content %}
-  <h2>Statistiques par utilisateur</h2>
-  {%  include "logs/aff_stats_users.html" with stats_list=stats_list %}
-  <br />
-  <br />
-  <br />
- {% endblock %}
+<h2>{% trans "Statistics about users" %}</h2>
+    {%  include "logs/aff_stats_users.html" with stats_list=stats_list %}
+    <br />
+    <br />
+    <br />
+{% endblock %}
+
diff --git a/logs/views.py b/logs/views.py
index d7ba59f3..a9fe5418 100644
--- a/logs/views.py
+++ b/logs/views.py
@@ -188,10 +188,10 @@ def revert_action(request, revision_id):
     try:
         revision = Revision.objects.get(id=revision_id)
     except Revision.DoesNotExist:
-        messages.error(request, u"Revision inexistante")
+        messages.error(request, _("Nonexistent revision."))
     if request.method == "POST":
         revision.revert()
-        messages.success(request, "L'action a été supprimée")
+        messages.success(request, _("The action was deleted."))
         return redirect(reverse('logs:index'))
     return form({
         'objet': revision,
@@ -224,14 +224,14 @@ def stats_general(request):
     stats = [
         [   # First set of data (about users)
             [   # Headers
-                "Categorie",
-                "Nombre d'utilisateurs (total club et adhérents)",
-                "Nombre d'adhérents",
-                "Nombre de clubs"
+                _("Category"),
+                _("Number of users (members and clubs)"),
+                _("Number of members"),
+                _("Number of clubs")
             ],
             {   # Data
                 'active_users': [
-                    "Users actifs",
+                    _("Activated users"),
                     User.objects.filter(state=User.STATE_ACTIVE).count(),
                     (Adherent.objects
                      .filter(state=Adherent.STATE_ACTIVE)
@@ -239,7 +239,7 @@ def stats_general(request):
                     Club.objects.filter(state=Club.STATE_ACTIVE).count()
                 ],
                 'inactive_users': [
-                    "Users désactivés",
+                    _("Disabled users"),
                     User.objects.filter(state=User.STATE_DISABLED).count(),
                     (Adherent.objects
                      .filter(state=Adherent.STATE_DISABLED)
@@ -247,7 +247,7 @@ def stats_general(request):
                     Club.objects.filter(state=Club.STATE_DISABLED).count()
                 ],
                 'archive_users': [
-                    "Users archivés",
+                    _("Archived users"),
                     User.objects.filter(state=User.STATE_ARCHIVE).count(),
                     (Adherent.objects
                      .filter(state=Adherent.STATE_ARCHIVE)
@@ -255,31 +255,31 @@ def stats_general(request):
                     Club.objects.filter(state=Club.STATE_ARCHIVE).count()
                 ],
                 'adherent_users': [
-                    "Cotisant à l'association",
+                    _("Contributing members"),
                     _all_adherent.count(),
                     _all_adherent.exclude(adherent__isnull=True).count(),
                     _all_adherent.exclude(club__isnull=True).count()
                 ],
                 'connexion_users': [
-                    "Utilisateurs bénéficiant d'une connexion",
+                    _("Users benefiting from a connection"),
                     _all_has_access.count(),
                     _all_has_access.exclude(adherent__isnull=True).count(),
                     _all_has_access.exclude(club__isnull=True).count()
                 ],
                 'ban_users': [
-                    "Utilisateurs bannis",
+                    _("Banned users"),
                     _all_baned.count(),
                     _all_baned.exclude(adherent__isnull=True).count(),
                     _all_baned.exclude(club__isnull=True).count()
                 ],
                 'whitelisted_user': [
-                    "Utilisateurs bénéficiant d'une connexion gracieuse",
+                    _("Users benefiting from a free connection"),
                     _all_whitelisted.count(),
                     _all_whitelisted.exclude(adherent__isnull=True).count(),
                     _all_whitelisted.exclude(club__isnull=True).count()
                 ],
                 'actives_interfaces': [
-                    "Interfaces actives (ayant accès au reseau)",
+                    _("Active interfaces (with access to the network)"),
                     _all_active_interfaces_count.count(),
                     (_all_active_interfaces_count
                      .exclude(machine__user__adherent__isnull=True)
@@ -289,7 +289,7 @@ def stats_general(request):
                      .count())
                 ],
                 'actives_assigned_interfaces': [
-                    "Interfaces actives et assignées ipv4",
+                    _("Active interfaces assigned IPv4"),
                     _all_active_assigned_interfaces_count.count(),
                     (_all_active_assigned_interfaces_count
                      .exclude(machine__user__adherent__isnull=True)
@@ -302,12 +302,12 @@ def stats_general(request):
         ],
         [   # Second set of data (about ip adresses)
             [   # Headers
-                "Range d'ip",
-                "Vlan",
-                "Nombre d'ip totales",
-                "Ip assignées",
-                "Ip assignées à une machine active",
-                "Ip non assignées"
+                _("IP range"),
+                _("VLAN"),
+                _("Total number of IP addresses"),
+                _("Number of assigned IP addresses"),
+                _("Number of IP address assigned to an activated machine"),
+                _("Number of nonassigned IP addresses")
             ],
             ip_dict  # Data already prepared
         ]
@@ -322,79 +322,87 @@ def stats_models(request):
     nombre d'users, d'écoles, de droits, de bannissements,
     de factures, de ventes, de banque, de machines, etc"""
     stats = {
-        'Users': {
-            'users': [User.PRETTY_NAME, User.objects.count()],
-            'adherents': [Adherent.PRETTY_NAME, Adherent.objects.count()],
-            'clubs': [Club.PRETTY_NAME, Club.objects.count()],
-            'serviceuser': [ServiceUser.PRETTY_NAME,
+        _("Users"): {
+            'users': [User._meta.verbose_name, User.objects.count()],
+            'adherents': [Adherent._meta.verbose_name, Adherent.objects.count()],
+            'clubs': [Club._meta.verbose_name, Club.objects.count()],
+            'serviceuser': [ServiceUser._meta.verbose_name,
                             ServiceUser.objects.count()],
-            'school': [School.PRETTY_NAME, School.objects.count()],
-            'listright': [ListRight.PRETTY_NAME, ListRight.objects.count()],
-            'listshell': [ListShell.PRETTY_NAME, ListShell.objects.count()],
-            'ban': [Ban.PRETTY_NAME, Ban.objects.count()],
-            'whitelist': [Whitelist.PRETTY_NAME, Whitelist.objects.count()]
+            'school': [School._meta.verbose_name, School.objects.count()],
+            'listright': [ListRight._meta.verbose_name, ListRight.objects.count()],
+            'listshell': [ListShell._meta.verbose_name, ListShell.objects.count()],
+            'ban': [Ban._meta.verbose_name, Ban.objects.count()],
+            'whitelist': [Whitelist._meta.verbose_name, Whitelist.objects.count()]
         },
-        'Cotisations': {
+        _("Subscriptions"): {
             'factures': [
-                Facture._meta.verbose_name.title(),
+                Facture._meta.verbose_name,
                 Facture.objects.count()
             ],
             'vente': [
-                Vente._meta.verbose_name.title(),
+                Vente._meta.verbose_name,
                 Vente.objects.count()
             ],
             'cotisation': [
-                Cotisation._meta.verbose_name.title(),
+                Cotisation._meta.verbose_name,
                 Cotisation.objects.count()
             ],
             'article': [
-                Article._meta.verbose_name.title(),
+                Article._meta.verbose_name,
                 Article.objects.count()
             ],
             'banque': [
-                Banque._meta.verbose_name.title(),
+                Banque._meta.verbose_name,
                 Banque.objects.count()
             ],
         },
-        'Machines': {
-            'machine': [Machine.PRETTY_NAME, Machine.objects.count()],
-            'typemachine': [MachineType.PRETTY_NAME,
+        _("Machines"): {
+            'machine': [Machine._meta.verbose_name,
+                        Machine.objects.count()],
+            'typemachine': [MachineType._meta.verbose_name,
                             MachineType.objects.count()],
-            'typeip': [IpType.PRETTY_NAME, IpType.objects.count()],
-            'extension': [Extension.PRETTY_NAME, Extension.objects.count()],
-            'interface': [Interface.PRETTY_NAME, Interface.objects.count()],
-            'alias': [Domain.PRETTY_NAME,
+            'typeip': [IpType._meta.verbose_name,
+                       IpType.objects.count()],
+            'extension': [Extension._meta.verbose_name,
+                          Extension.objects.count()],
+            'interface': [Interface._meta.verbose_name,
+                          Interface.objects.count()],
+            'alias': [Domain._meta.verbose_name,
                       Domain.objects.exclude(cname=None).count()],
-            'iplist': [IpList.PRETTY_NAME, IpList.objects.count()],
-            'service': [Service.PRETTY_NAME, Service.objects.count()],
+            'iplist': [IpList._meta.verbose_name,
+                       IpList.objects.count()],
+            'service': [Service._meta.verbose_name,
+                        Service.objects.count()],
             'ouvertureportlist': [
-                OuverturePortList.PRETTY_NAME,
+                OuverturePortList._meta.verbose_name,
                 OuverturePortList.objects.count()
             ],
-            'vlan': [Vlan.PRETTY_NAME, Vlan.objects.count()],
-            'SOA': [SOA.PRETTY_NAME, SOA.objects.count()],
-            'Mx': [Mx.PRETTY_NAME, Mx.objects.count()],
-            'Ns': [Ns.PRETTY_NAME, Ns.objects.count()],
-            'nas': [Nas.PRETTY_NAME, Nas.objects.count()],
+            'vlan': [Vlan._meta.verbose_name, Vlan.objects.count()],
+            'SOA': [SOA._meta.verbose_name, SOA.objects.count()],
+            'Mx': [Mx._meta.verbose_name, Mx.objects.count()],
+            'Ns': [Ns._meta.verbose_name, Ns.objects.count()],
+            'nas': [Nas._meta.verbose_name, Nas.objects.count()],
         },
-        'Topologie': {
-            'switch': [Switch.PRETTY_NAME, Switch.objects.count()],
-            'bornes': [AccessPoint.PRETTY_NAME, AccessPoint.objects.count()],
-            'port': [Port.PRETTY_NAME, Port.objects.count()],
-            'chambre': [Room.PRETTY_NAME, Room.objects.count()],
-            'stack': [Stack.PRETTY_NAME, Stack.objects.count()],
+        _("Topology"): {
+            'switch': [Switch._meta.verbose_name,
+                       Switch.objects.count()],
+            'bornes': [AccessPoint._meta.verbose_name,
+                       AccessPoint.objects.count()],
+            'port': [Port._meta.verbose_name, Port.objects.count()],
+            'chambre': [Room._meta.verbose_name, Room.objects.count()],
+            'stack': [Stack._meta.verbose_name, Stack.objects.count()],
             'modelswitch': [
-                ModelSwitch.PRETTY_NAME,
+                ModelSwitch._meta.verbose_name,
                 ModelSwitch.objects.count()
             ],
             'constructorswitch': [
-                ConstructorSwitch.PRETTY_NAME,
+                ConstructorSwitch._meta.verbose_name,
                 ConstructorSwitch.objects.count()
             ],
         },
-        'Actions effectuées sur la base':
+        _("Actions performed"):
         {
-            'revision': ["Nombre d'actions", Revision.objects.count()],
+            'revision': [_("Number of actions"), Revision.objects.count()],
         },
     }
     return render(request, 'logs/stats_models.html', {'stats_list': stats})
@@ -408,35 +416,35 @@ def stats_users(request):
     de moyens de paiements par user, de banque par user,
     de bannissement par user, etc"""
     stats = {
-        'Utilisateur': {
-            'Machines': User.objects.annotate(
+        _("User"): {
+            _("Machines"): User.objects.annotate(
                 num=Count('machine')
             ).order_by('-num')[:10],
-            'Facture': User.objects.annotate(
+            _("Invoice"): User.objects.annotate(
                 num=Count('facture')
             ).order_by('-num')[:10],
-            'Bannissement': User.objects.annotate(
+            _("Ban"): User.objects.annotate(
                 num=Count('ban')
             ).order_by('-num')[:10],
-            'Accès gracieux': User.objects.annotate(
+            _("Whitelist"): User.objects.annotate(
                 num=Count('whitelist')
             ).order_by('-num')[:10],
-            'Droits': User.objects.annotate(
+            _("Rights"): User.objects.annotate(
                 num=Count('groups')
             ).order_by('-num')[:10],
         },
-        'Etablissement': {
-            'Utilisateur': School.objects.annotate(
+        _("School"): {
+            _("User"): School.objects.annotate(
                 num=Count('user')
             ).order_by('-num')[:10],
         },
-        'Moyen de paiement': {
-            'Utilisateur': Paiement.objects.annotate(
+        _("Payment method"): {
+            _("User"): Paiement.objects.annotate(
                 num=Count('facture')
             ).order_by('-num')[:10],
         },
-        'Banque': {
-            'Utilisateur': Banque.objects.annotate(
+        _("Bank"): {
+            _("User"): Banque.objects.annotate(
                 num=Count('facture')
             ).order_by('-num')[:10],
         },
@@ -451,8 +459,8 @@ def stats_actions(request):
     utilisateurs.
     Affiche le nombre de modifications aggrégées par utilisateurs"""
     stats = {
-        'Utilisateur': {
-            'Action': User.objects.annotate(
+        _("User"): {
+            _("Action"): User.objects.annotate(
                 num=Count('revision')
             ).order_by('-num')[:40],
         },
@@ -489,14 +497,14 @@ def history(request, application, object_name, object_id):
     try:
         instance = model.get_instance(**kwargs)
     except model.DoesNotExist:
-        messages.error(request, _("No entry found."))
+        messages.error(request, _("Nonexistent entry."))
         return redirect(reverse(
             'users:profil',
             kwargs={'userid': str(request.user.id)}
         ))
     can, msg = instance.can_view(request.user)
     if not can:
-        messages.error(request, msg or _("You cannot acces to this menu"))
+        messages.error(request, msg or _("You don't have the right to access this menu."))
         return redirect(reverse(
             'users:profil',
             kwargs={'userid': str(request.user.id)}
@@ -513,3 +521,4 @@ def history(request, application, object_name, object_id):
         're2o/history.html',
         {'reversions': reversions, 'object': instance}
     )
+