diff --git a/app/assets/javascripts/application.js.coffee b/app/assets/javascripts/application.js.coffee
index 7dabcb6e8d0b3e9ae65a736e09e1e1e2811983b4..d3f0d2aa0fa41cd9390f5d9dd47e40bb8af8f02e 100644
--- a/app/assets/javascripts/application.js.coffee
+++ b/app/assets/javascripts/application.js.coffee
@@ -22,6 +22,7 @@
 #= require leaflet
 #= require leaflet.markercluster
 #= require leaflet.awesome-markers
+#= require frTypo
 #= require_tree .
 
 $(document).on 'turbolinks:load', ->
diff --git a/app/assets/javascripts/frTypo.coffee b/app/assets/javascripts/frTypo.coffee
new file mode 100644
index 0000000000000000000000000000000000000000..de926612476afdcf54ded24fd305e5c3a4d01a36
--- /dev/null
+++ b/app/assets/javascripts/frTypo.coffee
@@ -0,0 +1,47 @@
+###
+  @licstart  The following is the entire license notice for the JavaScript code in this page.
+
+  frTypo, la typographie française simplifiée
+
+      Copyright (C) 2013  acoeuro
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU Affero General Public License as
+  published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+
+  You should have received a copy of the GNU Affero General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+  @licend  The above is the entire license notice for the JavaScript code in this page.
+###
+
+$(document).on 'turbolinks:load', ->
+  if $('html').attr('lang') == 'fr'
+    # Ne devrait s'appliquer qu'à une page en français
+    $('body *').contents().filter ->
+      this.nodeType == Node.TEXT_NODE
+
+    .filter ->
+      # Supprime les éléments pouvant utiliser des ponctuations sans nécessiter
+      # un espacement
+      0 > ['CODE', 'PRE', 'STYLE'].indexOf this.parentNode.tagName
+
+    .filter ->
+      this.nodeValue.match(regexp)? || this.nodeValue.match(regexpPost)?
+
+    .each ->
+      console.log 'huuu'
+      $(this).replaceWith ->
+        this.nodeValue
+          .replace(regexp, '$1<span class="finePre">$2</span>$3')
+          .replace(regexpPost, '<span class="finePost">$1</span>$2')
+
+regexp = /([\w])([!?:;»%])([\s]|[^\w\/]|$)/g
+
+regexpPost = /([«])([\w])/g
diff --git a/app/assets/stylesheets/application.sass b/app/assets/stylesheets/application.sass
index d8af1c6917df7c0af99cb5bdb6003e8879cab0c1..d248b1057436b6b9342875ec9752b8520f36a348 100644
--- a/app/assets/stylesheets/application.sass
+++ b/app/assets/stylesheets/application.sass
@@ -12,6 +12,7 @@
  *
  *= require jquery-ui
  *= require jquery.tagsinput
+ *= require frTypo
  *= require_tree .
  */
 
diff --git a/app/assets/stylesheets/frTypo.sass b/app/assets/stylesheets/frTypo.sass
new file mode 100644
index 0000000000000000000000000000000000000000..7dd0b07a4fdabb01950eff1461f3e5238d90a21d
--- /dev/null
+++ b/app/assets/stylesheets/frTypo.sass
@@ -0,0 +1,5 @@
+.finePre, .city:after, span.label:after
+  margin-left: 0.25em
+.finePost
+  margin-right: 0.25em
+