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 00000000..030b0cac
Binary files /dev/null and b/logs/locale/fr/LC_MESSAGES/django.mo differ
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}
     )
+