diff --git a/CHANGELOG b/CHANGELOG
index 3c26a5e9211144f1caedb0cb18076deea23cab17..6ec368a6cf999765a9c6f9bf6a988a48bb286343 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1346,7 +1346,7 @@ Basic transcoding is now available to/from the following formats : ogg and mp3.
 
 This relies internally on FFMPEG and can put some load on your server.
 It's definitely recommended you setup some caching for the transcoded files
-at your webserver level. Check the the exemple nginx file at deploy/nginx.conf
+at your webserver level. Check the the exemple nginx file at deploy/nginx.conf
 for an implementation.
 
 On the frontend, usage of transcoding should be transparent in the player.
diff --git a/api/funkwhale_api/common/management/commands/script.py b/api/funkwhale_api/common/management/commands/script.py
index b46a4327b0996a97aadd49a6b3066e99644c6e7c..cbfc78f0f5dfc14e1ea3f69ba72a5a075004bbb2 100644
--- a/api/funkwhale_api/common/management/commands/script.py
+++ b/api/funkwhale_api/common/management/commands/script.py
@@ -50,7 +50,7 @@ class Command(BaseCommand):
             self.stdout.write(self.style.SUCCESS(name))
             self.stdout.write("")
             for line in script["help"].splitlines():
-                self.stdout.write("     {}".format(line))
+                self.stdout.write("     {}".format(line))
         self.stdout.write("")
 
     def get_scripts(self):
diff --git a/api/funkwhale_api/federation/signing.py b/api/funkwhale_api/federation/signing.py
index 5b74b8577fb08606641e3bf00b02e302032e49ee..1bb2b9d5de04fc54e5557a6097b2f3215cd73efe 100644
--- a/api/funkwhale_api/federation/signing.py
+++ b/api/funkwhale_api/federation/signing.py
@@ -13,7 +13,7 @@ from . import exceptions, utils
 
 logger = logging.getLogger(__name__)
 
-#  the request Date should be between now - 30s and now + 30s
+#  the request Date should be between now - 30s and now + 30s
 DATE_HEADER_VALID_FOR = 30
 
 
diff --git a/docs/importing-music.rst b/docs/importing-music.rst
index 76f086045aea99707b2c987f5af88e8462445044..4b4ea7c1dcde0f957be1280a27687df8e372edb2 100644
--- a/docs/importing-music.rst
+++ b/docs/importing-music.rst
@@ -98,14 +98,14 @@ directory is mounted as a volume as well::
       volumes:
       - ./data/music:/music:ro
       - ./data/media:/app/funkwhale_api/media
-      # add your symlinked dirs here
+      # add your symlinked dirs here
       - /media/nfsshare:/media/nfsshare:ro
 
     api:
       volumes:
       - ./data/music:/music:ro
       - ./data/media:/app/funkwhale_api/media
-      # add your symlinked dirs here
+      # add your symlinked dirs here
       - /media/nfsshare:/media/nfsshare:ro
 
 
diff --git a/front/src/App.vue b/front/src/App.vue
index 8e1abae7ff65c05c19f1cf5fa2931f42c8adb4e5..11ef9f13df004d45073234850ef4d49e40b9c823 100644
--- a/front/src/App.vue
+++ b/front/src/App.vue
@@ -9,7 +9,7 @@
             <input type="text" v-model="instanceUrl">
             <button type="submit" class="ui button"><translate>Submit</translate></button>
           </div>
-          <p>{{ $gettext('Suggested choices') }}</p>
+          <p><translate>Suggested choices</translate></p>
           <div class="ui bulleted list">
             <div class="ui item" v-for="url in suggestedInstances">
               <a @click="instanceUrl = url">{{ url }}</a>
@@ -61,7 +61,7 @@
               <h4 v-translate class="ui header">Options</h4>
               <div class="ui form">
                 <div class="ui field">
-                  <label>{{ $gettext('Change language') }}</label>
+                  <label><translate>Change language</translate></label>
                   <select class="ui dropdown" v-model="$language.current">
                     <option v-for="(language, key) in $language.available" :value="key">{{ language }}</option>
                   </select>
diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue
index beced0b44ecef42864dc3627ff3ad26503a6a358..2c193fc6e7cbd40ce938fab0f9eef816e8c37395 100644
--- a/front/src/components/Sidebar.vue
+++ b/front/src/components/Sidebar.vue
@@ -47,7 +47,7 @@
         <div class="item">
           <div class="header"><translate>Music</translate></div>
           <div class="menu">
