diff --git a/l10n_community/editor.css b/l10n_community/editor.css
index 73440ef..59cab7a 100644
--- a/l10n_community/editor.css
+++ b/l10n_community/editor.css
@@ -265,6 +265,12 @@ code
   vertical-align: top;
 }
 
+.l10n-string span.l10n-space::after {
+  content: "⎵";
+  opacity: 0.4;
+  line-height: 19px;
+  vertical-align: baseline;
+}
 
 .l10n-string code,
 .l10n-string em.l10n-placeholder {
diff --git a/l10n_community/editor.js b/l10n_community/editor.js
index 68e0743..a105df6 100644
--- a/l10n_community/editor.js
+++ b/l10n_community/editor.js
@@ -78,6 +78,9 @@
      $('.actions .declined label').attr('title', Drupal.t('Decline'));
 
     var markup = function(string) {
+      // Add markers for spaces.
+      string = string.replace(/\s/g, '<span class="l10n-space"></span>$&');
+
       // Highlight placeholders with the l10n-placeholder class.
       string = string.replace(/([!@%]|<(ins|del)>[!@%]<\/(ins|del)>)(\w+|<(ins|del)>\w+<\/(ins|del)>)/g, '<em class="l10n-placeholder">$&</em>');
 