-            <router-link class="item" :to="{path: '/library'}"><i class="sound icon"> </i><translate>Browse library</translate></router-link>
+            <router-link class="item" :to="{path: '/library'}"><i class="sound icon"></i><translate>Browse library</translate></router-link>
             <router-link class="item" v-if="$store.state.auth.authenticated" :to="{path: '/favorites'}"><i class="heart icon"></i><translate>Favorites</translate></router-link>
             <a
               @click="$store.commit('playlists/chooseTrack', null)"
diff --git a/front/src/components/audio/track/Table.vue b/front/src/components/audio/track/Table.vue
index 20322567dc384928e4ae4696cb6d658eb35f4fa9..40d33df732b26adf9ba76181092ea57d6970b453 100644
--- a/front/src/components/audio/track/Table.vue
+++ b/front/src/components/audio/track/Table.vue
@@ -4,9 +4,9 @@
       <tr>
         <th></th>
         <th></th>
-        <th colspan="6">{{ $gettext('Title') }}</th>
-        <th colspan="6">{{ $gettext('Artist') }}</th>
-        <th colspan="6">{{ $gettext('Album') }}</th>
+        <th colspan="6"><translate>Title</translate></th>
+        <th colspan="6"><translate>Artist</translate></th>
+        <th colspan="6"><translate>Album</translate></th>
         <th></th>
       </tr>
     </thead>
@@ -21,16 +21,16 @@
       <tr>
         <th colspan="3">
           <button @click="showDownloadModal = !showDownloadModal" class="ui basic button">
-            {{ $gettext('Download') }}
+             <translate>Download</translate>
           </button>
           <modal :show.sync="showDownloadModal">
-            <div class="header">{{ $gettext('Download tracks') }}</div>
+            <div class="header"><translate>Download tracks</translate></div>
             <div class="content">
               <div class="description">
-                <p>{{ $gettext('There is currently no way to download directly multiple tracks from funkwhale as a ZIP archive. However, you can use a command line tools such as cURL to easily download a list of tracks.') }}</p>
-                {{ $gettext('Simply copy paste the snippet below into a terminal to launch the download.') }}
+                <p><translate>There is currently no way to download directly multiple tracks from funkwhale as a ZIP archive. However, you can use a command line tools such as cURL to easily download a list of tracks.</translate></p>
+                 <translate>Simply copy paste the snippet below into a terminal to launch the download.</translate>
                 <div class="ui warning message">
-                  {{ $gettext('Keep your PRIVATE_TOKEN secret as it gives access to your account.') }}
+                   <translate>Keep your PRIVATE_TOKEN secret as it gives access to your account.</translate>
                 </div>
                 <pre>
 export PRIVATE_TOKEN="{{ $store.state.auth.token }}"
diff --git a/front/src/components/auth/Login.vue b/front/src/components/auth/Login.vue
index 2fdaaba41d4b1977cebc425d1000fa8d9b31cacf..88caa5afefccf12b0ac115613f45f94dec9046af 100644
--- a/front/src/components/auth/Login.vue
+++ b/front/src/components/auth/Login.vue
@@ -7,8 +7,8 @@
           <div v-if="error" class="ui negative message">
             <div class="header"><translate>We cannot log you in</translate></div>
             <ul class="list">
-              <li v-if="error == 'invalid_credentials'">{{ $gettext('Please double-check your username/password couple is correct') }}</li>
-              <li v-else>{{ $gettext('An unknown error happend, this can mean the server is down or cannot be reached') }}</li>
+              <li v-if="error == 'invalid_credentials'"><translate>Please double-check your username/password couple is correct</translate></li>
+              <li v-else><translate>An unknown error happend, this can mean the server is down or cannot be reached</translate></li>
             </ul>
           </div>
           <div class="field">
@@ -39,7 +39,7 @@
 
           </div>
           <button tabindex="3" :class="['ui', {'loading': isLoading}, 'right', 'floated', 'green', 'button']" type="submit">
-            {{ $gettext('Login') }}
+             <translate>Login</translate>
           </button>
         </form>
       </div>
diff --git a/front/src/components/auth/Profile.vue b/front/src/components/auth/Profile.vue
index 1d15b206facddfe42ef8510f8fbf49725bae74d4..556a9a67e65846517e9d07b069f75c7a4ca6568a 100644
--- a/front/src/components/auth/Profile.vue
+++ b/front/src/components/auth/Profile.vue
@@ -20,7 +20,7 @@
           <translate>Staff member</translate>
         </div>
         <router-link class="ui tiny basic button" :to="{path: '/settings'}">
-          <i class="setting icon"> </i>
+          <i class="setting icon"></i>
           <translate>Settings...</translate>
         </router-link>
 
diff --git a/front/src/components/auth/Settings.vue b/front/src/components/auth/Settings.vue
index 5a74b8888796477cbf75f85299e2da9259e6ed19..886fe598dc98c3406e00fd2b0d2cea3140fefb4e 100644
--- a/front/src/components/auth/Settings.vue
+++ b/front/src/components/auth/Settings.vue
@@ -48,12 +48,12 @@
             </ul>
           </div>
           <div class="field">
-            <label>{{ $gettext('Old password') }}</label>
+            <label><translate>Old password</translate></label>
             <password-input required v-model="old_password" />
 
           </div>
           <div class="field">
-            <label>{{ $gettext('New password') }}</label>
+            <label><translate>New password</translate></label>
             <password-input required v-model="new_password" />
           </div>
           <dangerous-button
@@ -65,7 +65,7 @@
             <div slot="modal-content">
               <p><translate>Changing your password will have the following consequences</translate></p>
               <ul>
-                <li><translate>You will be logged out from this session and have to log out with the new one</translate></li>
+                <li><translate>You will be logged out from this session and have to log in with the new one</translate></li>
                 <li><translate>Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password</translate></li>
               </ul>
             </div>
diff --git a/front/src/components/federation/LibraryFollowTable.vue b/front/src/components/federation/LibraryFollowTable.vue
index 6f2a4e4f9b80f4e346fe082d6f200c080f456f97..ba0f484eab885f60ab2620e3118ffc9d8a3b97b1 100644
--- a/front/src/components/federation/LibraryFollowTable.vue
+++ b/front/src/components/federation/LibraryFollowTable.vue
@@ -19,10 +19,10 @@
     <table v-if="result" class="ui very basic single line unstackable table">
       <thead>
         <tr>
-          <th>{{ $gettext('Actor') }}</th>
-          <th>{{ $gettext('Creation date') }}</th>
-          <th>{{ $gettext('Status') }}</th>
-          <th>{{ $gettext('Actions') }}</th>
+          <th><translate>Actor</translate></th>
+          <th><translate>Creation date</translate></th>
+          <th><translate>Status</translate></th>
+          <th><translate>Actions</translate></th>
         </tr>
       </thead>
       <tbody>
diff --git a/front/src/components/library/import/Main.vue b/front/src/components/library/import/Main.vue
index e7d9d7d3de3e235603026af32cfb913b54cc4f2f..08047fd2fc1b09f020c6b8680f24548a5f0ce964 100644
--- a/front/src/components/library/import/Main.vue
+++ b/front/src/components/library/import/Main.vue
@@ -50,7 +50,7 @@
           :class="['ui', 'positive', 'icon', {'disabled': !importBatch}, 'button']"
           :disabled="!importBatch"
           >
-            {{ $gettext('Finish import' )}}
+            <translate>Finish import</translate>
             <i class="check icon"></i>
           </button>
       </div>
diff --git a/front/src/components/manage/library/RequestsTable.vue b/front/src/components/manage/library/RequestsTable.vue
index be25c4bb4080564a06fad868272e7a3d8d54a8f6..da3d6636336c6fe8762c9ddf2b409a9bf4e6ccd9 100644
--- a/front/src/components/manage/library/RequestsTable.vue
+++ b/front/src/components/manage/library/RequestsTable.vue
@@ -69,24 +69,24 @@
           </td>
           <td>
             <span v-if="scope.obj.albums" :title="scope.obj.albums">{{ scope.obj.albums|truncate(30) }}</span>
-            <template v-else>{{ $gettext('N/A') }}</template>
+            <template v-else><translate>N/A</translate></template>
           </td>
           <td>
             <span v-if="scope.obj.comment" :title="scope.obj.comment">{{ scope.obj.comment|truncate(30) }}</span>
-            <template v-else>{{ $gettext('N/A') }}</template>
+            <template v-else><translate>N/A</translate></template>
           </td>
           <td>
             <human-date :date="scope.obj.creation_date"></human-date>
           </td>
           <td>
             <human-date v-if="scope.obj.imported_date" :date="scope.obj.creation_date"></human-date>
-            <template v-else>{{ $gettext('N/A') }}</template>
+            <template v-else><translate>N/A</translate></template>
           </td>
           <td>
             <router-link
               class="ui tiny basic button"
               :to="{name: 'library.import.launch', query: {request: scope.obj.id}}"
-              v-if="scope.obj.status === 'pending'">{{ $gettext('Create import') }}</router-link>
+              v-if="scope.obj.status === 'pending'"><translate>Create import</translate></router-link>
           </td>
         </template>
       </action-table>
diff --git a/front/src/components/manage/users/InvitationsTable.vue b/front/src/components/manage/users/InvitationsTable.vue
index 7d4864e87a3b68096f29f2880b5e266e6f769b81..9ebc077974cf9e3034bc5610b226918137c16ab2 100644
--- a/front/src/components/manage/users/InvitationsTable.vue
+++ b/front/src/components/manage/users/InvitationsTable.vue
@@ -44,7 +44,7 @@
         </template>
         <template slot="row-cells" slot-scope="scope">
           <td>
-            <router-link :to="{name: 'manage.users.users.detail', params: {id: scope.obj.id }}">{{ scope.obj.owner.username }}</router-link>
+            <router-link :to="{name: 'manage.users.users.detail', params: {id: scope.obj.id }}">{{ scope.obj.owner.username }}</router-link>
           </td>
           <td>
             <span v-if="scope.obj.users.length > 0" class="ui green basic label"><translate>Used</translate></span>
diff --git a/front/src/components/manage/users/UsersTable.vue b/front/src/components/manage/users/UsersTable.vue
index a2b486e234cab7201bdea32a3f464233e4deb4af..886b73fbb98d634ca221cf9ae5f8286f838ac700 100644
--- a/front/src/components/manage/users/UsersTable.vue
+++ b/front/src/components/manage/users/UsersTable.vue
@@ -45,14 +45,14 @@
         </template>
         <template slot="row-cells" slot-scope="scope">
           <td>
-            <router-link :to="{name: 'manage.users.users.detail', params: {id: scope.obj.id }}">{{ scope.obj.username }}</router-link>
+            <router-link :to="{name: 'manage.users.users.detail', params: {id: scope.obj.id }}">{{ scope.obj.username }}</router-link>
           </td>
           <td>
-            <span>{{ scope.obj.email }}</span>
+            <span>{{ scope.obj.email }}</span>
           </td>
           <td>
-            <span v-if="scope.obj.is_active" class="ui basic green label">{{ $gettext('Active') }}</span>
-            <span v-else class="ui basic grey label">{{ $gettext('Inactive') }}</span>
+            <span v-if="scope.obj.is_active" class="ui basic green label"><translate>Active</translate></span>
+            <span v-else class="ui basic grey label"><translate>Inactive</translate></span>
           </td>
           <td>
             <human-date :date="scope.obj.date_joined"></human-date>
diff --git a/front/src/views/admin/users/UsersDetail.vue b/front/src/views/admin/users/UsersDetail.vue
index 72efabd8966bbe05286893f805b88511ec477076..4e750cafa188218d48049c288ffa654118189087 100644
--- a/front/src/views/admin/users/UsersDetail.vue
+++ b/front/src/views/admin/users/UsersDetail.vue
@@ -143,7 +143,7 @@ export default {
   computed: {
     labels () {
       return {
-        inactive: this.$gettext('Determine if the user account is active or not. Inactive users cannot login or user the service.')
+        inactive: this.$gettext('Determine if the user account is active or not. Inactive users cannot login or use the service.')
       }
     },
     allPermissions () {
diff --git a/front/src/views/federation/LibraryDetail.vue b/front/src/views/federation/LibraryDetail.vue
index 4ddccb79b3ddea21193b6e4726cc4fc319c30c6a..708156c1984857f601320c7cf8577371c562cf29 100644
--- a/front/src/views/federation/LibraryDetail.vue
+++ b/front/src/views/federation/LibraryDetail.vue
@@ -93,7 +93,7 @@
                     </translate>
                   </template>
                   <template v-else>
-                    <translate>Unkwnown</translate>
+                    <translate>Unknown</translate>
                   </template>
                 </td>
                 <td></td>