diff --git a/.gitignore b/.gitignore
index 2b1de550ab5145e593767ab3d571585c14690f83..d5870db7e67b69103605caae09627fb2466f2ab3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -92,3 +92,4 @@ po/*.po
 docs/swagger
 _build
 front/src/translations.json
+front/locales/en_US/LC_MESSAGES/app.po
diff --git a/front/locales/app.pot b/front/locales/app.pot
index cb7763b9a6fb7af32eddb5e91a685e9216b0caca..55e35a4becf3f8f8ef9e3b11fead293e27bc6290 100644
--- a/front/locales/app.pot
+++ b/front/locales/app.pot
@@ -8,13 +8,13 @@ msgid ""
 msgstr ""
 "Project-Id-Version: front 1.0.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-07-01 18:34+0200\n"
+"POT-Creation-Date: 2018-07-01 22:09+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: \n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
@@ -69,6 +69,10 @@ msgstr ""
 msgid "%{ user } listened to a track"
 msgstr ""
 
+#: front/src/components/auth/Profile.vue:43
+msgid "%{ username }'s profile"
+msgstr ""
+
 #: front/src/components/audio/artist/Card.vue:41
 msgid "1 album"
 msgid_plural "%{ count } albums"
@@ -92,7 +96,7 @@ msgstr[1] ""
 msgid "About Funkwhale"
 msgstr ""
 
-#: front/src/App.vue:32 src/components/About.vue:8
+#: front/src/App.vue:32 src/components/About.vue:8 src/components/About.vue:55
 msgid "About this instance"
 msgstr ""
 
@@ -117,6 +121,10 @@ msgstr ""
 msgid "Account settings"
 msgstr ""
 
+#: front/src/components/auth/Settings.vue:180
+msgid "Account Settings"
+msgstr ""
+
 #: front/src/components/manage/users/UsersTable.vue:39
 msgid "Account status"
 msgstr ""
@@ -154,12 +162,17 @@ msgstr ""
 msgid "Add filters to customize your radio"
 msgstr ""
 
+#: front/src/components/audio/PlayButton.vue:47
+msgid "Add to current queue"
+msgstr ""
+
 #: front/src/components/favorites/TrackFavoriteIcon.vue:4
 #: front/src/components/favorites/TrackFavoriteIcon.vue:21
 msgid "Add to favorites"
 msgstr ""
 
 #: front/src/components/playlists/TrackPlaylistIcon.vue:6
+#: front/src/components/playlists/TrackPlaylistIcon.vue:32
 msgid "Add to playlist..."
 msgstr ""
 
@@ -167,6 +180,10 @@ msgstr ""
 msgid "Add to queue"
 msgstr ""
 
+#: front/src/components/playlists/PlaylistModal.vue:115
+msgid "Add to this playlist"
+msgstr ""
+
 #: front/src/components/playlists/PlaylistModal.vue:54
 msgid "Add track"
 msgstr ""
@@ -179,9 +196,11 @@ msgstr ""
 msgid "Administration"
 msgstr ""
 
+#: front/src/components/audio/SearchBar.vue:26
 #: front/src/components/federation/LibraryTrackTable.vue:34
+#: front/src/components/library/Album.vue:91
 #: front/src/components/manage/library/FilesTable.vue:39
-#: front/src/components/metadata/Search.vue:129
+#: front/src/components/metadata/Search.vue:134
 #: front/src/components/audio/track/Table.vue:9
 msgid "Album"
 msgstr ""
@@ -249,10 +268,12 @@ msgstr ""
 msgid "Are you sure you want to log out?"
 msgstr ""
 
+#: front/src/components/audio/SearchBar.vue:25
 #: front/src/components/federation/LibraryTrackTable.vue:33
+#: front/src/components/library/Artist.vue:108
 #: front/src/components/manage/library/FilesTable.vue:38
 #: front/src/components/manage/library/RequestsTable.vue:49
-#: front/src/components/metadata/Search.vue:125
+#: front/src/components/metadata/Search.vue:130
 msgid "Artist"
 msgstr ""
 
@@ -264,12 +285,19 @@ msgstr ""
 msgid "Artist page"
 msgstr ""
 
+#: front/src/components/audio/Search.vue:65
+msgid "Artist, album, track..."
+msgstr ""
+
 #: front/src/components/audio/Search.vue:10 src/components/instance/Stats.vue:42
-#: front/src/components/library/Library.vue:7
+#: front/src/components/library/Artists.vue:119 src/components/library/Library.vue:7
 msgid "Artists"
 msgstr ""
 
-#: front/src/components/favorites/List.vue:33 src/components/library/Radios.vue:28
+#: front/src/components/favorites/List.vue:33 src/components/library/Artists.vue:25
+#: front/src/components/library/Radios.vue:28
+#: front/src/components/manage/library/FilesTable.vue:19
+#: front/src/components/manage/library/RequestsTable.vue:19
 #: front/src/components/manage/users/UsersTable.vue:19
 #: front/src/views/federation/LibraryList.vue:28 src/views/playlists/List.vue:27
 msgid "Ascending"
@@ -373,6 +401,7 @@ msgid "Change password"
 msgstr ""
 
 #: front/src/views/auth/PasswordResetConfirm.vue:4
+#: front/src/views/auth/PasswordResetConfirm.vue:62
 msgid "Change your password"
 msgstr ""
 
@@ -388,6 +417,10 @@ msgstr ""
 msgid "Changing your password will also change your Subsonic API password if you have requested one."
 msgstr ""
 
+#: front/src/components/auth/Settings.vue:65
+msgid "Changing your password will have the following consequences"
+msgstr ""
+
 #: front/src/App.vue:4
 msgid "Choose your instance"
 msgstr ""
@@ -405,6 +438,10 @@ msgstr ""
 msgid "Clear playlist"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:256
+msgid "Clear your queue"
+msgstr ""
+
 #: front/src/components/library/import/BatchList.vue:23
 msgid "CLI"
 msgstr ""
@@ -443,6 +480,7 @@ msgid "Confirm"
 msgstr ""
 
 #: front/src/views/auth/EmailConfirm.vue:4 src/views/auth/EmailConfirm.vue:20
+#: front/src/views/auth/EmailConfirm.vue:51
 msgid "Confirm your email"
 msgstr ""
 
@@ -450,10 +488,18 @@ msgstr ""
 msgid "Confirmation code"
 msgstr ""
 
+#: front/src/components/playlists/Editor.vue:163
+msgid "Copy tracks from current queue to playlist"
+msgstr ""
+
 #: front/src/components/Home.vue:88
 msgid "Covers, lyrics, our goal is to have them all ;)"
 msgstr ""
 
+#: front/src/components/auth/Signup.vue:4
+msgid "Create a funkwhale account"
+msgstr ""
+
 #: front/src/components/playlists/Form.vue:2
 msgid "Create a new playlist"
 msgstr ""
@@ -467,6 +513,10 @@ msgstr ""
 msgid "Create import"
 msgstr ""
 
+#: front/src/components/auth/Signup.vue:51
+msgid "Create my account"
+msgstr ""
+
 #: front/src/components/playlists/Form.vue:34
 msgid "Create playlist"
 msgstr ""
@@ -485,9 +535,9 @@ msgstr ""
 msgid "Current track"
 msgstr ""
 
-#: front/src/components/manage/library/FilesTable.vue:184
-#: front/src/components/manage/library/RequestsTable.vue:190
-#: front/src/components/manage/users/InvitationsTable.vue:161
+#: front/src/components/manage/library/FilesTable.vue:189
+#: front/src/components/manage/library/RequestsTable.vue:195
+#: front/src/components/manage/users/InvitationsTable.vue:166
 #: front/src/views/playlists/Detail.vue:32
 msgid "Delete"
 msgstr ""
@@ -496,6 +546,10 @@ msgstr ""
 msgid "Delete playlist"
 msgstr ""
 
+#: front/src/views/radios/Detail.vue:28
+msgid "Delete radio"
+msgstr ""
+
 #: front/src/components/federation/LibraryFollowTable.vue:52
 #: front/src/components/federation/LibraryFollowTable.vue:63
 msgid "Deny"
@@ -505,7 +559,10 @@ msgstr ""
 msgid "Deny access?"
 msgstr ""
 
-#: front/src/components/favorites/List.vue:34 src/components/library/Radios.vue:31
+#: front/src/components/favorites/List.vue:34 src/components/library/Artists.vue:26
+#: front/src/components/library/Radios.vue:31
+#: front/src/components/manage/library/FilesTable.vue:20
+#: front/src/components/manage/library/RequestsTable.vue:20
 #: front/src/components/manage/users/UsersTable.vue:20
 #: front/src/views/federation/LibraryList.vue:29 src/views/playlists/List.vue:28
 msgid "Descending"
@@ -515,6 +572,10 @@ msgstr ""
 msgid "Detail"
 msgstr ""
 
+#: front/src/views/admin/users/UsersDetail.vue:146
+msgid "Determine if the user account is active or not. Inactive users cannot login or user the service."
+msgstr ""
+
 #: front/src/components/auth/Settings.vue:71
 #: front/src/components/auth/SubsonicTokenForm.vue:52
 msgid "Disable access"
@@ -548,6 +609,10 @@ msgstr ""
 msgid "Do you want to delete the playlist \"%{ playlist }\"?"
 msgstr ""
 
+#: front/src/views/radios/Detail.vue:26
+msgid "Do you want to delete the radio \"{{ radio }}\"?"
+msgstr ""
+
 #: front/src/components/common/ActionTable.vue:29
 msgid "Do you want to launch %{ action } on %{ count } element?"
 msgid_plural "Do you want to launch %{ action } on %{ count } elements?"
@@ -566,6 +631,10 @@ msgstr ""
 msgid "Download"
 msgstr ""
 
+#: front/src/components/playlists/Editor.vue:49
+msgid "Drag and drop rows to reorder tracks in the playlist"
+msgstr ""
+
 #: front/src/components/library/Track.vue:58
 #: front/src/components/manage/library/FilesTable.vue:43
 msgid "Duration"
@@ -583,6 +652,7 @@ msgstr ""
 msgid "Edit..."
 msgstr ""
 
+#: front/src/components/auth/Signup.vue:29
 #: front/src/components/manage/users/UsersTable.vue:38
 msgid "Email"
 msgstr ""
@@ -603,11 +673,47 @@ msgstr ""
 msgid "Ensure your music files are properly tagged before uploading them."
 msgstr ""
 
+#: front/src/components/library/Radios.vue:124
+msgid "Enter a radio name..."
+msgstr ""
+
+#: front/src/components/library/Artists.vue:118
+msgid "Enter an artist name..."
+msgstr ""
+
+#: front/src/views/federation/LibraryList.vue:122
+msgid "Enter an library domain name..."
+msgstr ""
+
+#: front/src/views/playlists/List.vue:104
+msgid "Enter an playlist name..."
+msgstr ""
+
+#: front/src/components/auth/Signup.vue:97
+msgid "Enter your email"
+msgstr ""
+
+#: front/src/components/auth/Signup.vue:95
+msgid "Enter your invitation code (case insensitive)"
+msgstr ""
+
+#: front/src/components/metadata/Search.vue:114
+msgid "Enter your search query..."
+msgstr ""
+
+#: front/src/components/auth/Signup.vue:96
+msgid "Enter your username"
+msgstr ""
+
+#: front/src/components/auth/Login.vue:77
+msgid "Enter your username or email"
+msgstr ""
+
 #: front/src/components/auth/SubsonicTokenForm.vue:20
 msgid "Error"
 msgstr ""
 
-#: front/src/views/admin/Settings.vue:82
+#: front/src/views/admin/Settings.vue:87
 msgid "Error reporting"
 msgstr ""
 
@@ -645,11 +751,11 @@ msgstr ""
 msgid "Errored"
 msgstr ""
 
-#: front/src/components/playlists/Form.vue:84
+#: front/src/components/playlists/Form.vue:89
 msgid "Everyone"
 msgstr ""
 
-#: front/src/components/playlists/Form.vue:80
+#: front/src/components/playlists/Form.vue:85
 msgid "Everyone on this instance"
 msgstr ""
 
@@ -685,13 +791,21 @@ msgstr ""
 msgid "Federate with a new instance"
 msgstr ""
 
+#: front/src/views/federation/LibraryTrackList.vue:21
+msgid "Federated tracks"
+msgstr ""
+
 #: front/src/components/Sidebar.vue:86 src/components/library/import/BatchList.vue:25
-#: front/src/components/manage/users/UsersTable.vue:175
-#: front/src/views/admin/Settings.vue:79 src/views/admin/users/UsersDetail.vue:156
-#: front/src/views/federation/LibraryDetail.vue:40
+#: front/src/components/manage/users/UsersTable.vue:180
+#: front/src/views/admin/Settings.vue:84 src/views/admin/users/UsersDetail.vue:161
+#: front/src/views/federation/Base.vue:35 src/views/federation/LibraryDetail.vue:40
 msgid "Federation"
 msgstr ""
 
+#: front/src/views/federation/LibraryDetail.vue:3
+msgid "File mirroring"
+msgstr ""
+
 #: front/src/components/library/import/FileUpload.vue:43
 msgid "File name"
 msgstr ""
@@ -700,7 +814,7 @@ msgstr ""
 msgid "File upload"
 msgstr ""
 
-#: front/src/views/admin/library/Base.vue:5
+#: front/src/views/admin/library/Base.vue:5 src/views/admin/library/FilesList.vue:21
 msgid "Files"
 msgstr ""
 
@@ -733,6 +847,7 @@ msgid "Follow status"
 msgstr ""
 
 #: front/src/views/federation/Base.vue:13
+#: front/src/views/federation/LibraryFollowersList.vue:24
 msgid "Followers"
 msgstr ""
 
@@ -806,6 +921,10 @@ msgstr ""
 msgid "Grab corresponding metadata"
 msgstr ""
 
+#: front/src/components/library/Home.vue:66
+msgid "Home"
+msgstr ""
+
 #: front/src/components/instance/Stats.vue:36
 msgid "Hours of music"
 msgstr ""
@@ -822,7 +941,7 @@ msgstr ""
 msgid "If the email address provided in the previous step is valid and binded to a user account, you should receive an email with reset instructions in the next couple of minutes."
 msgstr ""
 
-#: front/src/components/federation/LibraryTrackTable.vue:159
+#: front/src/components/federation/LibraryTrackTable.vue:164
 #: front/src/components/library/Library.vue:17
 msgid "Import"
 msgstr ""
@@ -841,10 +960,18 @@ msgstr[1] ""
 msgid "Import batch"
 msgstr ""
 
+#: front/src/components/library/import/BatchDetail.vue:185
+msgid "Import Batch #%{ id }"
+msgstr ""
+
 #: front/src/components/library/Library.vue:20
 msgid "Import batches"
 msgstr ""
 
+#: front/src/components/library/import/BatchList.vue:117
+msgid "Import Batches"
+msgstr ""
+
 #: front/src/components/manage/library/FilesTable.vue:40
 #: front/src/components/manage/library/RequestsTable.vue:53
 msgid "Import date"
@@ -858,6 +985,10 @@ msgstr ""
 msgid "Import music"
 msgstr ""
 
+#: front/src/components/library/import/Main.vue:267
+msgid "Import Music"
+msgstr ""
+
 #: front/src/components/Home.vue:71
 msgid "Import music from various platforms, such as YouTube or SoundCloud"
 msgstr ""
@@ -869,6 +1000,7 @@ msgstr ""
 
 #: front/src/views/admin/library/Base.vue:9
 #: front/src/views/admin/library/RequestsList.vue:3
+#: front/src/views/admin/library/RequestsList.vue:21
 msgid "Import requests"
 msgstr ""
 
@@ -899,7 +1031,7 @@ msgstr ""
 msgid "Imported URL"
 msgstr ""
 
-#: front/src/views/admin/Settings.vue:77
+#: front/src/views/admin/Settings.vue:82
 msgid "Imports"
 msgstr ""
 
@@ -915,17 +1047,39 @@ msgstr ""
 msgid "Input a MusicBrainz ID manually:"
 msgstr ""
 
+#: front/src/views/auth/PasswordReset.vue:53
+msgid "Input the email address binded to your account"
+msgstr ""
+
 #: front/src/components/playlists/Editor.vue:31
 msgid "Insert from queue (%{ count } track)"
 msgid_plural "Insert from queue (%{ count } tracks)"
 msgstr[0] ""
 msgstr[1] ""
 
-#: front/src/views/admin/Settings.vue:75
+#: front/src/views/admin/Settings.vue:80
 msgid "Instance information"
 msgstr ""
 
+#: front/src/views/admin/Settings.vue:75
+msgid "Instance settings"
+msgstr ""
+
+#: front/src/views/instance/Timeline.vue:57
+msgid "Instance Timeline"
+msgstr ""
+
+#: front/src/components/auth/Signup.vue:42
+#: front/src/components/manage/users/InvitationForm.vue:11
+msgid "Invitation code"
+msgstr ""
+
+#: front/src/components/auth/Signup.vue:43
+msgid "Invitation code (optional)"
+msgstr ""
+
 #: front/src/views/admin/users/Base.vue:8 src/views/admin/users/InvitationsList.vue:3
+#: front/src/views/admin/users/InvitationsList.vue:24
 msgid "Invitations"
 msgstr ""
 
@@ -979,18 +1133,24 @@ msgstr ""
 msgid "Learn more about this instance"
 msgstr ""
 
+#: front/src/components/manage/users/InvitationForm.vue:58
+msgid "Leave empty for a random code"
+msgstr ""
+
 #: front/src/components/requests/Form.vue:10
 msgid "Leave this field empty if you're requesting the whole discography."
 msgstr ""
 
-#: front/src/views/federation/Base.vue:5
+#: front/src/views/federation/Base.vue:5 src/views/federation/LibraryList.vue:123
 msgid "Libraries"
 msgstr ""
 
 #: front/src/components/Sidebar.vue:69
 #: front/src/components/federation/LibraryTrackTable.vue:36
-#: front/src/components/manage/users/UsersTable.vue:171
-#: front/src/views/admin/users/UsersDetail.vue:152
+#: front/src/components/instance/Stats.vue:30
+#: front/src/components/manage/users/UsersTable.vue:176
+#: front/src/views/admin/users/UsersDetail.vue:157
+#: front/src/views/federation/LibraryDetail.vue:194
 msgid "Library"
 msgstr ""
 
@@ -1006,6 +1166,10 @@ msgstr ""
 msgid "Library size"
 msgstr ""
 
+#: front/src/components/federation/LibraryForm.vue:96
+msgid "library@demo.funkwhale.audio"
+msgstr ""
+
 #: front/src/App.vue:29
 msgid "Links"
 msgstr ""
@@ -1018,10 +1182,18 @@ msgstr ""
 msgid "Loading your favorites..."
 msgstr ""
 
+#: front/src/components/auth/Login.vue:78
+msgid "Log In"
+msgstr ""
+
 #: front/src/components/auth/Login.vue:4
 msgid "Log in to your Funkwhale account"
 msgstr ""
 
+#: front/src/components/auth/Logout.vue:20
+msgid "Log Out"
+msgstr ""
+
 #: front/src/components/Sidebar.vue:38
 msgid "Logged in as %{ username }"
 msgstr ""
@@ -1034,23 +1206,43 @@ msgstr ""
 msgid "Logout"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:252
+msgid "Looping disabled. Click to switch to single-track looping."
+msgstr ""
+
+#: front/src/components/audio/Player.vue:253
+msgid "Looping on a single track. Click to switch to whole queue looping."
+msgstr ""
+
+#: front/src/components/audio/Player.vue:254
+msgid "Looping on whole queue. Click to disable looping."
+msgstr ""
+
 #: front/src/components/library/Track.vue:94
 msgid "Lyrics"
 msgstr ""
 
+#: front/src/views/admin/library/Base.vue:25
+msgid "Manage library"
+msgstr ""
+
 #: front/src/components/playlists/PlaylistModal.vue:3
 msgid "Manage playlists"
 msgstr ""
 
+#: front/src/views/admin/users/Base.vue:20
+msgid "Manage users"
+msgstr ""
+
 #: front/src/views/playlists/List.vue:8
 msgid "Manage your playlists"
 msgstr ""
 
-#: front/src/components/manage/library/RequestsTable.vue:192
+#: front/src/components/manage/library/RequestsTable.vue:197
 msgid "Mark as closed"
 msgstr ""
 
-#: front/src/components/manage/library/RequestsTable.vue:191
+#: front/src/components/manage/library/RequestsTable.vue:196
 msgid "Mark as imported"
 msgstr ""
 
@@ -1079,10 +1271,22 @@ msgstr ""
 msgid "Music requests"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:251
+msgid "Mute"
+msgstr ""
+
 #: front/src/components/Sidebar.vue:34
 msgid "My account"
 msgstr ""
 
+#: front/src/components/playlists/Form.vue:74
+msgid "My awesome playlist"
+msgstr ""
+
+#: front/src/components/library/radios/Builder.vue:206
+msgid "My awesome radio"
+msgstr ""
+
 #: front/src/components/library/Track.vue:64 src/components/library/Track.vue:75
 #: front/src/components/library/Track.vue:86
 #: front/src/components/manage/library/FilesTable.vue:63
@@ -1114,6 +1318,10 @@ msgstr ""
 msgid "Next step"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:249
+msgid "Next track"
+msgstr ""
+
 #: front/src/components/Sidebar.vue:124
 msgid "No"
 msgstr ""
@@ -1126,7 +1334,7 @@ msgstr ""
 msgid "No lyrics available for this track."
 msgstr ""
 
-#: front/src/components/playlists/Form.vue:76
+#: front/src/components/playlists/Form.vue:81
 msgid "Nobody except me"
 msgstr ""
 
@@ -1168,9 +1376,9 @@ msgstr ""
 #: front/src/components/library/Radios.vue:17
 #: front/src/components/manage/library/FilesTable.vue:9
 #: front/src/components/manage/library/RequestsTable.vue:9
+#: front/src/components/manage/users/InvitationsTable.vue:9
 #: front/src/components/manage/users/UsersTable.vue:9
 #: front/src/views/federation/LibraryList.vue:18 src/views/playlists/List.vue:17
-#: front/src/components/manage/users/InvitationsTable.vue:10
 msgid "Ordering"
 msgstr ""
 
@@ -1187,11 +1395,15 @@ msgstr ""
 msgid "Owner"
 msgstr ""
 
+#: front/src/components/PageNotFound.vue:33
+msgid "Page Not Found"
+msgstr ""
+
 #: front/src/components/PageNotFound.vue:7
 msgid "Page not found!"
 msgstr ""
 
-#: front/src/components/auth/Login.vue:32
+#: front/src/components/auth/Login.vue:32 src/components/auth/Signup.vue:38
 msgid "Password"
 msgstr ""
 
@@ -1203,6 +1415,10 @@ msgstr ""
 msgid "Password updated successfully"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:248
+msgid "Pause track"
+msgstr ""
+
 #: front/src/components/federation/LibraryFollowTable.vue:46
 #: front/src/components/library/import/BatchDetail.vue:33
 #: front/src/components/library/import/BatchDetail.vue:69
@@ -1218,7 +1434,15 @@ msgstr ""
 msgid "Pending approval"
 msgstr ""
 
-#: front/src/components/requests/Form.vue:26
+#: front/src/components/Sidebar.vue:216
+msgid "Pending follow requests"
+msgstr ""
+
+#: front/src/components/Sidebar.vue:215 src/views/admin/library/Base.vue:26
+msgid "Pending import requests"
+msgstr ""
+
+#: front/src/components/requests/Form.vue:26 src/views/federation/Base.vue:36
 msgid "Pending requests"
 msgstr ""
 
@@ -1233,7 +1457,7 @@ msgstr ""
 
 #: front/src/components/audio/album/Card.vue:50
 #: front/src/components/audio/artist/Card.vue:44 src/components/library/Album.vue:28
-#: front/src/views/playlists/Detail.vue:22
+#: front/src/components/playlists/Card.vue:26 src/views/playlists/Detail.vue:22
 msgid "Play all"
 msgstr ""
 
@@ -1241,7 +1465,7 @@ msgstr ""
 msgid "Play all albums"
 msgstr ""
 
-#: front/src/components/audio/PlayButton.vue:47
+#: front/src/components/audio/PlayButton.vue:52
 msgid "Play immediatly"
 msgstr ""
 
@@ -1253,6 +1477,14 @@ msgstr ""
 msgid "Play now"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:247
+msgid "Play track"
+msgstr ""
+
+#: front/src/views/playlists/Detail.vue:89
+msgid "Playlist"
+msgstr ""
+
 #: front/src/views/playlists/Detail.vue:11
 msgid "Playlist containing %{ count } track, by %{ username }"
 msgid_plural "Playlist containing %{ count } tracks, by %{ username }"
@@ -1280,7 +1512,7 @@ msgid "Playlist visibility"
 msgstr ""
 
 #: front/src/components/Sidebar.vue:55 src/components/library/Library.vue:13
-#: front/src/views/admin/Settings.vue:78
+#: front/src/views/admin/Settings.vue:83 src/views/playlists/List.vue:103
 msgid "Playlists"
 msgstr ""
 
@@ -1296,6 +1528,10 @@ msgstr ""
 msgid "Previous step"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:246
+msgid "Previous track"
+msgstr ""
+
 #: front/src/views/auth/EmailConfirm.vue:26
 #: front/src/views/auth/PasswordResetConfirm.vue:31
 msgid "Proceed to login"
@@ -1313,15 +1549,24 @@ msgstr ""
 msgid "Queue"
 msgstr ""
 
-#: front/src/components/audio/Player.vue:183
+#: front/src/components/audio/Player.vue:189
 msgid "Queue shuffled!"
 msgstr ""
 
+#: front/src/views/radios/Detail.vue:80
+msgid "Radio"
+msgstr ""
+
+#: front/src/components/library/radios/Builder.vue:205
+msgid "Radio Builder"
+msgstr ""
+
 #: front/src/components/library/radios/Builder.vue:11
 msgid "Radio name"
 msgstr ""
 
 #: front/src/components/library/Home.vue:18 src/components/library/Library.vue:10
+#: front/src/components/library/Radios.vue:125
 msgid "Radios"
 msgstr ""
 
@@ -1375,7 +1620,20 @@ msgstr ""
 msgid "Request a password"
 msgstr ""
 
+#: front/src/components/requests/Form.vue:20
+msgid "Request submitted!"
+msgstr ""
+
+#: front/src/components/library/import/BatchDetail.vue:49
+msgid "Rerun errored jobs"
+msgstr ""
+
+#: front/src/components/library/import/BatchDetail.vue:187
+msgid "Rerun job"
+msgstr ""
+
 #: front/src/components/auth/Login.vue:34 src/views/auth/PasswordReset.vue:4
+#: front/src/views/auth/PasswordReset.vue:52
 msgid "Reset your password"
 msgstr ""
 
@@ -1414,6 +1672,39 @@ msgstr ""
 msgid "Search an entity you want to import:"
 msgstr ""
 
+#: front/src/components/manage/library/RequestsTable.vue:180
+msgid "Search by artist, username, comment..."
+msgstr ""
+
+#: front/src/components/library/import/BatchDetail.vue:188
+msgid "Search by source..."
+msgstr ""
+
+#: front/src/components/library/import/BatchList.vue:116
+msgid "Search by submitter, source..."
+msgstr ""
+
+#: front/src/components/federation/LibraryTrackTable.vue:150
+#: front/src/components/manage/library/FilesTable.vue:175
+msgid "Search by title, artist, domain..."
+msgstr ""
+
+#: front/src/components/federation/LibraryFollowTable.vue:140
+msgid "Search by username, domain..."
+msgstr ""
+
+#: front/src/components/manage/users/InvitationsTable.vue:152
+msgid "Search by username, email, code..."
+msgstr ""
+
+#: front/src/components/manage/users/UsersTable.vue:162
+msgid "Search by username, email, name..."
+msgstr ""
+
+#: front/src/components/audio/SearchBar.vue:20
+msgid "Search for artists, albums, tracks..."
+msgstr ""
+
 #: front/src/components/audio/Search.vue:2
 msgid "Search for some music"
 msgstr ""
@@ -1461,8 +1752,8 @@ msgstr ""
 msgid "Send a follow request"
 msgstr ""
 
-#: front/src/components/Sidebar.vue:96 src/components/manage/users/UsersTable.vue:179
-#: front/src/views/admin/users/UsersDetail.vue:160
+#: front/src/components/Sidebar.vue:96 src/components/manage/users/UsersTable.vue:184
+#: front/src/views/admin/users/UsersDetail.vue:165
 msgid "Settings"
 msgstr ""
 
@@ -1494,6 +1785,10 @@ msgid_plural "Show %{ count } more tracks"
 msgstr[0] ""
 msgstr[1] ""
 
+#: front/src/components/forms/PasswordInput.vue:25
+msgid "Show/hide password"
+msgstr ""
+
 #: front/src/components/federation/LibraryFollowTable.vue:97
 #: front/src/components/federation/LibraryTrackTable.vue:83
 #: front/src/components/library/import/BatchDetail.vue:128
@@ -1505,6 +1800,14 @@ msgstr[1] ""
 msgid "Showing results %{ start }-%{ end } on %{ total }"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:255
+msgid "Shuffle your queue"
+msgstr ""
+
+#: front/src/components/auth/Signup.vue:94
+msgid "Sign Up"
+msgstr ""
+
 #: front/src/components/manage/users/UsersTable.vue:40
 #: front/src/views/admin/users/UsersDetail.vue:37
 msgid "Sign-up"
@@ -1560,7 +1863,7 @@ msgstr ""
 msgid "Start Upload"
 msgstr ""
 
-#: front/src/views/admin/Settings.vue:81
+#: front/src/views/admin/Settings.vue:86
 msgid "Statistics"
 msgstr ""
 
@@ -1570,10 +1873,11 @@ msgstr ""
 #: front/src/components/library/import/BatchList.vue:11
 #: front/src/components/library/import/BatchList.vue:37
 #: front/src/components/library/import/FileUpload.vue:45
+#: front/src/components/manage/library/RequestsTable.vue:24
 #: front/src/components/manage/library/RequestsTable.vue:48
+#: front/src/components/manage/users/InvitationsTable.vue:17
 #: front/src/components/manage/users/InvitationsTable.vue:39
 #: front/src/components/manage/users/UsersTable.vue:43
-#: front/src/components/manage/users/InvitationsTable.vue:18
 msgid "Status"
 msgstr ""
 
@@ -1602,7 +1906,7 @@ msgstr ""
 msgid "Submitted by"
 msgstr ""
 
-#: front/src/views/admin/Settings.vue:80
+#: front/src/views/admin/Settings.vue:85
 msgid "Subsonic"
 msgstr ""
 
@@ -1624,6 +1928,10 @@ msgstr ""
 msgid "That's simple: we loved Grooveshark and we want to build something even better."
 msgstr ""
 
+#: front/src/components/requests/Form.vue:73
+msgid "The Beatles, Mickael Jackson…"
+msgstr ""
+
 #: front/src/App.vue:56
 msgid "The funkwhale logo was kindly designed and provided by Francis Gading."
 msgstr ""
@@ -1636,15 +1944,27 @@ msgstr ""
 msgid "The Subsonic API is not available on this Funkwhale instance."
 msgstr ""
 
+#: front/src/components/requests/Form.vue:74
+msgid "The White Album, Thriller…"
+msgstr ""
+
 #: front/src/components/library/import/Main.vue:149
 msgid "This import will be associated with the music request below. After the import is finished, the request will be marked as fulfilled."
 msgstr ""
 
+#: front/src/views/federation/LibraryDetail.vue:195
+msgid "This indicate if the remote library granted you access"
+msgstr ""
+
 #: front/src/components/auth/Profile.vue:15
 msgid "This is you!"
 msgstr ""
 
-#: front/src/components/audio/PlayButton.vue:50
+#: front/src/components/common/ActionTable.vue:37
+msgid "This may affect a lot of elements, please double check this is really what you want."
+msgstr ""
+
+#: front/src/components/audio/PlayButton.vue:55
 msgid "This track is not imported and cannot be played"
 msgstr ""
 
@@ -1652,6 +1972,10 @@ msgstr ""
 msgid "This will completely delete this playlist and cannot be undone."
 msgstr ""
 
+#: front/src/views/radios/Detail.vue:27
+msgid "This will completely delete this radio and cannot be undone."
+msgstr ""
+
 #: front/src/components/auth/SubsonicTokenForm.vue:51
 msgid "This will completely disable access to the Subsonic API using from account."
 msgstr ""
@@ -1674,8 +1998,9 @@ msgstr ""
 msgid "Title"
 msgstr ""
 
+#: front/src/components/audio/SearchBar.vue:27 src/components/library/Track.vue:174
 #: front/src/components/library/import/BatchDetail.vue:84
-#: front/src/components/metadata/Search.vue:133
+#: front/src/components/metadata/Search.vue:138
 msgid "Track"
 msgstr ""
 
@@ -1693,7 +2018,8 @@ msgstr ""
 
 #: front/src/components/library/Album.vue:43
 #: front/src/components/playlists/PlaylistModal.vue:33
-#: front/src/views/federation/Base.vue:8
+#: front/src/views/federation/Base.vue:8 src/views/playlists/Detail.vue:49
+#: front/src/views/radios/Detail.vue:34
 msgid "Tracks"
 msgstr ""
 
@@ -1729,6 +2055,10 @@ msgstr ""
 msgid "Unlimited music"
 msgstr ""
 
+#: front/src/components/audio/Player.vue:250
+msgid "Unmute"
+msgstr ""
+
 #: front/src/components/playlists/Form.vue:33
 msgid "Update playlist"
 msgstr ""
@@ -1741,8 +2071,8 @@ msgstr ""
 msgid "Update your password"
 msgstr ""
 
-#: front/src/components/manage/users/UsersTable.vue:167
-#: front/src/views/admin/users/UsersDetail.vue:148
+#: front/src/components/manage/users/UsersTable.vue:172
+#: front/src/views/admin/users/UsersDetail.vue:153
 msgid "Upload"
 msgstr ""
 
@@ -1758,6 +2088,14 @@ msgstr ""
 msgid "Use another instance"
 msgstr ""
 
+#: front/src/components/requests/Form.vue:75
+msgid "Use this comment box to add details to your request if needed"
+msgstr ""
+
+#: front/src/views/federation/LibraryDetail.vue:196
+msgid "Use this flag to enable/disable federation with this library"
+msgstr ""
+
 #: front/src/views/auth/PasswordReset.vue:12
 msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password."
 msgstr ""
@@ -1778,6 +2116,7 @@ msgstr ""
 msgid "User activity"
 msgstr ""
 
+#: front/src/components/auth/Signup.vue:19
 #: front/src/components/manage/users/UsersTable.vue:37
 msgid "Username"
 msgstr ""
@@ -1790,13 +2129,17 @@ msgstr ""
 msgid "users"
 msgstr ""
 
-#: front/src/components/Sidebar.vue:102 src/views/admin/Settings.vue:76
+#: front/src/components/Sidebar.vue:102 src/views/admin/Settings.vue:81
 #: front/src/views/admin/users/Base.vue:5 src/views/admin/users/UsersList.vue:3
+#: front/src/views/admin/users/UsersList.vue:21
 msgid "Users"
 msgstr ""
 
 #: front/src/components/library/Album.vue:37 src/components/library/Artist.vue:35
 #: front/src/components/library/Track.vue:44
+#: front/src/components/library/import/ArtistImport.vue:131
+#: front/src/components/metadata/ArtistCard.vue:49
+#: front/src/components/metadata/ReleaseCard.vue:53
 msgid "View on MusicBrainz"
 msgstr ""
 
@@ -1808,6 +2151,10 @@ msgstr ""
 msgid "We cannot create the playlist"
 msgstr ""
 
+#: front/src/components/auth/Signup.vue:13
+msgid "We cannot create your account"
+msgstr ""
+
 #: front/src/components/auth/Login.vue:7
 msgid "We cannot log you in"
 msgstr ""
@@ -1836,10 +2183,22 @@ msgstr ""
 msgid "We've received your request, you'll get some groove soon ;)"
 msgstr ""
 
+#: front/src/components/Home.vue:152
+msgid "Welcome"
+msgstr ""
+
 #: front/src/components/Home.vue:5
 msgid "Welcome on Funkwhale"
 msgstr ""
 
+#: front/src/components/library/import/Main.vue:114
+msgid "What is metadata?"
+msgstr ""
+
+#: front/src/views/federation/LibraryDetail.vue:197
+msgid "When enabled, auto importing will automatically import new tracks published in this library"
+msgstr ""
+
 #: front/src/components/Home.vue:24
 msgid "Why funkwhale?"
 msgstr ""
@@ -1896,6 +2255,10 @@ msgstr ""
 msgid "Your email address was confirmed, you can now use the service without limitations."
 msgstr ""
 
+#: front/src/components/favorites/List.vue:109
+msgid "Your Favorites"
+msgstr ""
+
 #: front/src/components/Home.vue:117
 msgid "Your music, your way"
 msgstr ""
@@ -1908,23 +2271,11 @@ msgstr ""
 msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password"
 msgstr ""
 
-#: front/src/components/auth/Signup.vue:5
-msgid "Create a funkwhale account"
-msgstr ""
-
-#: front/src/components/auth/Signup.vue:43
-msgid "Invitation code"
-msgstr ""
-
 #: front/src/components/auth/Login.vue:10
 msgid "Please double-check your username/password couple is correct"
 msgstr ""
 
-#: front/src/components/auth/Settings.vue:66
-msgid "Changing your password will have the following consequences"
-msgstr ""
-
-#: front/src/components/audio/PlayButton.vue:145
+#: front/src/components/audio/PlayButton.vue:150
 msgid "%{ count } track was added to your queue"
 msgid_plural "%{ count } tracks were added to your queue"
 msgstr[0] ""
@@ -1937,7 +2288,3 @@ msgstr ""
 #: front/src/components/manage/users/UsersTable.vue:55
 msgid "Inactive"
 msgstr ""
-
-#: front/src/components/common/ActionTable.vue:38
-msgid "This may affect a lot of elements, please double check this is really what you want."
-msgstr ""
diff --git a/front/locales/en_US/LC_MESSAGES/app.po b/front/locales/en_US/LC_MESSAGES/app.po
deleted file mode 100644
index 224b5be8e3e5fb5e89cbd4ecc720af4ceedbbec8..0000000000000000000000000000000000000000
--- a/front/locales/en_US/LC_MESSAGES/app.po
+++ /dev/null
@@ -1,1970 +0,0 @@
-# English translations for front package.
-# Copyright (C) 2018 THE front'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the front package.
-# Automatically generated, 2018.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: front 1.0.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-07-01 18:34+0200\n"
-"PO-Revision-Date: 2018-06-30 11:34+0200\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
-"Language: en_US\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: front/src/components/playlists/PlaylistModal.vue:9
-msgid "\"%{ title }\", by %{ artist }"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:24
-msgid "(%{ index } of %{ length })"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:22
-msgid "(empty)"
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:43
-#: front/src/components/common/ActionTable.vue:51
-msgid "%{ count } on %{ total } selected"
-msgid_plural "%{ count } on %{ total } selected"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/Sidebar.vue:115
-#: src/views/federation/LibraryDetail.vue:87
-msgid "%{ count } track"
-msgid_plural "%{ count } tracks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/library/Artist.vue:13
-msgid "%{ count } track in %{ albumsCount } albums"
-msgid_plural "%{ count } tracks in %{ albumsCount } albums"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/library/radios/Builder.vue:66
-msgid "%{ count } track matching combined filters"
-msgid_plural "%{ count } tracks matching combined filters"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/playlists/Card.vue:19
-msgid "%{ count} track"
-msgid_plural "%{ count } tracks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/activity/Like.vue:7
-msgid "%{ user } favorited a track"
-msgstr ""
-
-#: front/src/components/activity/Listen.vue:7
-msgid "%{ user } listened to a track"
-msgstr ""
-
-#: front/src/components/audio/artist/Card.vue:41
-msgid "1 album"
-msgid_plural "%{ count } albums"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/favorites/List.vue:10
-msgid "1 favorite"
-msgid_plural "%{ count } favorites"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/audio/album/Card.vue:54
-#: front/src/components/federation/LibraryCard.vue:25
-msgid "1 track"
-msgid_plural "%{ count } tracks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/App.vue:51
-msgid "About Funkwhale"
-msgstr ""
-
-#: front/src/App.vue:32 src/components/About.vue:8
-msgid "About this instance"
-msgstr ""
-
-#: front/src/components/manage/library/RequestsTable.vue:28
-#: front/src/components/manage/library/RequestsTable.vue:62
-msgid "Accepted"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:111
-msgid "Access disabled"
-msgstr ""
-
-#: front/src/components/Home.vue:109
-msgid "Access your music from a clean interface that focus on what really matters"
-msgstr ""
-
-#: front/src/views/admin/users/UsersDetail.vue:54
-msgid "Account active"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:5
-msgid "Account settings"
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:39
-msgid "Account status"
-msgstr ""
-
-#: front/src/views/auth/PasswordReset.vue:14
-msgid "Account's email"
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:82
-msgid "Action %{ action } was launched successfully on %{ count } element"
-msgid_plural "Action %{ action } was launched successfully on %{ count } elements"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/common/ActionTable.vue:8
-#: front/src/components/library/radios/Builder.vue:50
-#: front/src/components/manage/library/RequestsTable.vue:54
-#: front/src/components/federation/LibraryFollowTable.vue:25
-msgid "Actions"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:59
-msgid "Activity"
-msgstr ""
-
-#: front/src/views/federation/LibraryList.vue:8
-msgid "Add a new library"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:36
-msgid "Add filter"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:26
-msgid "Add filters to customize your radio"
-msgstr ""
-
-#: front/src/components/favorites/TrackFavoriteIcon.vue:4
-#: front/src/components/favorites/TrackFavoriteIcon.vue:21
-msgid "Add to favorites"
-msgstr ""
-
-#: front/src/components/playlists/TrackPlaylistIcon.vue:6
-msgid "Add to playlist..."
-msgstr ""
-
-#: front/src/components/audio/PlayButton.vue:13
-msgid "Add to queue"
-msgstr ""
-
-#: front/src/components/playlists/PlaylistModal.vue:54
-msgid "Add track"
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:69
-msgid "Admin"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:63
-msgid "Administration"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:34
-#: front/src/components/manage/library/FilesTable.vue:39
-#: front/src/components/metadata/Search.vue:129
-#: front/src/components/audio/track/Table.vue:9
-msgid "Album"
-msgstr ""
-
-#: front/src/components/library/import/ReleaseImport.vue:3
-msgid "Album %{ title } (%{ count } track) by %{ artist }"
-msgid_plural "Album %{ title } (%{ count } tracks) by %{ artist }"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/library/Album.vue:12
-msgid "Album containing %{ count } track, by %{ artist }"
-msgid_plural "Album containing %{ count } tracks, by %{ artist }"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/library/Track.vue:20
-msgid "Album page"
-msgstr ""
-
-#: front/src/components/audio/Search.vue:19
-#: src/components/instance/Stats.vue:48
-#: front/src/components/manage/library/RequestsTable.vue:50
-#: front/src/components/requests/Form.vue:9
-msgid "Albums"
-msgstr ""
-
-#: front/src/components/library/Artist.vue:44
-msgid "Albums by this artist"
-msgstr ""
-
-#: front/src/components/manage/library/RequestsTable.vue:26
-#: front/src/components/manage/users/InvitationsTable.vue:19
-msgid "All"
-msgstr ""
-
-#: front/src/components/playlists/Editor.vue:13
-msgid "An error occured while saving your changes"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:11
-#: front/src/components/library/import/BatchDetail.vue:68
-#: front/src/components/library/import/BatchList.vue:13
-#: front/src/components/library/import/BatchList.vue:22
-msgid "Any"
-msgstr ""
-
-#: front/src/components/library/import/BatchList.vue:24
-msgid "API"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:68
-#: front/src/components/federation/LibraryFollowTable.vue:78
-msgid "Approve"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:70
-msgid "Approve access?"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:38
-msgid "Approved"
-msgstr ""
-
-#: front/src/components/auth/Logout.vue:5
-msgid "Are you sure you want to log out?"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:33
-#: front/src/components/manage/library/FilesTable.vue:38
-#: front/src/components/manage/library/RequestsTable.vue:49
-#: front/src/components/metadata/Search.vue:125
-msgid "Artist"
-msgstr ""
-
-#: front/src/components/requests/Form.vue:5
-msgid "Artist name"
-msgstr ""
-
-#: front/src/components/library/Album.vue:22
-#: src/components/library/Track.vue:23
-msgid "Artist page"
-msgstr ""
-
-#: front/src/components/audio/Search.vue:10
-#: src/components/instance/Stats.vue:42
-#: front/src/components/library/Library.vue:7
-msgid "Artists"
-msgstr ""
-
-#: front/src/components/favorites/List.vue:33
-#: src/components/library/Radios.vue:28
-#: front/src/components/manage/users/UsersTable.vue:19
-#: front/src/views/federation/LibraryList.vue:28
-#: src/views/playlists/List.vue:27
-msgid "Ascending"
-msgstr ""
-
-#: front/src/views/auth/PasswordReset.vue:27
-msgid "Ask for a password reset"
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:56
-msgid "Auto importing"
-msgstr ""
-
-#: front/src/components/playlists/PlaylistModal.vue:26
-msgid "Available playlists"
-msgstr ""
-
-#: front/src/views/auth/EmailConfirm.vue:17 src/views/auth/PasswordReset.vue:24
-#: front/src/views/auth/PasswordResetConfirm.vue:18
-msgid "Back to login"
-msgstr ""
-
-#: front/src/views/federation/LibraryFollowersList.vue:5
-msgid "Be careful when accepting follow requests, as it means the follower will have access to your entire library."
-msgstr ""
-
-#: front/src/components/library/Track.vue:80
-#: front/src/components/manage/library/FilesTable.vue:42
-msgid "Bitrate"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:18 src/components/library/Library.vue:4
-msgid "Browse"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:49
-msgid "Browse library"
-msgstr ""
-
-#: front/src/components/library/Artists.vue:4
-msgid "Browsing artists"
-msgstr ""
-
-#: front/src/views/federation/LibraryTrackList.vue:3
-msgid "Browsing federated tracks"
-msgstr ""
-
-#: front/src/views/federation/LibraryFollowersList.vue:3
-msgid "Browsing followers"
-msgstr ""
-
-#: front/src/views/federation/LibraryList.vue:3
-msgid "Browsing libraries"
-msgstr ""
-
-#: front/src/views/playlists/List.vue:3
-msgid "Browsing playlists"
-msgstr ""
-
-#: front/src/components/library/Radios.vue:4
-msgid "Browsing radios"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:5
-msgid "Builder"
-msgstr ""
-
-#: front/src/components/audio/album/Card.vue:13
-msgid "By %{ artist }"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:57
-msgid "By confirming, %{ username } will be denied access to your library."
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:73
-msgid "By confirming, %{ username } will be granted access to your library."
-msgstr ""
-
-#: front/src/components/audio/track/Table.vue:42
-#: front/src/components/common/DangerousButton.vue:17
-#: front/src/components/library/radios/Filter.vue:53
-#: front/src/components/playlists/PlaylistModal.vue:63
-msgid "Cancel"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:49
-msgid "Candidates"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:43
-msgid "Cannot change your password"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:34
-msgid "Change my password"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:62
-msgid "Change password"
-msgstr ""
-
-#: front/src/views/auth/PasswordResetConfirm.vue:4
-msgid "Change your password"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:63
-msgid "Change your password?"
-msgstr ""
-
-#: front/src/components/playlists/Editor.vue:21
-msgid "Changes synced with server"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:37
-msgid "Changing your password will also change your Subsonic API password if you have requested one."
-msgstr ""
-
-#: front/src/App.vue:4
-msgid "Choose your instance"
-msgstr ""
-
-#: front/src/components/Home.vue:64
-msgid "Clean library"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationForm.vue:37
-msgid "Clear"
-msgstr ""
-
-#: front/src/components/playlists/Editor.vue:40
-#: front/src/components/playlists/Editor.vue:45
-msgid "Clear playlist"
-msgstr ""
-
-#: front/src/components/library/import/BatchList.vue:23
-msgid "CLI"
-msgstr ""
-
-#: front/src/components/Home.vue:44
-msgid "Click once, listen for hours using built-in radios"
-msgstr ""
-
-#: front/src/components/manage/library/RequestsTable.vue:30
-#: front/src/components/manage/library/RequestsTable.vue:64
-msgid "Closed"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationForm.vue:26
-#: front/src/components/manage/users/InvitationsTable.vue:42
-msgid "Code"
-msgstr ""
-
-#: front/src/components/audio/album/Card.vue:43
-#: front/src/components/audio/artist/Card.vue:33
-#: front/src/components/discussion/Comment.vue:20
-msgid "Collapse"
-msgstr ""
-
-#: front/src/components/manage/library/RequestsTable.vue:51
-#: front/src/components/requests/Form.vue:14
-msgid "Comment"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:48
-msgid "Config"
-msgstr ""
-
-#: front/src/components/common/DangerousButton.vue:21
-msgid "Confirm"
-msgstr ""
-
-#: front/src/views/auth/EmailConfirm.vue:4 src/views/auth/EmailConfirm.vue:20
-msgid "Confirm your email"
-msgstr ""
-
-#: front/src/views/auth/EmailConfirm.vue:13
-msgid "Confirmation code"
-msgstr ""
-
-#: front/src/components/Home.vue:88
-msgid "Covers, lyrics, our goal is to have them all ;)"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:2
-msgid "Create a new playlist"
-msgstr ""
-
-#: front/src/components/auth/Login.vue:17
-msgid "Create an account"
-msgstr ""
-
-#: front/src/components/requests/Card.vue:25
-#: front/src/components/manage/library/RequestsTable.vue:89
-msgid "Create import"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:34
-msgid "Create playlist"
-msgstr ""
-
-#: front/src/components/library/Radios.vue:7
-msgid "Create your own radio"
-msgstr ""
-
-#: front/src/components/manage/library/RequestsTable.vue:52
-#: front/src/components/manage/users/InvitationsTable.vue:40
-#: front/src/components/federation/LibraryFollowTable.vue:23
-msgid "Creation date"
-msgstr ""
-
-#: front/src/components/playlists/PlaylistModal.vue:8
-msgid "Current track"
-msgstr ""
-
-#: front/src/components/manage/library/FilesTable.vue:184
-#: front/src/components/manage/library/RequestsTable.vue:190
-#: front/src/components/manage/users/InvitationsTable.vue:161
-#: front/src/views/playlists/Detail.vue:32
-msgid "Delete"
-msgstr ""
-
-#: front/src/views/playlists/Detail.vue:37
-msgid "Delete playlist"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:52
-#: front/src/components/federation/LibraryFollowTable.vue:63
-msgid "Deny"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:54
-msgid "Deny access?"
-msgstr ""
-
-#: front/src/components/favorites/List.vue:34
-#: src/components/library/Radios.vue:31
-#: front/src/components/manage/users/UsersTable.vue:20
-#: front/src/views/federation/LibraryList.vue:29
-#: src/views/playlists/List.vue:28
-msgid "Descending"
-msgstr ""
-
-#: front/src/components/federation/LibraryCard.vue:50
-msgid "Detail"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:71
-#: front/src/components/auth/SubsonicTokenForm.vue:52
-msgid "Disable access"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:49
-msgid "Disable Subsonic access"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:50
-msgid "Disable Subsonic API access?"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:14
-msgid "Discover how to use Funkwhale from other apps"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:16
-msgid "Display publicly"
-msgstr ""
-
-#: front/src/components/playlists/Editor.vue:42
-msgid "Do you want to clear the playlist \"%{ playlist }\"?"
-msgstr ""
-
-#: front/src/components/common/DangerousButton.vue:7
-msgid "Do you want to confirm this action?"
-msgstr ""
-
-#: front/src/views/playlists/Detail.vue:34
-msgid "Do you want to delete the playlist \"%{ playlist }\"?"
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:29
-msgid "Do you want to launch %{ action } on %{ count } element?"
-msgid_plural "Do you want to launch %{ action } on %{ count } elements?"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/Sidebar.vue:112
-msgid "Do you want to restore your previous queue?"
-msgstr ""
-
-#: front/src/App.vue:35
-msgid "Documentation"
-msgstr ""
-
-#: front/src/components/library/Track.vue:48
-#: src/components/audio/track/Table.vue:24
-msgid "Download"
-msgstr ""
-
-#: front/src/components/library/Track.vue:58
-#: front/src/components/manage/library/FilesTable.vue:43
-msgid "Duration"
-msgstr ""
-
-#: front/src/components/Home.vue:96
-msgid "Easy to use"
-msgstr ""
-
-#: front/src/components/About.vue:21
-msgid "Edit instance info"
-msgstr ""
-
-#: front/src/components/radios/Card.vue:20 src/views/playlists/Detail.vue:29
-msgid "Edit..."
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:38
-msgid "Email"
-msgstr ""
-
-#: front/src/views/admin/users/UsersDetail.vue:29
-msgid "Email address"
-msgstr ""
-
-#: front/src/views/auth/EmailConfirm.vue:23
-msgid "Email confirmed"
-msgstr ""
-
-#: front/src/views/playlists/Detail.vue:28
-msgid "End edition"
-msgstr ""
-
-#: front/src/components/library/import/FileUpload.vue:4
-msgid "Ensure your music files are properly tagged before uploading them."
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:20
-msgid "Error"
-msgstr ""
-
-#: front/src/views/admin/Settings.vue:82
-msgid "Error reporting"
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:75
-msgid "Error while applying action"
-msgstr ""
-
-#: front/src/views/auth/PasswordReset.vue:7
-msgid "Error while asking for a password reset"
-msgstr ""
-
-#: front/src/views/auth/PasswordResetConfirm.vue:7
-msgid "Error while changing your password"
-msgstr ""
-
-#: front/src/views/auth/EmailConfirm.vue:7
-msgid "Error while confirming your email"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationForm.vue:4
-msgid "Error while creating invitation"
-msgstr ""
-
-#: front/src/components/admin/SettingsGroup.vue:5
-msgid "Error while saving settings"
-msgstr ""
-
-#: front/src/components/federation/LibraryForm.vue:10
-msgid "Error while scanning library"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:41
-#: front/src/components/library/import/BatchDetail.vue:70
-#: front/src/components/library/import/BatchList.vue:15
-msgid "Errored"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:84
-msgid "Everyone"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:80
-msgid "Everyone on this instance"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:47
-msgid "Exclude"
-msgstr ""
-
-#: front/src/components/discussion/Comment.vue:14
-msgid "Expand"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationsTable.vue:41
-msgid "Expiration date"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationsTable.vue:50
-msgid "Expired"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationsTable.vue:21
-msgid "Expired/used"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:65
-msgid "External source. Supported backends"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:50
-msgid "Favorites"
-msgstr ""
-
-#: front/src/components/federation/LibraryForm.vue:3
-msgid "Federate with a new instance"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:86
-#: src/components/library/import/BatchList.vue:25
-#: front/src/components/manage/users/UsersTable.vue:175
-#: front/src/views/admin/Settings.vue:79
-#: src/views/admin/users/UsersDetail.vue:156
-#: front/src/views/federation/LibraryDetail.vue:40
-msgid "Federation"
-msgstr ""
-
-#: front/src/components/library/import/FileUpload.vue:43
-msgid "File name"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:76
-msgid "File upload"
-msgstr ""
-
-#: front/src/views/admin/library/Base.vue:5
-msgid "Files"
-msgstr ""
-
-#: front/src/components/library/import/ArtistImport.vue:7
-msgid "Filter album types"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:46
-msgid "Filter name"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:54
-msgid "Finished"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:59
-msgid "First, choose where you want to import the music from"
-msgstr ""
-
-#: front/src/components/federation/LibraryCard.vue:44
-msgid "Follow"
-msgstr ""
-
-#: front/src/components/federation/LibraryCard.vue:36
-msgid "Follow request pending approval"
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:21
-msgid "Follow status"
-msgstr ""
-
-#: front/src/views/federation/Base.vue:13
-msgid "Followers"
-msgstr ""
-
-#: front/src/components/federation/LibraryCard.vue:18
-msgid "Followers only"
-msgstr ""
-
-#: front/src/components/federation/LibraryCard.vue:15
-#: front/src/views/federation/LibraryDetail.vue:29
-msgid "Following"
-msgstr ""
-
-#: front/src/components/activity/Like.vue:12
-#: src/components/activity/Listen.vue:12
-msgid "from %{ album } by %{ artist }"
-msgstr ""
-
-#: front/src/components/library/Track.vue:13
-msgid "From album %{ album } by %{ artist }"
-msgstr ""
-
-#: front/src/App.vue:53
-msgid "Funkwhale is a free and open-source project run by volunteers. You can help us improve the platform by reporting bugs, suggesting features and share the project with your friends!"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:7
-msgid "Funkwhale is compatible with other music players that support the Subsonic API."
-msgstr ""
-
-#: front/src/components/Home.vue:98
-msgid "Funkwhale is dead simple to use."
-msgstr ""
-
-#: front/src/components/Home.vue:39
-msgid "Funkwhale is designed to make it easy to listen to music you like, or to discover new artists."
-msgstr ""
-
-#: front/src/components/Home.vue:119
-msgid "Funkwhale is free and gives you control on your music."
-msgstr ""
-
-#: front/src/components/Home.vue:66
-msgid "Funkwhale takes care of handling your music"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationForm.vue:16
-msgid "Get a new invitation"
-msgstr ""
-
-#: front/src/components/Home.vue:13
-msgid "Get me to the library"
-msgstr ""
-
-#: front/src/components/Home.vue:77
-msgid ""
-"Get quality metadata about your music thanks to\n"
-"              <a href=\"https://musicbrainz.org\" target=\"_blank\">\n"
-"                MusicBrainz\n"
-"              </a>"
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:21
-#: front/src/components/common/ActionTable.vue:27
-msgid "Go"
-msgstr ""
-
-#: front/src/components/PageNotFound.vue:14
-msgid "Go to home page"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:13
-msgid "Grab corresponding metadata"
-msgstr ""
-
-#: front/src/components/instance/Stats.vue:36
-msgid "Hours of music"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:11
-msgid "However, accessing Funkwhale from those clients require a separate password you can set below."
-msgstr ""
-
-#: front/src/components/library/import/BatchList.vue:34
-msgid "ID"
-msgstr ""
-
-#: front/src/views/auth/PasswordResetConfirm.vue:24
-msgid "If the email address provided in the previous step is valid and binded to a user account, you should receive an email with reset instructions in the next couple of minutes."
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:159
-#: front/src/components/library/Library.vue:17
-msgid "Import"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:42
-msgid "Import #%{ id } launched"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:38
-msgid "Import %{ count } track"
-msgid_plural "Import %{ count } tracks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/library/import/BatchDetail.vue:10
-msgid "Import batch"
-msgstr ""
-
-#: front/src/components/library/Library.vue:20
-msgid "Import batches"
-msgstr ""
-
-#: front/src/components/manage/library/FilesTable.vue:40
-#: front/src/components/manage/library/RequestsTable.vue:53
-msgid "Import date"
-msgstr ""
-
-#: front/src/components/library/import/FileUpload.vue:38
-msgid "Import detail page"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:80
-msgid "Import music"
-msgstr ""
-
-#: front/src/components/Home.vue:71
-msgid "Import music from various platforms, such as YouTube or SoundCloud"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:14
-#: front/src/components/federation/LibraryTrackTable.vue:51
-msgid "Import pending"
-msgstr ""
-
-#: front/src/views/admin/library/Base.vue:9
-#: front/src/views/admin/library/RequestsList.vue:3
-msgid "Import requests"
-msgstr ""
-
-#: front/src/components/library/import/BatchList.vue:20
-#: front/src/components/library/import/Main.vue:6
-msgid "Import source"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:9
-msgid "Import status"
-msgstr ""
-
-#: front/src/components/library/import/ReleaseImport.vue:14
-msgid "Import this release"
-msgstr ""
-
-#: front/src/components/library/import/TrackImport.vue:11
-msgid "Import this track"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:12
-#: front/src/components/manage/library/RequestsTable.vue:29
-#: front/src/components/manage/library/RequestsTable.vue:61
-msgid "Imported"
-msgstr ""
-
-#: front/src/components/library/import/TrackImport.vue:44
-msgid "Imported URL"
-msgstr ""
-
-#: front/src/views/admin/Settings.vue:77
-msgid "Imports"
-msgstr ""
-
-#: front/src/components/favorites/TrackFavoriteIcon.vue:3
-msgid "In favorites"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:50
-msgid "In library"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:96
-msgid "Input a MusicBrainz ID manually:"
-msgstr ""
-
-#: front/src/components/playlists/Editor.vue:31
-msgid "Insert from queue (%{ count } track)"
-msgid_plural "Insert from queue (%{ count } tracks)"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/views/admin/Settings.vue:75
-msgid "Instance information"
-msgstr ""
-
-#: front/src/views/admin/users/Base.vue:8
-#: src/views/admin/users/InvitationsList.vue:3
-msgid "Invitations"
-msgstr ""
-
-#: front/src/App.vue:40
-msgid "Issue tracker"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:80
-msgid "Job ID"
-msgstr ""
-
-#: front/src/components/library/import/BatchList.vue:36
-msgid "Jobs"
-msgstr ""
-
-#: front/src/components/Home.vue:50
-msgid "Keep a track of your favorite songs"
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:41
-#: front/src/views/admin/users/UsersDetail.vue:45
-msgid "Last activity"
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:101
-msgid "Last fetched"
-msgstr ""
-
-#: front/src/components/playlists/PlaylistModal.vue:32
-msgid "Last modification"
-msgstr ""
-
-#: front/src/components/library/Home.vue:9
-msgid "Latest artists"
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:39
-msgid "Launch"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:18
-#: front/src/components/library/import/BatchList.vue:35
-msgid "Launch date"
-msgstr ""
-
-#: front/src/components/federation/LibraryForm.vue:31
-msgid "Launch scan"
-msgstr ""
-
-#: front/src/components/Home.vue:10
-msgid "Learn more about this instance"
-msgstr ""
-
-#: front/src/components/requests/Form.vue:10
-msgid "Leave this field empty if you're requesting the whole discography."
-msgstr ""
-
-#: front/src/views/federation/Base.vue:5
-msgid "Libraries"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:69
-#: front/src/components/federation/LibraryTrackTable.vue:36
-#: front/src/components/manage/users/UsersTable.vue:171
-#: front/src/views/admin/users/UsersDetail.vue:152
-msgid "Library"
-msgstr ""
-
-#: front/src/views/admin/library/FilesList.vue:3
-msgid "Library files"
-msgstr ""
-
-#: front/src/components/federation/LibraryForm.vue:20
-msgid "Library name"
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:84
-msgid "Library size"
-msgstr ""
-
-#: front/src/App.vue:29
-msgid "Links"
-msgstr ""
-
-#: front/src/views/instance/Timeline.vue:4
-msgid "Loading timeline..."
-msgstr ""
-
-#: front/src/components/favorites/List.vue:5
-msgid "Loading your favorites..."
-msgstr ""
-
-#: front/src/components/auth/Login.vue:4
-msgid "Log in to your Funkwhale account"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:38
-msgid "Logged in as %{ username }"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:43 src/components/auth/Login.vue:42
-msgid "Login"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:42
-msgid "Logout"
-msgstr ""
-
-#: front/src/components/library/Track.vue:94
-msgid "Lyrics"
-msgstr ""
-
-#: front/src/components/playlists/PlaylistModal.vue:3
-msgid "Manage playlists"
-msgstr ""
-
-#: front/src/views/playlists/List.vue:8
-msgid "Manage your playlists"
-msgstr ""
-
-#: front/src/components/manage/library/RequestsTable.vue:192
-msgid "Mark as closed"
-msgstr ""
-
-#: front/src/components/manage/library/RequestsTable.vue:191
-msgid "Mark as imported"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:12
-msgid "Metadata"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:115
-msgid ""
-"Metadata is the data related to the music you want to import. This includes all the information about the artists, albums and tracks. In order to have a high quality library, it is recommended to grab data from the\n"
-"            <a href=\"https://musicbrainz.org\" target=\"_blank\">\n"
-"              MusicBrainz\n"
-"            </a>\n"
-"            project, which you can think about as the Wikipedia of music."
-msgstr ""
-
-#: front/src/components/Sidebar.vue:47
-#: src/components/library/import/Main.vue:18
-msgid "Music"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:147
-msgid "Music request"
-msgstr ""
-
-#: front/src/components/library/Home.vue:26
-msgid "Music requests"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:34
-msgid "My account"
-msgstr ""
-
-#: front/src/components/library/Track.vue:64
-#: src/components/library/Track.vue:75
-#: front/src/components/library/Track.vue:86
-#: front/src/components/manage/library/FilesTable.vue:63
-#: front/src/components/manage/library/FilesTable.vue:69
-#: front/src/components/manage/library/FilesTable.vue:75
-#: front/src/components/manage/library/FilesTable.vue:81
-#: front/src/components/manage/users/UsersTable.vue:61
-#: front/src/views/admin/users/UsersDetail.vue:49
-#: front/src/components/manage/library/RequestsTable.vue:72
-#: front/src/components/manage/library/RequestsTable.vue:83
-msgid "N/A"
-msgstr ""
-
-#: front/src/components/playlists/PlaylistModal.vue:31
-#: front/src/views/admin/users/UsersDetail.vue:21
-msgid "Name"
-msgstr ""
-
-#: front/src/views/auth/PasswordResetConfirm.vue:14
-#: front/src/components/auth/Settings.vue:56
-msgid "New password"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:157
-msgid "New tracks will be appended here automatically."
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:29
-msgid "Next step"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:124
-msgid "No"
-msgstr ""
-
-#: front/src/components/Home.vue:103
-msgid "No add-ons, no plugins : you only need a web library"
-msgstr ""
-
-#: front/src/components/library/Track.vue:102
-msgid "No lyrics available for this track."
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:76
-msgid "Nobody except me"
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:32
-msgid "Not following"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:13
-#: front/src/components/federation/LibraryTrackTable.vue:52
-msgid "Not imported"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationsTable.vue:51
-msgid "Not used"
-msgstr ""
-
-#: front/src/App.vue:34
-msgid "Official website"
-msgstr ""
-
-#: front/src/components/library/import/FileUpload.vue:36
-msgid "Once all your files are uploaded, simply click the following button to check the import status."
-msgstr ""
-
-#: front/src/components/federation/LibraryCard.vue:21
-#: front/src/components/manage/users/InvitationsTable.vue:20
-msgid "Open"
-msgstr ""
-
-#: front/src/App.vue:60
-msgid "Options"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:93
-msgid "Or"
-msgstr ""
-
-#: front/src/components/favorites/List.vue:23
-#: src/components/library/Artists.vue:15
-#: front/src/components/library/Radios.vue:17
-#: front/src/components/manage/library/FilesTable.vue:9
-#: front/src/components/manage/library/RequestsTable.vue:9
-#: front/src/components/manage/users/UsersTable.vue:9
-#: front/src/views/federation/LibraryList.vue:18
-#: src/views/playlists/List.vue:17
-#: front/src/components/manage/users/InvitationsTable.vue:10
-msgid "Ordering"
-msgstr ""
-
-#: front/src/components/favorites/List.vue:31
-#: src/components/library/Artists.vue:23
-#: front/src/components/library/Radios.vue:25
-#: front/src/components/manage/library/FilesTable.vue:17
-#: front/src/components/manage/library/RequestsTable.vue:17
-#: front/src/components/manage/users/UsersTable.vue:17
-#: front/src/views/federation/LibraryList.vue:26
-#: src/views/playlists/List.vue:25
-msgid "Ordering direction"
-msgstr ""
-
-#: front/src/components/manage/users/InvitationsTable.vue:38
-msgid "Owner"
-msgstr ""
-
-#: front/src/components/PageNotFound.vue:7
-msgid "Page not found!"
-msgstr ""
-
-#: front/src/components/auth/Login.vue:32
-msgid "Password"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:95
-msgid "Password updated"
-msgstr ""
-
-#: front/src/views/auth/PasswordResetConfirm.vue:28
-msgid "Password updated successfully"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:46
-#: front/src/components/library/import/BatchDetail.vue:33
-#: front/src/components/library/import/BatchDetail.vue:69
-#: front/src/components/library/import/BatchList.vue:14
-#: front/src/components/library/import/FileUpload.vue:59
-#: front/src/components/manage/library/RequestsTable.vue:27
-#: front/src/components/manage/library/RequestsTable.vue:63
-msgid "Pending"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:11
-#: front/src/views/federation/LibraryDetail.vue:26
-msgid "Pending approval"
-msgstr ""
-
-#: front/src/components/requests/Form.vue:26
-msgid "Pending requests"
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:42
-#: front/src/views/admin/users/UsersDetail.vue:68
-msgid "Permissions"
-msgstr ""
-
-#: front/src/components/audio/PlayButton.vue:8
-#: src/components/library/Track.vue:30
-msgid "Play"
-msgstr ""
-
-#: front/src/components/audio/album/Card.vue:50
-#: front/src/components/audio/artist/Card.vue:44
-#: src/components/library/Album.vue:28 front/src/views/playlists/Detail.vue:22
-msgid "Play all"
-msgstr ""
-
-#: front/src/components/library/Artist.vue:26
-msgid "Play all albums"
-msgstr ""
-
-#: front/src/components/audio/PlayButton.vue:47
-msgid "Play immediatly"
-msgstr ""
-
-#: front/src/components/audio/PlayButton.vue:14
-msgid "Play next"
-msgstr ""
-
-#: front/src/components/audio/PlayButton.vue:15
-msgid "Play now"
-msgstr ""
-
-#: front/src/views/playlists/Detail.vue:11
-msgid "Playlist containing %{ count } track, by %{ username }"
-msgid_plural "Playlist containing %{ count } tracks, by %{ username }"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/playlists/Form.vue:9
-msgid "Playlist created"
-msgstr ""
-
-#: front/src/components/playlists/Editor.vue:4
-msgid "Playlist editor"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:21
-msgid "Playlist name"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:6
-msgid "Playlist updated"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:25
-msgid "Playlist visibility"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:55 src/components/library/Library.vue:13
-#: front/src/views/admin/Settings.vue:78
-msgid "Playlists"
-msgstr ""
-
-#: front/src/components/Home.vue:56
-msgid "Playlists? We got them"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:46
-msgid "Please double-check your password is correct"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:26
-msgid "Previous step"
-msgstr ""
-
-#: front/src/views/auth/EmailConfirm.vue:26
-#: front/src/views/auth/PasswordResetConfirm.vue:31
-msgid "Proceed to login"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:35
-msgid "Published date"
-msgstr ""
-
-#: front/src/components/library/import/ArtistImport.vue:17
-msgid "Query template"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:20
-msgid "Queue"
-msgstr ""
-
-#: front/src/components/audio/Player.vue:183
-msgid "Queue shuffled!"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:11
-msgid "Radio name"
-msgstr ""
-
-#: front/src/components/library/Home.vue:18
-#: src/components/library/Library.vue:10
-msgid "Radios"
-msgstr ""
-
-#: front/src/views/instance/Timeline.vue:7
-msgid "Recent activity on this instance"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:81
-msgid "Recording MusicBrainz ID"
-msgstr ""
-
-#: front/src/views/admin/users/UsersDetail.vue:84
-#: front/src/views/federation/LibraryDetail.vue:122
-msgid "Refresh"
-msgstr ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:42
-msgid "Refused"
-msgstr ""
-
-#: front/src/components/auth/Profile.vue:11
-msgid "Registered since %{ date }"
-msgstr ""
-
-#: front/src/components/auth/Signup.vue:9
-msgid "Registration are closed on this instance, you will need an invitation code to signup."
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:71
-msgid "regular user"
-msgstr ""
-
-#: front/src/components/library/radios/Filter.vue:59
-msgid "Remove"
-msgstr ""
-
-#: front/src/components/favorites/TrackFavoriteIcon.vue:19
-msgid "Remove from favorites"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:34
-#: front/src/components/auth/SubsonicTokenForm.vue:37
-msgid "Request a new password"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:35
-msgid "Request a new Subsonic API password?"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:43
-msgid "Request a password"
-msgstr ""
-
-#: front/src/components/auth/Login.vue:34 src/views/auth/PasswordReset.vue:4
-msgid "Reset your password"
-msgstr ""
-
-#: front/src/components/library/import/TrackImport.vue:31
-msgid "Result %{ current }/%{ total }"
-msgstr ""
-
-#: front/src/components/favorites/List.vue:38
-#: src/components/library/Artists.vue:30
-#: front/src/components/library/Radios.vue:36
-#: src/views/federation/LibraryList.vue:33
-#: front/src/views/playlists/List.vue:32
-msgid "Results per page"
-msgstr ""
-
-#: front/src/components/admin/SettingsGroup.vue:63
-#: front/src/components/library/radios/Builder.vue:19
-msgid "Save"
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:112
-msgid "Scan triggered!"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:5
-#: front/src/components/library/Artists.vue:10
-#: src/components/library/Radios.vue:13
-#: front/src/components/library/import/BatchDetail.vue:62
-#: front/src/components/library/import/BatchList.vue:7
-#: front/src/components/manage/library/FilesTable.vue:5
-#: front/src/components/manage/library/RequestsTable.vue:5
-#: front/src/components/manage/users/InvitationsTable.vue:5
-#: front/src/components/manage/users/UsersTable.vue:5
-#: front/src/views/federation/LibraryList.vue:14
-#: src/views/playlists/List.vue:13
-msgid "Search"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:85
-msgid "Search an entity you want to import:"
-msgstr ""
-
-#: front/src/components/audio/Search.vue:2
-msgid "Search for some music"
-msgstr ""
-
-#: front/src/components/library/Track.vue:105
-msgid "Search on lyrics.wikia.com"
-msgstr ""
-
-#: front/src/components/library/Album.vue:33
-#: src/components/library/Artist.vue:31
-#: front/src/components/library/Track.vue:40
-msgid "Search on Wikipedia"
-msgstr ""
-
-#: front/src/components/library/import/TrackImport.vue:42
-msgid "Search query"
-msgstr ""
-
-#: front/src/views/admin/Settings.vue:15
-msgid "Sections"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:31
-msgid "Select a filter"
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:61
-msgid "Select all %{ total } elements"
-msgid_plural "Select all %{ total } elements"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/library/import/FileUpload.vue:22
-msgid "Select files to upload..."
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:69
-msgid "Select only current page"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:19
-msgid "Select relevant sources or files for import"
-msgstr ""
-
-#: front/src/components/federation/LibraryCard.vue:43
-msgid "Send a follow request"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:96
-#: src/components/manage/users/UsersTable.vue:179
-#: front/src/views/admin/users/UsersDetail.vue:160
-msgid "Settings"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:10
-msgid "Settings updated"
-msgstr ""
-
-#: front/src/components/admin/SettingsGroup.vue:11
-msgid "Settings updated successfully."
-msgstr ""
-
-#: front/src/components/auth/Profile.vue:23
-msgid "Settings..."
-msgstr ""
-
-#: front/src/components/manage/users/InvitationForm.vue:27
-msgid "Share link"
-msgstr ""
-
-#: front/src/components/audio/artist/Card.vue:30
-msgid "Show 1 more album"
-msgid_plural "Show %{ count } more albums"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/audio/album/Card.vue:40
-msgid "Show 1 more track"
-msgid_plural "Show %{ count } more tracks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/federation/LibraryFollowTable.vue:97
-#: front/src/components/federation/LibraryTrackTable.vue:83
-#: front/src/components/library/import/BatchDetail.vue:128
-#: front/src/components/library/import/BatchList.vue:73
-#: front/src/components/manage/library/FilesTable.vue:97
-#: front/src/components/manage/library/RequestsTable.vue:104
-#: front/src/components/manage/users/InvitationsTable.vue:76
-#: front/src/components/manage/users/UsersTable.vue:87
-msgid "Showing results %{ start }-%{ end } on %{ total }"
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:40
-#: front/src/views/admin/users/UsersDetail.vue:37
-msgid "Sign-up"
-msgstr ""
-
-#: front/src/components/library/Track.vue:69
-#: front/src/components/library/import/FileUpload.vue:44
-#: front/src/components/manage/library/FilesTable.vue:44
-msgid "Size"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:37
-#: front/src/components/library/import/BatchDetail.vue:72
-msgid "Skipped"
-msgstr ""
-
-#: front/src/components/requests/Form.vue:3
-msgid "Something's missing in the library? Let us know what you would like to listen!"
-msgstr ""
-
-#: front/src/components/audio/Search.vue:25
-msgid "Sorry, we did not found any album matching your query"
-msgstr ""
-
-#: front/src/components/audio/Search.vue:16
-msgid "Sorry, we did not found any artist matching your query"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:82
-#: front/src/components/library/import/BatchList.vue:38
-#: front/src/components/library/import/TrackImport.vue:17
-msgid "Source"
-msgstr ""
-
-#: front/src/App.vue:38
-msgid "Source code"
-msgstr ""
-
-#: front/src/App.vue:37
-msgid "Source code (%{version})"
-msgstr ""
-
-#: front/src/components/auth/Profile.vue:19
-#: front/src/components/manage/users/UsersTable.vue:70
-msgid "Staff member"
-msgstr ""
-
-#: front/src/components/radios/Button.vue:4
-msgid "Start"
-msgstr ""
-
-#: front/src/components/library/import/FileUpload.vue:28
-msgid "Start Upload"
-msgstr ""
-
-#: front/src/views/admin/Settings.vue:81
-msgid "Statistics"
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:31
-#: front/src/components/library/import/BatchDetail.vue:66
-#: front/src/components/library/import/BatchDetail.vue:83
-#: front/src/components/library/import/BatchList.vue:11
-#: front/src/components/library/import/BatchList.vue:37
-#: front/src/components/library/import/FileUpload.vue:45
-#: front/src/components/manage/library/RequestsTable.vue:48
-#: front/src/components/manage/users/InvitationsTable.vue:39
-#: front/src/components/manage/users/UsersTable.vue:43
-#: front/src/components/manage/users/InvitationsTable.vue:18
-msgid "Status"
-msgstr ""
-
-#: front/src/components/radios/Button.vue:3
-msgid "Stop"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:158
-msgid "Stop radio"
-msgstr ""
-
-#: front/src/components/library/import/FileUpload.vue:32
-msgid "Stop Upload"
-msgstr ""
-
-#: front/src/App.vue:9 src/components/requests/Form.vue:17
-msgid "Submit"
-msgstr ""
-
-#: front/src/components/requests/Form.vue:22
-msgid "Submit another request"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:26
-#: front/src/components/library/import/BatchList.vue:39
-msgid "Submitted by"
-msgstr ""
-
-#: front/src/views/admin/Settings.vue:80
-msgid "Subsonic"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:2
-msgid "Subsonic API password"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:71
-#: front/src/components/library/import/BatchList.vue:16
-#: front/src/components/library/import/FileUpload.vue:56
-msgid "Success"
-msgstr ""
-
-#: front/src/components/playlists/Editor.vue:9
-msgid "Syncing changes to server..."
-msgstr ""
-
-#: front/src/components/Home.vue:26
-msgid "That's simple: we loved Grooveshark and we want to build something even better."
-msgstr ""
-
-#: front/src/App.vue:56
-msgid "The funkwhale logo was kindly designed and provided by Francis Gading."
-msgstr ""
-
-#: front/src/components/Home.vue:124
-msgid "The plaform is free and open-source, you can install it and modify it without worries"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:4
-msgid "The Subsonic API is not available on this Funkwhale instance."
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:149
-msgid "This import will be associated with the music request below. After the import is finished, the request will be marked as fulfilled."
-msgstr ""
-
-#: front/src/components/auth/Profile.vue:15
-msgid "This is you!"
-msgstr ""
-
-#: front/src/components/audio/PlayButton.vue:50
-msgid "This track is not imported and cannot be played"
-msgstr ""
-
-#: front/src/views/playlists/Detail.vue:36
-msgid "This will completely delete this playlist and cannot be undone."
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:51
-msgid "This will completely disable access to the Subsonic API using from account."
-msgstr ""
-
-#: front/src/App.vue:130
-msgid "This will erase your local data and disconnect you, do you want to continue?"
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:36
-msgid "This will log you out from existing devices that use the current password."
-msgstr ""
-
-#: front/src/components/playlists/Editor.vue:44
-msgid "This will remove all tracks from this playlist and cannot be undone."
-msgstr ""
-
-#: front/src/components/federation/LibraryTrackTable.vue:32
-#: front/src/components/manage/library/FilesTable.vue:37
-#: front/src/components/audio/track/Table.vue:7
-msgid "Title"
-msgstr ""
-
-#: front/src/components/library/import/BatchDetail.vue:84
-#: front/src/components/metadata/Search.vue:133
-msgid "Track"
-msgstr ""
-
-#: front/src/components/library/Track.vue:53
-msgid "Track information"
-msgstr ""
-
-#: front/src/components/library/radios/Filter.vue:44
-msgid "Track matching filter"
-msgstr ""
-
-#: front/src/components/instance/Stats.vue:54
-msgid "tracks"
-msgstr ""
-
-#: front/src/components/library/Album.vue:43
-#: front/src/components/playlists/PlaylistModal.vue:33
-#: front/src/views/federation/Base.vue:8
-msgid "Tracks"
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:125
-msgid "Tracks available in this library"
-msgstr ""
-
-#: front/src/components/instance/Stats.vue:25
-msgid "Tracks favorited"
-msgstr ""
-
-#: front/src/components/instance/Stats.vue:19
-msgid "tracks listened"
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:109
-msgid "Trigger scan"
-msgstr ""
-
-#: front/src/components/manage/library/FilesTable.vue:41
-msgid "Type"
-msgstr ""
-
-#: front/src/components/About.vue:15
-msgid "Unfortunately, owners of this instance did not yet take the time to complete this page."
-msgstr ""
-
-#: front/src/views/federation/LibraryDetail.vue:95
-msgid "Unkwnown"
-msgstr ""
-
-#: front/src/components/Home.vue:37
-msgid "Unlimited music"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:33
-msgid "Update playlist"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:27
-msgid "Update settings"
-msgstr ""
-
-#: front/src/views/auth/PasswordResetConfirm.vue:21
-msgid "Update your password"
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:167
-#: front/src/views/admin/users/UsersDetail.vue:148
-msgid "Upload"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:7
-msgid "Uploaded files or external source"
-msgstr ""
-
-#: front/src/components/library/import/FileUpload.vue:57
-msgid "Uploading..."
-msgstr ""
-
-#: front/src/App.vue:42
-msgid "Use another instance"
-msgstr ""
-
-#: front/src/views/auth/PasswordReset.vue:12
-msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password."
-msgstr ""
-
-#: front/src/components/federation/LibraryForm.vue:6
-msgid "Use this form to scan an instance and setup federation."
-msgstr ""
-
-#: front/src/components/manage/users/InvitationsTable.vue:49
-msgid "Used"
-msgstr ""
-
-#: front/src/components/manage/library/RequestsTable.vue:47
-msgid "User"
-msgstr ""
-
-#: front/src/components/instance/Stats.vue:5
-msgid "User activity"
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:37
-msgid "Username"
-msgstr ""
-
-#: front/src/components/auth/Login.vue:15
-msgid "Username or email"
-msgstr ""
-
-#: front/src/components/instance/Stats.vue:13
-msgid "users"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:102 src/views/admin/Settings.vue:76
-#: front/src/views/admin/users/Base.vue:5 src/views/admin/users/UsersList.vue:3
-msgid "Users"
-msgstr ""
-
-#: front/src/components/library/Album.vue:37
-#: src/components/library/Artist.vue:35
-#: front/src/components/library/Track.vue:44
-msgid "View on MusicBrainz"
-msgstr ""
-
-#: front/src/components/playlists/PlaylistModal.vue:20
-msgid "We cannot add the track to a playlist"
-msgstr ""
-
-#: front/src/components/playlists/Form.vue:14
-msgid "We cannot create the playlist"
-msgstr ""
-
-#: front/src/components/auth/Login.vue:7
-msgid "We cannot log you in"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:14
-msgid "We cannot save your settings"
-msgstr ""
-
-#: front/src/components/Home.vue:130
-msgid "We do not track you or bother you with ads"
-msgstr ""
-
-#: front/src/components/library/import/FileUpload.vue:5
-msgid "We recommend using Picard for that purpose."
-msgstr ""
-
-#: front/src/components/Home.vue:7
-msgid "We think listening to music should be simple."
-msgstr ""
-
-#: front/src/components/PageNotFound.vue:10
-msgid "We're sorry, the page you asked for does not exist:"
-msgstr ""
-
-#: front/src/components/requests/Form.vue:21
-msgid "We've received your request, you'll get some groove soon ;)"
-msgstr ""
-
-#: front/src/components/Home.vue:5
-msgid "Welcome on Funkwhale"
-msgstr ""
-
-#: front/src/components/Home.vue:24
-msgid "Why funkwhale?"
-msgstr ""
-
-#: front/src/components/Sidebar.vue:123
-msgid "Yes"
-msgstr ""
-
-#: front/src/components/auth/Logout.vue:8
-msgid "Yes, log me out!"
-msgstr ""
-
-#: front/src/components/auth/Logout.vue:7
-msgid "You are currently logged in as %{ username }"
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:111
-msgid "You can also skip this step and enter metadata manually."
-msgstr ""
-
-#: front/src/components/Home.vue:136
-msgid "You can invite friends and family to your instance so they can enjoy your music"
-msgstr ""
-
-#: front/src/components/library/radios/Builder.vue:7
-msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria."
-msgstr ""
-
-#: front/src/components/auth/SubsonicTokenForm.vue:8
-msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance."
-msgstr ""
-
-#: front/src/components/Sidebar.vue:155
-msgid "You have a radio playing"
-msgstr ""
-
-#: front/src/App.vue:6
-msgid "You need to select an instance in order to continue"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:67
-msgid "You will be logged out from this session and have to log out with the new one"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:38
-msgid "You will have to update your password on your clients that use this password."
-msgstr ""
-
-#: front/src/components/library/import/Main.vue:103
-msgid "You will import:"
-msgstr ""
-
-#: front/src/views/auth/EmailConfirm.vue:24
-msgid "Your email address was confirmed, you can now use the service without limitations."
-msgstr ""
-
-#: front/src/components/Home.vue:117
-msgid "Your music, your way"
-msgstr ""
-
-#: front/src/views/auth/PasswordResetConfirm.vue:29
-msgid "Your password has been updated successfully."
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:68
-msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password"
-msgstr ""
-
-#: front/src/components/auth/Signup.vue:5
-msgid "Create a funkwhale account"
-msgstr ""
-
-#: front/src/components/auth/Signup.vue:43
-msgid "Invitation code"
-msgstr ""
-
-#: front/src/components/auth/Login.vue:10
-msgid "Please double-check your username/password couple is correct"
-msgstr ""
-
-#: front/src/components/auth/Settings.vue:66
-msgid "Changing your password will have the following consequences"
-msgstr ""
-
-#: front/src/components/audio/PlayButton.vue:145
-msgid "%{ count } track was added to your queue"
-msgid_plural "%{ count } tracks were added to your queue"
-msgstr[0] ""
-msgstr[1] ""
-
-#: front/src/components/audio/track/Table.vue:30
-msgid "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."
-msgstr ""
-
-#: front/src/components/manage/users/UsersTable.vue:55
-msgid "Inactive"
-msgstr ""
-
-#: front/src/components/common/ActionTable.vue:38
-msgid "This may affect a lot of elements, please double check this is really what you want."
-msgstr ""
diff --git a/front/locales/fr_FR/LC_MESSAGES/app.po b/front/locales/fr_FR/LC_MESSAGES/app.po
index 0cd4ab5e19304f07abcca2c599b6ecf80b383bf0..ea422573fcb6a1b49a9f9b2a9b1d49dd134871a4 100644
--- a/front/locales/fr_FR/LC_MESSAGES/app.po
+++ b/front/locales/fr_FR/LC_MESSAGES/app.po
@@ -1,22 +1,17 @@
-# French translations for front package.
-# Copyright (C) 2018 THE front'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the front package.
-# Automatically generated, 2018.
-#
 msgid ""
 msgstr ""
-"Project-Id-Version: front 1.0.0\n"
+"Project-Id-Version: French (Funkwhale)\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-07-01 18:34+0200\n"
-"PO-Revision-Date: 2018-07-01 14:45+0000\n"
-"Last-Translator: Eliot Berriot <contact@eliotberriot.com>\n"
+"POT-Creation-Date: 2018-07-01 22:09+0200\n"
+"PO-Revision-Date: 2018-07-01 22:13+0200\n"
+"Last-Translator: \n"
 "Language-Team: French <https://translate.funkwhale.audio/projects/funkwhale/front/fr/>\n"
 "Language: fr_FR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 2.20\n"
+"X-Generator: Poedit 1.8.11\n"
 
 #: front/src/components/playlists/PlaylistModal.vue:9
 msgid "\"%{ title }\", by %{ artist }"
@@ -70,6 +65,10 @@ msgstr "%{ user } a ajouté une piste a ses favoris"
 msgid "%{ user } listened to a track"
 msgstr "%{ user } a écouté une piste"
 
+#: front/src/components/auth/Profile.vue:43
+msgid "%{ username }'s profile"
+msgstr "Profil de %{ username }"
+
 #: front/src/components/audio/artist/Card.vue:41
 msgid "1 album"
 msgid_plural "%{ count } albums"
@@ -93,7 +92,7 @@ msgstr[1] "%{ count } pistes"
 msgid "About Funkwhale"
 msgstr "À propos de Funkwhale"
 
-#: front/src/App.vue:32 src/components/About.vue:8
+#: front/src/App.vue:32 src/components/About.vue:8 src/components/About.vue:55
 msgid "About this instance"
 msgstr "A propos de cette instance"
 
@@ -118,6 +117,10 @@ msgstr "Compte actif"
 msgid "Account settings"
 msgstr "Paramètres du compte"
 
+#: front/src/components/auth/Settings.vue:180
+msgid "Account Settings"
+msgstr "Paramètres du compte"
+
 #: front/src/components/manage/users/UsersTable.vue:39
 msgid "Account status"
 msgstr "Statut du compte"
@@ -155,12 +158,17 @@ msgstr "Ajouter des filtres"
 msgid "Add filters to customize your radio"
 msgstr "Ajouter des filtres pour personnaliser votre radio"
 
+#: front/src/components/audio/PlayButton.vue:47
+msgid "Add to current queue"
+msgstr "Ajouter à la queue"
+
 #: front/src/components/favorites/TrackFavoriteIcon.vue:4
 #: front/src/components/favorites/TrackFavoriteIcon.vue:21
 msgid "Add to favorites"
 msgstr "Ajouter aux favoris"
 
 #: front/src/components/playlists/TrackPlaylistIcon.vue:6
+#: front/src/components/playlists/TrackPlaylistIcon.vue:32
 msgid "Add to playlist..."
 msgstr "Ajouter à une playlist..."
 
@@ -168,6 +176,10 @@ msgstr "Ajouter à une playlist..."
 msgid "Add to queue"
 msgstr "Ajouter à la queue"
 
+#: front/src/components/playlists/PlaylistModal.vue:115
+msgid "Add to this playlist"
+msgstr "Ajouter à cette playlist"
+
 #: front/src/components/playlists/PlaylistModal.vue:54
 msgid "Add track"
 msgstr "Ajouter une piste"
@@ -180,9 +192,11 @@ msgstr "Admin"
 msgid "Administration"
 msgstr "Administration"
 
+#: front/src/components/audio/SearchBar.vue:26
 #: front/src/components/federation/LibraryTrackTable.vue:34
+#: front/src/components/library/Album.vue:91
 #: front/src/components/manage/library/FilesTable.vue:39
-#: front/src/components/metadata/Search.vue:129
+#: front/src/components/metadata/Search.vue:134
 #: front/src/components/audio/track/Table.vue:9
 msgid "Album"
 msgstr "Album"
@@ -251,10 +265,12 @@ msgstr "Approuvé"
 msgid "Are you sure you want to log out?"
 msgstr "Êtes-vous sur de vouloir vous déconnecter ?"
 
+#: front/src/components/audio/SearchBar.vue:25
 #: front/src/components/federation/LibraryTrackTable.vue:33
+#: front/src/components/library/Artist.vue:108
 #: front/src/components/manage/library/FilesTable.vue:38
 #: front/src/components/manage/library/RequestsTable.vue:49
-#: front/src/components/metadata/Search.vue:125
+#: front/src/components/metadata/Search.vue:130
 msgid "Artist"
 msgstr "Artiste"
 
@@ -267,14 +283,22 @@ msgstr "Nom de l'artiste"
 msgid "Artist page"
 msgstr "Page de l'artiste"
 
+#: front/src/components/audio/Search.vue:65
+msgid "Artist, album, track..."
+msgstr "Artiste, album, piste..."
+
 #: front/src/components/audio/Search.vue:10
 #: src/components/instance/Stats.vue:42
-#: front/src/components/library/Library.vue:7
+#: front/src/components/library/Artists.vue:119
+#: src/components/library/Library.vue:7
 msgid "Artists"
 msgstr "Artistes"
 
 #: front/src/components/favorites/List.vue:33
-#: src/components/library/Radios.vue:28
+#: src/components/library/Artists.vue:25
+#: front/src/components/library/Radios.vue:28
+#: front/src/components/manage/library/FilesTable.vue:19
+#: front/src/components/manage/library/RequestsTable.vue:19
 #: front/src/components/manage/users/UsersTable.vue:19
 #: front/src/views/federation/LibraryList.vue:28
 #: src/views/playlists/List.vue:27
@@ -379,6 +403,7 @@ msgid "Change password"
 msgstr "Changer le mot de passe"
 
 #: front/src/views/auth/PasswordResetConfirm.vue:4
+#: front/src/views/auth/PasswordResetConfirm.vue:62
 msgid "Change your password"
 msgstr "Changer votre mot de passe"
 
@@ -394,6 +419,10 @@ msgstr "Changements synchronisés avec le serveur"
 msgid "Changing your password will also change your Subsonic API password if you have requested one."
 msgstr "La mise à jour de votre mot de passe impactera également le mot de passe de l'API Subsonic si vous en avez demandé un."
 
+#: front/src/components/auth/Settings.vue:65
+msgid "Changing your password will have the following consequences"
+msgstr "Modifier votre mot de passe aura les conséquences suivantes"
+
 #: front/src/App.vue:4
 msgid "Choose your instance"
 msgstr "Choisissez votre instance"
@@ -411,6 +440,10 @@ msgstr "Effacer"
 msgid "Clear playlist"
 msgstr "Vider la playlist"
 
+#: front/src/components/audio/Player.vue:256
+msgid "Clear your queue"
+msgstr "Vider la queue"
+
 #: front/src/components/library/import/BatchList.vue:23
 msgid "CLI"
 msgstr "CLI"
@@ -449,6 +482,7 @@ msgid "Confirm"
 msgstr "Confirmer"
 
 #: front/src/views/auth/EmailConfirm.vue:4 src/views/auth/EmailConfirm.vue:20
+#: front/src/views/auth/EmailConfirm.vue:51
 msgid "Confirm your email"
 msgstr "Confirmer votre email"
 
@@ -456,10 +490,18 @@ msgstr "Confirmer votre email"
 msgid "Confirmation code"
 msgstr "Code de confirmation"
 
+#: front/src/components/playlists/Editor.vue:163
+msgid "Copy tracks from current queue to playlist"
+msgstr "Copier les pistes de la queue dans la playlist"
+
 #: front/src/components/Home.vue:88
 msgid "Covers, lyrics, our goal is to have them all ;)"
 msgstr "Pochettes d'albums, paroles, notre but est de tout implémenter ;)"
 
+#: front/src/components/auth/Signup.vue:4
+msgid "Create a funkwhale account"
+msgstr "Créer un compte funkwhale"
+
 #: front/src/components/playlists/Form.vue:2
 msgid "Create a new playlist"
 msgstr "Créer une nouvelle playlist"
@@ -473,6 +515,10 @@ msgstr "Créer un compte"
 msgid "Create import"
 msgstr "Créer un import"
 
+#: front/src/components/auth/Signup.vue:51
+msgid "Create my account"
+msgstr "Créer mon compte"
+
 #: front/src/components/playlists/Form.vue:34
 msgid "Create playlist"
 msgstr "Créer une playlist"
@@ -491,9 +537,9 @@ msgstr "Date de création"
 msgid "Current track"
 msgstr "Piste actuelle"
 
-#: front/src/components/manage/library/FilesTable.vue:184
-#: front/src/components/manage/library/RequestsTable.vue:190
-#: front/src/components/manage/users/InvitationsTable.vue:161
+#: front/src/components/manage/library/FilesTable.vue:189
+#: front/src/components/manage/library/RequestsTable.vue:195
+#: front/src/components/manage/users/InvitationsTable.vue:166
 #: front/src/views/playlists/Detail.vue:32
 msgid "Delete"
 msgstr "Supprimer"
@@ -502,6 +548,10 @@ msgstr "Supprimer"
 msgid "Delete playlist"
 msgstr "Supprimer la playlist"
 
+#: front/src/views/radios/Detail.vue:28
+msgid "Delete radio"
+msgstr "Supprimer la radio"
+
 #: front/src/components/federation/LibraryFollowTable.vue:52
 #: front/src/components/federation/LibraryFollowTable.vue:63
 msgid "Deny"
@@ -512,7 +562,10 @@ msgid "Deny access?"
 msgstr "Refuser l'accès ?"
 
 #: front/src/components/favorites/List.vue:34
-#: src/components/library/Radios.vue:31
+#: src/components/library/Artists.vue:26
+#: front/src/components/library/Radios.vue:31
+#: front/src/components/manage/library/FilesTable.vue:20
+#: front/src/components/manage/library/RequestsTable.vue:20
 #: front/src/components/manage/users/UsersTable.vue:20
 #: front/src/views/federation/LibraryList.vue:29
 #: src/views/playlists/List.vue:28
@@ -523,6 +576,10 @@ msgstr "Descendant"
 msgid "Detail"
 msgstr "Détail"
 
+#: front/src/views/admin/users/UsersDetail.vue:146
+msgid "Determine if the user account is active or not. Inactive users cannot login or user the service."
+msgstr "Détermine si le compte utilisateur est actif ou non. Les comptes inactifs ne peuvent pas se connecter ou utiliser le service."
+
 #: front/src/components/auth/Settings.vue:71
 #: front/src/components/auth/SubsonicTokenForm.vue:52
 msgid "Disable access"
@@ -556,6 +613,10 @@ msgstr "Souhaitez-vous confirmer cette action ?"
 msgid "Do you want to delete the playlist \"%{ playlist }\"?"
 msgstr "Voulez-vous supprimer la playlist \"%{ playlist }\" ?"
 
+#: front/src/views/radios/Detail.vue:26
+msgid "Do you want to delete the radio \"{{ radio }}\"?"
+msgstr "Voulez-vous supprimer la radio \"%{ radio }\" ?"
+
 #: front/src/components/common/ActionTable.vue:29
 msgid "Do you want to launch %{ action } on %{ count } element?"
 msgid_plural "Do you want to launch %{ action } on %{ count } elements?"
@@ -575,6 +636,10 @@ msgstr "Documentation"
 msgid "Download"
 msgstr "Télécharger"
 
+#: front/src/components/playlists/Editor.vue:49
+msgid "Drag and drop rows to reorder tracks in the playlist"
+msgstr "Glissez et déposer les lignes pour réordonner les pistes dans la playlist"
+
 #: front/src/components/library/Track.vue:58
 #: front/src/components/manage/library/FilesTable.vue:43
 msgid "Duration"
@@ -592,6 +657,7 @@ msgstr "Éditer les informations de cette instance"
 msgid "Edit..."
 msgstr "Éditer..."
 
+#: front/src/components/auth/Signup.vue:29
 #: front/src/components/manage/users/UsersTable.vue:38
 msgid "Email"
 msgstr "Email"
@@ -612,11 +678,47 @@ msgstr "Terminer l'édition"
 msgid "Ensure your music files are properly tagged before uploading them."
 msgstr "Vérifier que vos fichiers musicaux sont correctement taggués avant de les envoyer."
 
+#: front/src/components/library/Radios.vue:124
+msgid "Enter a radio name..."
+msgstr "Saisissez un nom de radio..."
+
+#: front/src/components/library/Artists.vue:118
+msgid "Enter an artist name..."
+msgstr "Saisissez un nom d'artiste..."
+
+#: front/src/views/federation/LibraryList.vue:122
+msgid "Enter an library domain name..."
+msgstr "Saisissez un nom de domaine..."
+
+#: front/src/views/playlists/List.vue:104
+msgid "Enter an playlist name..."
+msgstr "Saisissez un nom de playlist..."
+
+#: front/src/components/auth/Signup.vue:97
+msgid "Enter your email"
+msgstr "Saisissez votre email"
+
+#: front/src/components/auth/Signup.vue:95
+msgid "Enter your invitation code (case insensitive)"
+msgstr "Saisissez votre code d'invitation (insensible à la casse)"
+
+#: front/src/components/metadata/Search.vue:114
+msgid "Enter your search query..."
+msgstr "Saisissez votre recherche..."
+
+#: front/src/components/auth/Signup.vue:96
+msgid "Enter your username"
+msgstr "Saisissez votre nom d'utilisateur·rice"
+
+#: front/src/components/auth/Login.vue:77
+msgid "Enter your username or email"
+msgstr "Saisissez votre nom d'utilisateur·rice ou email"
+
 #: front/src/components/auth/SubsonicTokenForm.vue:20
 msgid "Error"
 msgstr "Erreur"
 
-#: front/src/views/admin/Settings.vue:82
+#: front/src/views/admin/Settings.vue:87
 msgid "Error reporting"
 msgstr "Rapports d'erreur"
 
@@ -654,11 +756,11 @@ msgstr "Erreur lors du scan de la bibliothèque"
 msgid "Errored"
 msgstr "En erreur"
 
-#: front/src/components/playlists/Form.vue:84
+#: front/src/components/playlists/Form.vue:89
 msgid "Everyone"
 msgstr "Tout le monde"
 
-#: front/src/components/playlists/Form.vue:80
+#: front/src/components/playlists/Form.vue:85
 msgid "Everyone on this instance"
 msgstr "Tout le monde sur cette instance"
 
@@ -694,15 +796,24 @@ msgstr "Favoris"
 msgid "Federate with a new instance"
 msgstr "Fédérer avec une nouvelle instance"
 
+#: front/src/views/federation/LibraryTrackList.vue:21
+msgid "Federated tracks"
+msgstr "Pistes fédérées"
+
 #: front/src/components/Sidebar.vue:86
 #: src/components/library/import/BatchList.vue:25
-#: front/src/components/manage/users/UsersTable.vue:175
-#: front/src/views/admin/Settings.vue:79
-#: src/views/admin/users/UsersDetail.vue:156
-#: front/src/views/federation/LibraryDetail.vue:40
+#: front/src/components/manage/users/UsersTable.vue:180
+#: front/src/views/admin/Settings.vue:84
+#: src/views/admin/users/UsersDetail.vue:161
+#: front/src/views/federation/Base.vue:35
+#: src/views/federation/LibraryDetail.vue:40
 msgid "Federation"
 msgstr "Fédération"
 
+#: front/src/views/federation/LibraryDetail.vue:3
+msgid "File mirroring"
+msgstr "Réplication des fichiers"
+
 #: front/src/components/library/import/FileUpload.vue:43
 msgid "File name"
 msgstr "Nom du fichier"
@@ -712,6 +823,7 @@ msgid "File upload"
 msgstr "Envoi de fichier"
 
 #: front/src/views/admin/library/Base.vue:5
+#: src/views/admin/library/FilesList.vue:21
 msgid "Files"
 msgstr "Fichiers"
 
@@ -744,6 +856,7 @@ msgid "Follow status"
 msgstr "Statut de l'abonnement"
 
 #: front/src/views/federation/Base.vue:13
+#: front/src/views/federation/LibraryFollowersList.vue:24
 msgid "Followers"
 msgstr "Abonnés"
 
@@ -821,15 +934,17 @@ msgstr "Retourner à la page d'accueil"
 msgid "Grab corresponding metadata"
 msgstr "Récupérer les métadonnées correspondantes"
 
+#: front/src/components/library/Home.vue:66
+msgid "Home"
+msgstr "Accueil"
+
 #: front/src/components/instance/Stats.vue:36
 msgid "Hours of music"
 msgstr "Heures de musique"
 
 #: front/src/components/auth/SubsonicTokenForm.vue:11
 msgid "However, accessing Funkwhale from those clients require a separate password you can set below."
-msgstr ""
-"Cependant, accéder à Funkwhale depuis ces clients requiert un mot de passe "
-"distinct que vous pouvez configurer ci-dessous."
+msgstr "Cependant, accéder à Funkwhale depuis ces clients requiert un mot de passe distinct que vous pouvez configurer ci-dessous."
 
 #: front/src/components/library/import/BatchList.vue:34
 msgid "ID"
@@ -837,12 +952,9 @@ msgstr "ID"
 
 #: front/src/views/auth/PasswordResetConfirm.vue:24
 msgid "If the email address provided in the previous step is valid and binded to a user account, you should receive an email with reset instructions in the next couple of minutes."
-msgstr ""
-"Si l'adresse email que vous avez fournie est valide et associée à un compte "
-"utilisateur, vous allez recevoir un email contenant les instructions de "
-"réinitialisation au cours des prochaines minutes."
+msgstr "Si l'adresse email que vous avez fournie est valide et associée à un compte utilisateur, vous allez recevoir un email contenant les instructions de réinitialisation au cours des prochaines minutes."
 
-#: front/src/components/federation/LibraryTrackTable.vue:159
+#: front/src/components/federation/LibraryTrackTable.vue:164
 #: front/src/components/library/Library.vue:17
 msgid "Import"
 msgstr "Import"
@@ -861,10 +973,18 @@ msgstr[1] "Importer %{ count } pistes"
 msgid "Import batch"
 msgstr "Lot d'import"
 
+#: front/src/components/library/import/BatchDetail.vue:185
+msgid "Import Batch #%{ id }"
+msgstr "Lot d'imports #%{ id }"
+
 #: front/src/components/library/Library.vue:20
 msgid "Import batches"
 msgstr "Lots d'imports"
 
+#: front/src/components/library/import/BatchList.vue:117
+msgid "Import Batches"
+msgstr "Lots d'imports"
+
 #: front/src/components/manage/library/FilesTable.vue:40
 #: front/src/components/manage/library/RequestsTable.vue:53
 msgid "Import date"
@@ -878,6 +998,10 @@ msgstr "Page de détail de l'import"
 msgid "Import music"
 msgstr "Importer de la musique"
 
+#: front/src/components/library/import/Main.vue:267
+msgid "Import Music"
+msgstr "Importer de la musique"
+
 #: front/src/components/Home.vue:71
 msgid "Import music from various platforms, such as YouTube or SoundCloud"
 msgstr "Importez de la musique de différentes plate-formes, comme YouTube ou Soundcloud"
@@ -889,6 +1013,7 @@ msgstr "Import en attente"
 
 #: front/src/views/admin/library/Base.vue:9
 #: front/src/views/admin/library/RequestsList.vue:3
+#: front/src/views/admin/library/RequestsList.vue:21
 msgid "Import requests"
 msgstr "Requêtes d'import"
 
@@ -919,7 +1044,7 @@ msgstr "Importé"
 msgid "Imported URL"
 msgstr "URL importée"
 
-#: front/src/views/admin/Settings.vue:77
+#: front/src/views/admin/Settings.vue:82
 msgid "Imports"
 msgstr "Imports"
 
@@ -935,18 +1060,40 @@ msgstr "Dans la bibliothèque"
 msgid "Input a MusicBrainz ID manually:"
 msgstr "Saisir manuellement un ID MusicBrainz :"
 
+#: front/src/views/auth/PasswordReset.vue:53
+msgid "Input the email address binded to your account"
+msgstr "Saisissez l'adresse email associée à votre compte"
+
 #: front/src/components/playlists/Editor.vue:31
 msgid "Insert from queue (%{ count } track)"
 msgid_plural "Insert from queue (%{ count } tracks)"
 msgstr[0] "Insérer depuis la queue (%{ count } piste)"
 msgstr[1] "Insérer depuis la queue (%{ count } pistes)"
 
-#: front/src/views/admin/Settings.vue:75
+#: front/src/views/admin/Settings.vue:80
 msgid "Instance information"
 msgstr "Informations relatives à cette instance"
 
+#: front/src/views/admin/Settings.vue:75
+msgid "Instance settings"
+msgstr "Paramètres de l'instance"
+
+#: front/src/views/instance/Timeline.vue:57
+msgid "Instance Timeline"
+msgstr "Fil de l'instance"
+
+#: front/src/components/auth/Signup.vue:42
+#: front/src/components/manage/users/InvitationForm.vue:11
+msgid "Invitation code"
+msgstr "Code d'invitation"
+
+#: front/src/components/auth/Signup.vue:43
+msgid "Invitation code (optional)"
+msgstr "Code d'invitation (optionnel)"
+
 #: front/src/views/admin/users/Base.vue:8
 #: src/views/admin/users/InvitationsList.vue:3
+#: front/src/views/admin/users/InvitationsList.vue:24
 msgid "Invitations"
 msgstr "Invitations"
 
@@ -1000,18 +1147,25 @@ msgstr "Démarrer le scan"
 msgid "Learn more about this instance"
 msgstr "En apprendre plus à propos de cette instance"
 
+#: front/src/components/manage/users/InvitationForm.vue:58
+msgid "Leave empty for a random code"
+msgstr "Laisser vide pour obtenir un code aléatoire"
+
 #: front/src/components/requests/Form.vue:10
 msgid "Leave this field empty if you're requesting the whole discography."
 msgstr "Laisser ce champ vide si vous voulez suggérer toute la discographie."
 
 #: front/src/views/federation/Base.vue:5
+#: src/views/federation/LibraryList.vue:123
 msgid "Libraries"
 msgstr "Bibliothèques"
 
 #: front/src/components/Sidebar.vue:69
 #: front/src/components/federation/LibraryTrackTable.vue:36
-#: front/src/components/manage/users/UsersTable.vue:171
-#: front/src/views/admin/users/UsersDetail.vue:152
+#: front/src/components/instance/Stats.vue:30
+#: front/src/components/manage/users/UsersTable.vue:176
+#: front/src/views/admin/users/UsersDetail.vue:157
+#: front/src/views/federation/LibraryDetail.vue:194
 msgid "Library"
 msgstr "Bibliothèque"
 
@@ -1027,6 +1181,10 @@ msgstr "Nom de la bibliothèque"
 msgid "Library size"
 msgstr "Taille de la bibliothèque"
 
+#: front/src/components/federation/LibraryForm.vue:96
+msgid "library@demo.funkwhale.audio"
+msgstr "library@demo.funkwhale.audio"
+
 #: front/src/App.vue:29
 msgid "Links"
 msgstr "Liens"
@@ -1039,10 +1197,18 @@ msgstr "Chargement de la timeline ..."
 msgid "Loading your favorites..."
 msgstr "Chargement de vos favoris ..."
 
+#: front/src/components/auth/Login.vue:78
+msgid "Log In"
+msgstr "Connexion"
+
 #: front/src/components/auth/Login.vue:4
 msgid "Log in to your Funkwhale account"
 msgstr "Connectez vous à votre compte Funkwhale"
 
+#: front/src/components/auth/Logout.vue:20
+msgid "Log Out"
+msgstr "Déconnexion"
+
 #: front/src/components/Sidebar.vue:38
 msgid "Logged in as %{ username }"
 msgstr "Connecté·e en tant que %{ username }"
@@ -1055,23 +1221,43 @@ msgstr "Connexion"
 msgid "Logout"
 msgstr "Déconnexion"
 
+#: front/src/components/audio/Player.vue:252
+msgid "Looping disabled. Click to switch to single-track looping."
+msgstr "Répétition désactivée. Cliquez pour activer la répétition sur la piste actuelle."
+
+#: front/src/components/audio/Player.vue:253
+msgid "Looping on a single track. Click to switch to whole queue looping."
+msgstr "Répétition sur la piste en cours. Cliquer pour répêter sur l'intégralité de la queue."
+
+#: front/src/components/audio/Player.vue:254
+msgid "Looping on whole queue. Click to disable looping."
+msgstr "Répétition sur l'intégralité, cliquez pour désactiver la répétition."
+
 #: front/src/components/library/Track.vue:94
 msgid "Lyrics"
 msgstr "Paroles"
 
+#: front/src/views/admin/library/Base.vue:25
+msgid "Manage library"
+msgstr "Gérer la bibliothèque"
+
 #: front/src/components/playlists/PlaylistModal.vue:3
 msgid "Manage playlists"
 msgstr "Gérer les playlists"
 
+#: front/src/views/admin/users/Base.vue:20
+msgid "Manage users"
+msgstr "Gérer les utilisateur·rices"
+
 #: front/src/views/playlists/List.vue:8
 msgid "Manage your playlists"
 msgstr "Gérer vos playlists"
 
-#: front/src/components/manage/library/RequestsTable.vue:192
+#: front/src/components/manage/library/RequestsTable.vue:197
 msgid "Mark as closed"
 msgstr "Marquer comme fermé"
 
-#: front/src/components/manage/library/RequestsTable.vue:191
+#: front/src/components/manage/library/RequestsTable.vue:196
 msgid "Mark as imported"
 msgstr "Marquer comme importé"
 
@@ -1105,10 +1291,22 @@ msgstr "Requête musicale"
 msgid "Music requests"
 msgstr "Requête musicale"
 
+#: front/src/components/audio/Player.vue:251
+msgid "Mute"
+msgstr "Couper le son"
+
 #: front/src/components/Sidebar.vue:34
 msgid "My account"
 msgstr "Mon compte"
 
+#: front/src/components/playlists/Form.vue:74
+msgid "My awesome playlist"
+msgstr "Ma playlist d'enfer"
+
+#: front/src/components/library/radios/Builder.vue:206
+msgid "My awesome radio"
+msgstr "Ma radio d'enfer"
+
 #: front/src/components/library/Track.vue:64
 #: src/components/library/Track.vue:75
 #: front/src/components/library/Track.vue:86
@@ -1141,21 +1339,23 @@ msgstr "Les nouvelles pistes seront ajoutées ici automatiquement."
 msgid "Next step"
 msgstr "Prochaine étape"
 
+#: front/src/components/audio/Player.vue:249
+msgid "Next track"
+msgstr "Piste suivante"
+
 #: front/src/components/Sidebar.vue:124
 msgid "No"
 msgstr "Non"
 
 #: front/src/components/Home.vue:103
 msgid "No add-ons, no plugins : you only need a web library"
-msgstr ""
-"Pas d'addons ou d'extension à installer, il vous suffit d'une bibliothèque "
-"sur le web"
+msgstr "Pas d'addons ou d'extension à installer, il vous suffit d'une bibliothèque sur le web"
 
 #: front/src/components/library/Track.vue:102
 msgid "No lyrics available for this track."
 msgstr "Pas de paroles disponibles pour cette piste."
 
-#: front/src/components/playlists/Form.vue:76
+#: front/src/components/playlists/Form.vue:81
 msgid "Nobody except me"
 msgstr "Personne à part moi"
 
@@ -1198,10 +1398,10 @@ msgstr "Ou"
 #: front/src/components/library/Radios.vue:17
 #: front/src/components/manage/library/FilesTable.vue:9
 #: front/src/components/manage/library/RequestsTable.vue:9
+#: front/src/components/manage/users/InvitationsTable.vue:9
 #: front/src/components/manage/users/UsersTable.vue:9
 #: front/src/views/federation/LibraryList.vue:18
 #: src/views/playlists/List.vue:17
-#: front/src/components/manage/users/InvitationsTable.vue:10
 msgid "Ordering"
 msgstr "Ordre"
 
@@ -1220,12 +1420,15 @@ msgstr "Direction"
 msgid "Owner"
 msgstr "Propriétaire"
 
+#: front/src/components/PageNotFound.vue:33
+msgid "Page Not Found"
+msgstr "Page non trouvée"
+
 #: front/src/components/PageNotFound.vue:7
-#, fuzzy
 msgid "Page not found!"
 msgstr "Page non trouvée !"
 
-#: front/src/components/auth/Login.vue:32
+#: front/src/components/auth/Login.vue:32 src/components/auth/Signup.vue:38
 msgid "Password"
 msgstr "Mot de passe"
 
@@ -1237,6 +1440,10 @@ msgstr "Mot de passe mis à jour"
 msgid "Password updated successfully"
 msgstr "Mot de passe modifié avec succès"
 
+#: front/src/components/audio/Player.vue:248
+msgid "Pause track"
+msgstr "Mettre en pause"
+
 #: front/src/components/federation/LibraryFollowTable.vue:46
 #: front/src/components/library/import/BatchDetail.vue:33
 #: front/src/components/library/import/BatchDetail.vue:69
@@ -1252,7 +1459,15 @@ msgstr "En attente"
 msgid "Pending approval"
 msgstr "En attente de validation"
 
-#: front/src/components/requests/Form.vue:26
+#: front/src/components/Sidebar.vue:216
+msgid "Pending follow requests"
+msgstr "Demandes d'abonnement en attente"
+
+#: front/src/components/Sidebar.vue:215 src/views/admin/library/Base.vue:26
+msgid "Pending import requests"
+msgstr "Requêtes en attente"
+
+#: front/src/components/requests/Form.vue:26 src/views/federation/Base.vue:36
 msgid "Pending requests"
 msgstr "Requêtes en attente"
 
@@ -1268,7 +1483,8 @@ msgstr "Jouer"
 
 #: front/src/components/audio/album/Card.vue:50
 #: front/src/components/audio/artist/Card.vue:44
-#: src/components/library/Album.vue:28 front/src/views/playlists/Detail.vue:22
+#: src/components/library/Album.vue:28
+#: front/src/components/playlists/Card.vue:26 src/views/playlists/Detail.vue:22
 msgid "Play all"
 msgstr "Tout lire"
 
@@ -1276,7 +1492,7 @@ msgstr "Tout lire"
 msgid "Play all albums"
 msgstr "Lire tous les albums"
 
-#: front/src/components/audio/PlayButton.vue:47
+#: front/src/components/audio/PlayButton.vue:52
 msgid "Play immediatly"
 msgstr "Jouer immédiatement"
 
@@ -1288,6 +1504,14 @@ msgstr "Lire ensuite"
 msgid "Play now"
 msgstr "Lire maintenant"
 
+#: front/src/components/audio/Player.vue:247
+msgid "Play track"
+msgstr "Jouer"
+
+#: front/src/views/playlists/Detail.vue:89
+msgid "Playlist"
+msgstr "Playlist"
+
 #: front/src/views/playlists/Detail.vue:11
 msgid "Playlist containing %{ count } track, by %{ username }"
 msgid_plural "Playlist containing %{ count } tracks, by %{ username }"
@@ -1315,7 +1539,7 @@ msgid "Playlist visibility"
 msgstr "Visibilité de la playlist"
 
 #: front/src/components/Sidebar.vue:55 src/components/library/Library.vue:13
-#: front/src/views/admin/Settings.vue:78
+#: front/src/views/admin/Settings.vue:83 src/views/playlists/List.vue:103
 msgid "Playlists"
 msgstr "Playlists"
 
@@ -1331,6 +1555,10 @@ msgstr "Merci de vérifier que votre mot de passe est correct"
 msgid "Previous step"
 msgstr "Étape précédente"
 
+#: front/src/components/audio/Player.vue:246
+msgid "Previous track"
+msgstr "Piste précédente"
+
 #: front/src/views/auth/EmailConfirm.vue:26
 #: front/src/views/auth/PasswordResetConfirm.vue:31
 msgid "Proceed to login"
@@ -1348,16 +1576,25 @@ msgstr "Template de recherche"
 msgid "Queue"
 msgstr "Queue"
 
-#: front/src/components/audio/Player.vue:183
+#: front/src/components/audio/Player.vue:189
 msgid "Queue shuffled!"
 msgstr "La queue a été mélangée !"
 
+#: front/src/views/radios/Detail.vue:80
+msgid "Radio"
+msgstr "Radio"
+
+#: front/src/components/library/radios/Builder.vue:205
+msgid "Radio Builder"
+msgstr "Éditeur de radio"
+
 #: front/src/components/library/radios/Builder.vue:11
 msgid "Radio name"
 msgstr "Nom de la radio"
 
 #: front/src/components/library/Home.vue:18
 #: src/components/library/Library.vue:10
+#: front/src/components/library/Radios.vue:125
 msgid "Radios"
 msgstr "Radios"
 
@@ -1384,9 +1621,7 @@ msgstr "Inscrit·e depuis le %{ date }"
 
 #: front/src/components/auth/Signup.vue:9
 msgid "Registration are closed on this instance, you will need an invitation code to signup."
-msgstr ""
-"Les inscriptions sont fermées sur cette instance, vous aurez besoin d'un "
-"code d'invitation pour vous inscrire."
+msgstr "Les inscriptions sont fermées sur cette instance, vous aurez besoin d'un code d'invitation pour vous inscrire."
 
 #: front/src/components/manage/users/UsersTable.vue:71
 msgid "regular user"
@@ -1413,7 +1648,20 @@ msgstr "Demander un nouveau mot de passe pour l'API Subsonic ?"
 msgid "Request a password"
 msgstr "Demander un mot de passe"
 
+#: front/src/components/requests/Form.vue:20
+msgid "Request submitted!"
+msgstr "Requête envoyée"
+
+#: front/src/components/library/import/BatchDetail.vue:49
+msgid "Rerun errored jobs"
+msgstr "Relancer les tâches échouées"
+
+#: front/src/components/library/import/BatchDetail.vue:187
+msgid "Rerun job"
+msgstr "Relancer la tâche"
+
 #: front/src/components/auth/Login.vue:34 src/views/auth/PasswordReset.vue:4
+#: front/src/views/auth/PasswordReset.vue:52
 msgid "Reset your password"
 msgstr "Réinitialiser votre mot de passe"
 
@@ -1456,6 +1704,39 @@ msgstr "Rechercher"
 msgid "Search an entity you want to import:"
 msgstr "Rechercher une ressource que vous voulez importer :"
 
+#: front/src/components/manage/library/RequestsTable.vue:180
+msgid "Search by artist, username, comment..."
+msgstr "Rechercher par artiste, nom d'utilisateur·rice, commentaire..."
+
+#: front/src/components/library/import/BatchDetail.vue:188
+msgid "Search by source..."
+msgstr "Rechercher par source..."
+
+#: front/src/components/library/import/BatchList.vue:116
+msgid "Search by submitter, source..."
+msgstr "Rechercher par utilisateur·rice, source..."
+
+#: front/src/components/federation/LibraryTrackTable.vue:150
+#: front/src/components/manage/library/FilesTable.vue:175
+msgid "Search by title, artist, domain..."
+msgstr "Rechercher par titre, artiste, domaine..."
+
+#: front/src/components/federation/LibraryFollowTable.vue:140
+msgid "Search by username, domain..."
+msgstr "Rechercher par nom d'utilisateur·rice, domaine..."
+
+#: front/src/components/manage/users/InvitationsTable.vue:152
+msgid "Search by username, email, code..."
+msgstr "Rechercher par nom d'utilisateur·rice, email, code..."
+
+#: front/src/components/manage/users/UsersTable.vue:162
+msgid "Search by username, email, name..."
+msgstr "Rechercher par nom d'utilisateur·rice, email, nom..."
+
+#: front/src/components/audio/SearchBar.vue:20
+msgid "Search for artists, albums, tracks..."
+msgstr "Rechercher des artistes, des albums, des pistes"
+
 #: front/src/components/audio/Search.vue:2
 msgid "Search for some music"
 msgstr "Rechercher de la musique"
@@ -1505,8 +1786,8 @@ msgid "Send a follow request"
 msgstr "Envoyer une demande d'abonnement"
 
 #: front/src/components/Sidebar.vue:96
-#: src/components/manage/users/UsersTable.vue:179
-#: front/src/views/admin/users/UsersDetail.vue:160
+#: src/components/manage/users/UsersTable.vue:184
+#: front/src/views/admin/users/UsersDetail.vue:165
 msgid "Settings"
 msgstr "Paramètres"
 
@@ -1538,6 +1819,10 @@ msgid_plural "Show %{ count } more tracks"
 msgstr[0] "Afficher 1 piste de plus"
 msgstr[1] "Afficher %{ count } pistes de plus"
 
+#: front/src/components/forms/PasswordInput.vue:25
+msgid "Show/hide password"
+msgstr "Afficher/masquer le mot de passe"
+
 #: front/src/components/federation/LibraryFollowTable.vue:97
 #: front/src/components/federation/LibraryTrackTable.vue:83
 #: front/src/components/library/import/BatchDetail.vue:128
@@ -1549,6 +1834,14 @@ msgstr[1] "Afficher %{ count } pistes de plus"
 msgid "Showing results %{ start }-%{ end } on %{ total }"
 msgstr "Affichage des résultats %{ start }-%{ end } sur %{ total }"
 
+#: front/src/components/audio/Player.vue:255
+msgid "Shuffle your queue"
+msgstr "Mélanger votre queue"
+
+#: front/src/components/auth/Signup.vue:94
+msgid "Sign Up"
+msgstr "Inscription"
+
 #: front/src/components/manage/users/UsersTable.vue:40
 #: front/src/views/admin/users/UsersDetail.vue:37
 msgid "Sign-up"
@@ -1567,9 +1860,7 @@ msgstr "Ignoré"
 
 #: front/src/components/requests/Form.vue:3
 msgid "Something's missing in the library? Let us know what you would like to listen!"
-msgstr ""
-"Quelque chose manque dans la bibliothèque ? Dîtes nous ce que vous voulez "
-"écouter !"
+msgstr "Quelque chose manque dans la bibliothèque ? Dîtes nous ce que vous voulez écouter !"
 
 #: front/src/components/audio/Search.vue:25
 msgid "Sorry, we did not found any album matching your query"
@@ -1577,8 +1868,7 @@ msgstr "Désolé, nous n'avons trouvé aucun album correspondant à votre recher
 
 #: front/src/components/audio/Search.vue:16
 msgid "Sorry, we did not found any artist matching your query"
-msgstr ""
-"Désolé, nous n'avons trouver aucun·a artiste correspondant à votre recherche"
+msgstr "Désolé, nous n'avons trouver aucun·a artiste correspondant à votre recherche"
 
 #: front/src/components/library/import/BatchDetail.vue:82
 #: front/src/components/library/import/BatchList.vue:38
@@ -1607,7 +1897,7 @@ msgstr "Démarrer"
 msgid "Start Upload"
 msgstr "Démarrer l'envoi"
 
-#: front/src/views/admin/Settings.vue:81
+#: front/src/views/admin/Settings.vue:86
 msgid "Statistics"
 msgstr "Statistiques"
 
@@ -1617,10 +1907,11 @@ msgstr "Statistiques"
 #: front/src/components/library/import/BatchList.vue:11
 #: front/src/components/library/import/BatchList.vue:37
 #: front/src/components/library/import/FileUpload.vue:45
+#: front/src/components/manage/library/RequestsTable.vue:24
 #: front/src/components/manage/library/RequestsTable.vue:48
+#: front/src/components/manage/users/InvitationsTable.vue:17
 #: front/src/components/manage/users/InvitationsTable.vue:39
 #: front/src/components/manage/users/UsersTable.vue:43
-#: front/src/components/manage/users/InvitationsTable.vue:18
 msgid "Status"
 msgstr "Statut"
 
@@ -1649,7 +1940,7 @@ msgstr "Envoyer une nouvelle requête"
 msgid "Submitted by"
 msgstr "Proposé par"
 
-#: front/src/views/admin/Settings.vue:80
+#: front/src/views/admin/Settings.vue:85
 msgid "Subsonic"
 msgstr "Subsonic"
 
@@ -1669,9 +1960,11 @@ msgstr "Synchronisation des changements avec le serveur..."
 
 #: front/src/components/Home.vue:26
 msgid "That's simple: we loved Grooveshark and we want to build something even better."
-msgstr ""
-"C'est simple : nous adorions Grooveshark et nous voulions construire quelque "
-"chose d'encore mieux."
+msgstr "C'est simple : nous adorions Grooveshark et nous voulions construire quelque chose d'encore mieux."
+
+#: front/src/components/requests/Form.vue:73
+msgid "The Beatles, Mickael Jackson…"
+msgstr "Les Beatles, Mickael Jackson..."
 
 #: front/src/App.vue:56
 msgid "The funkwhale logo was kindly designed and provided by Francis Gading."
@@ -1679,30 +1972,43 @@ msgstr "Le logo de Funkwhale a été généreusement dessiné et fourni par Fran
 
 #: front/src/components/Home.vue:124
 msgid "The plaform is free and open-source, you can install it and modify it without worries"
-msgstr ""
-"La plateforme est gratuite et open-source, vous pouvez l'installer et la "
-"modifier sans restrictions"
+msgstr "La plateforme est gratuite et open-source, vous pouvez l'installer et la modifier sans restrictions"
 
 #: front/src/components/auth/SubsonicTokenForm.vue:4
 msgid "The Subsonic API is not available on this Funkwhale instance."
 msgstr "L'API Subsonic n'est pas disponible sur cette instance Funkwhale."
 
+#: front/src/components/requests/Form.vue:74
+msgid "The White Album, Thriller…"
+msgstr "L'Album Blanc, Thriller..."
+
 #: front/src/components/library/import/Main.vue:149
 msgid "This import will be associated with the music request below. After the import is finished, the request will be marked as fulfilled."
 msgstr "Cet import sera associé à la requête ci dessous. Une fois l'import terminé, la requête sera marquée comme complétée."
 
+#: front/src/views/federation/LibraryDetail.vue:195
+msgid "This indicate if the remote library granted you access"
+msgstr "Ceci indique si la bibliothèque distance vous à accordé l'accès"
+
 #: front/src/components/auth/Profile.vue:15
 msgid "This is you!"
 msgstr "C'est vous !"
 
-#: front/src/components/audio/PlayButton.vue:50
+#: front/src/components/common/ActionTable.vue:37
+msgid "This may affect a lot of elements, please double check this is really what you want."
+msgstr "Cette opération peut affecter de nombreux éléments, merci de vérifier que c'est bien ce que vous souhaitez."
+
+#: front/src/components/audio/PlayButton.vue:55
 msgid "This track is not imported and cannot be played"
 msgstr "Cette piste n'est pas importée et ne peut pas être jouée"
 
 #: front/src/views/playlists/Detail.vue:36
 msgid "This will completely delete this playlist and cannot be undone."
-msgstr ""
-"Cela supprimera définitivement cette playlist et ne pourra pas être annulé."
+msgstr "Cela supprimera définitivement cette playlist et ne pourra pas être annulé."
+
+#: front/src/views/radios/Detail.vue:27
+msgid "This will completely delete this radio and cannot be undone."
+msgstr "Cela supprimera définitivement cette radio et ne pourra pas être annulé."
 
 #: front/src/components/auth/SubsonicTokenForm.vue:51
 msgid "This will completely disable access to the Subsonic API using from account."
@@ -1714,9 +2020,7 @@ msgstr "Cela va effacer vos données locales et vous déconnecter, voulez-vous c
 
 #: front/src/components/auth/SubsonicTokenForm.vue:36
 msgid "This will log you out from existing devices that use the current password."
-msgstr ""
-"Cela vous déconnectera sur l'ensemble de vos appareils utilisant ce mot de "
-"passe."
+msgstr "Cela vous déconnectera sur l'ensemble de vos appareils utilisant ce mot de passe."
 
 #: front/src/components/playlists/Editor.vue:44
 msgid "This will remove all tracks from this playlist and cannot be undone."
@@ -1728,8 +2032,10 @@ msgstr "Cela supprimera toutes les pistes de la playlist et ne pourra pas être
 msgid "Title"
 msgstr "Titre"
 
+#: front/src/components/audio/SearchBar.vue:27
+#: src/components/library/Track.vue:174
 #: front/src/components/library/import/BatchDetail.vue:84
-#: front/src/components/metadata/Search.vue:133
+#: front/src/components/metadata/Search.vue:138
 msgid "Track"
 msgstr "Piste"
 
@@ -1747,7 +2053,8 @@ msgstr "pistes"
 
 #: front/src/components/library/Album.vue:43
 #: front/src/components/playlists/PlaylistModal.vue:33
-#: front/src/views/federation/Base.vue:8
+#: front/src/views/federation/Base.vue:8 src/views/playlists/Detail.vue:49
+#: front/src/views/radios/Detail.vue:34
 msgid "Tracks"
 msgstr "Pistes"
 
@@ -1783,6 +2090,10 @@ msgstr "Inconnu"
 msgid "Unlimited music"
 msgstr "Musique illimitée"
 
+#: front/src/components/audio/Player.vue:250
+msgid "Unmute"
+msgstr "Réactiver le son"
+
 #: front/src/components/playlists/Form.vue:33
 msgid "Update playlist"
 msgstr "Mettre à jour la playlist"
@@ -1795,8 +2106,8 @@ msgstr "Mettre à jour les paramètres"
 msgid "Update your password"
 msgstr "Mettre à jour votre mot de passe"
 
-#: front/src/components/manage/users/UsersTable.vue:167
-#: front/src/views/admin/users/UsersDetail.vue:148
+#: front/src/components/manage/users/UsersTable.vue:172
+#: front/src/views/admin/users/UsersDetail.vue:153
 msgid "Upload"
 msgstr "Envoi"
 
@@ -1812,18 +2123,21 @@ msgstr "Envoi en cours..."
 msgid "Use another instance"
 msgstr "Utiliser une autre instance"
 
+#: front/src/components/requests/Form.vue:75
+msgid "Use this comment box to add details to your request if needed"
+msgstr "Utilisez ce champ pour ajouter des détails à votre demande, si nécessaire"
+
+#: front/src/views/federation/LibraryDetail.vue:196
+msgid "Use this flag to enable/disable federation with this library"
+msgstr "Utilisez ce réglage pour activer/désactiver la fédération avec cette bibliothèque"
+
 #: front/src/views/auth/PasswordReset.vue:12
 msgid "Use this form to request a password reset. We will send an email to the given address with instructions to reset your password."
-msgstr ""
-"Utilisez ce formulaire pour demander à réinitialiser votre mot de passe. "
-"Vous recevrez un email à l'adresse indiquée contenant les instructions de "
-"réinitialisation."
+msgstr "Utilisez ce formulaire pour demander à réinitialiser votre mot de passe. Vous recevrez un email à l'adresse indiquée contenant les instructions de réinitialisation."
 
 #: front/src/components/federation/LibraryForm.vue:6
 msgid "Use this form to scan an instance and setup federation."
-msgstr ""
-"Utilisez ce formulaire pour scanner le catalogue d'une instance et mettre en "
-"place la fédération."
+msgstr "Utilisez ce formulaire pour scanner le catalogue d'une instance et mettre en place la fédération."
 
 #: front/src/components/manage/users/InvitationsTable.vue:49
 msgid "Used"
@@ -1837,6 +2151,7 @@ msgstr "Utilisateur·rice"
 msgid "User activity"
 msgstr "Activité des utilisateur·ice·s"
 
+#: front/src/components/auth/Signup.vue:19
 #: front/src/components/manage/users/UsersTable.vue:37
 msgid "Username"
 msgstr "Nom d'utilisateur"
@@ -1849,14 +2164,18 @@ msgstr "Nom d'utilisateur ou email"
 msgid "users"
 msgstr "tilisateur·ice·s"
 
-#: front/src/components/Sidebar.vue:102 src/views/admin/Settings.vue:76
+#: front/src/components/Sidebar.vue:102 src/views/admin/Settings.vue:81
 #: front/src/views/admin/users/Base.vue:5 src/views/admin/users/UsersList.vue:3
+#: front/src/views/admin/users/UsersList.vue:21
 msgid "Users"
 msgstr "Utilisateur·ice·s"
 
 #: front/src/components/library/Album.vue:37
 #: src/components/library/Artist.vue:35
 #: front/src/components/library/Track.vue:44
+#: front/src/components/library/import/ArtistImport.vue:131
+#: front/src/components/metadata/ArtistCard.vue:49
+#: front/src/components/metadata/ReleaseCard.vue:53
 msgid "View on MusicBrainz"
 msgstr "Voir sur MusicBrainz"
 
@@ -1868,6 +2187,10 @@ msgstr "Nous ne pouvons pas ajouter cette piste à une playlist"
 msgid "We cannot create the playlist"
 msgstr "Nous ne pouvons pas créer cette playlist"
 
+#: front/src/components/auth/Signup.vue:13
+msgid "We cannot create your account"
+msgstr "Nous ne pouvons pas créer votre compte"
+
 #: front/src/components/auth/Login.vue:7
 msgid "We cannot log you in"
 msgstr "Erreur lors de la connexion"
@@ -1894,13 +2217,24 @@ msgstr "Désolé, la page demandée n’existe pas :"
 
 #: front/src/components/requests/Form.vue:21
 msgid "We've received your request, you'll get some groove soon ;)"
-msgstr ""
-"Nous avons bien reçu votre requête, vous aurez bientôt de nos nouvelles ;)"
+msgstr "Nous avons bien reçu votre requête, vous aurez bientôt de nos nouvelles ;)"
+
+#: front/src/components/Home.vue:152
+msgid "Welcome"
+msgstr "Bienvenue"
 
 #: front/src/components/Home.vue:5
 msgid "Welcome on Funkwhale"
 msgstr "Bienvenue sur Funkwhale"
 
+#: front/src/components/library/import/Main.vue:114
+msgid "What is metadata?"
+msgstr "Qu'est-ce que les métadonnées ?"
+
+#: front/src/views/federation/LibraryDetail.vue:197
+msgid "When enabled, auto importing will automatically import new tracks published in this library"
+msgstr "Si ce réglage est activé, les nouvelles pistes ajoutées dans cette bibliothèque seront automatiquement importées"
+
 #: front/src/components/Home.vue:24
 msgid "Why funkwhale?"
 msgstr "Pourquoi Funkwhale ?"
@@ -1919,21 +2253,15 @@ msgstr "Vous êtes actuellement connecté·e en tant que %{ username }"
 
 #: front/src/components/library/import/Main.vue:111
 msgid "You can also skip this step and enter metadata manually."
-msgstr ""
-"Vous pouvez également sauter cette étape et entrer les métadonnées "
-"manuellement."
+msgstr "Vous pouvez également sauter cette étape et entrer les métadonnées manuellement."
 
 #: front/src/components/Home.vue:136
 msgid "You can invite friends and family to your instance so they can enjoy your music"
-msgstr ""
-"Vous pouvez inviter vos ami·es et votre famille sur votre instance pour "
-"qu'ils·elles puissent profiter de votre musique"
+msgstr "Vous pouvez inviter vos ami·es et votre famille sur votre instance pour qu'ils·elles puissent profiter de votre musique"
 
 #: front/src/components/library/radios/Builder.vue:7
 msgid "You can use this interface to build your own custom radio, which will play tracks according to your criteria."
-msgstr ""
-"Vous pouvez utiliser cette interface pour réaliser votre propre radio "
-"personnalisée, qui jouera les pistes correspondant aux critères indiqués."
+msgstr "Vous pouvez utiliser cette interface pour réaliser votre propre radio personnalisée, qui jouera les pistes correspondant aux critères indiqués."
 
 #: front/src/components/auth/SubsonicTokenForm.vue:8
 msgid "You can use those to enjoy your playlist and music in offline mode, on your smartphone or tablet, for instance."
@@ -1953,9 +2281,7 @@ msgstr "Vous allez être déconnecté de cette session et vous allez devoir vous
 
 #: front/src/components/auth/Settings.vue:38
 msgid "You will have to update your password on your clients that use this password."
-msgstr ""
-"Vous devrez mettre à jour votre mot de passe sur l'ensemble des clients "
-"utilisant ce mot de passe."
+msgstr "Vous devrez mettre à jour votre mot de passe sur l'ensemble des clients utilisant ce mot de passe."
 
 #: front/src/components/library/import/Main.vue:103
 msgid "You will import:"
@@ -1965,6 +2291,10 @@ msgstr "Vous allez importer :"
 msgid "Your email address was confirmed, you can now use the service without limitations."
 msgstr "Votre adresse email a été confirmée, vous pouvez maintenant utiliser le service sans limitations."
 
+#: front/src/components/favorites/List.vue:109
+msgid "Your Favorites"
+msgstr "Vos favoris"
+
 #: front/src/components/Home.vue:117
 msgid "Your music, your way"
 msgstr "Votre musique, à votre façon"
@@ -1975,28 +2305,13 @@ msgstr "Votre mot de passe a été mis à jour avec succès."
 
 #: front/src/components/auth/Settings.vue:68
 msgid "Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password"
-msgstr ""
-"Votre mot de passe Subsonic sera remplacé par un nouveau mot de passe "
-"aléatoire, ce qui vous déconnectera de tous les appareils utilisant l'ancien "
-"mot de passe"
-
-#: front/src/components/auth/Signup.vue:5
-msgid "Create a funkwhale account"
-msgstr "Créer un compte funkwhale"
-
-#: front/src/components/auth/Signup.vue:43
-msgid "Invitation code"
-msgstr "Code d'invitation"
+msgstr "Votre mot de passe Subsonic sera remplacé par un nouveau mot de passe aléatoire, ce qui vous déconnectera de tous les appareils utilisant l'ancien mot de passe"
 
 #: front/src/components/auth/Login.vue:10
 msgid "Please double-check your username/password couple is correct"
 msgstr "Merci de vérifier que votre nom d'utilisateur et mot de passe sont corrects"
 
-#: front/src/components/auth/Settings.vue:66
-msgid "Changing your password will have the following consequences"
-msgstr "Modifier votre mot de passe aura les conséquences suivantes"
-
-#: front/src/components/audio/PlayButton.vue:145
+#: front/src/components/audio/PlayButton.vue:150
 msgid "%{ count } track was added to your queue"
 msgid_plural "%{ count } tracks were added to your queue"
 msgstr[0] "%{ count } piste a été ajouté à votre queue"
@@ -2009,9 +2324,3 @@ msgstr "Il n'est pas possible pour le moment de télécharger un ensemble de pis
 #: front/src/components/manage/users/UsersTable.vue:55
 msgid "Inactive"
 msgstr "Actif"
-
-#: front/src/components/common/ActionTable.vue:38
-msgid "This may affect a lot of elements, please double check this is really what you want."
-msgstr ""
-"Cette opération peut affecter de nombreux éléments, merci de vérifier que "
-"c'est bien ce que vous souhaitez."
diff --git a/front/src/components/About.vue b/front/src/components/About.vue
index a4597b29a8a10dc6a99015d206762ec8cb0357a3..c9e1e23c84825a8731f90947f4b09b800f6fdf41 100644
--- a/front/src/components/About.vue
+++ b/front/src/components/About.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="'About This Instance'">
+  <div class="main pusher" v-title="labels.title">
     <div class="ui vertical center aligned stripe segment">
       <div class="ui text container">
         <h1 class="ui huge header">
@@ -49,7 +49,12 @@ export default {
   computed: {
     ...mapState({
       instance: state => state.instance.settings.instance
-    })
+    }),
+    labels () {
+      return {
+        title: this.$gettext('About this instance')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/components/Home.vue b/front/src/components/Home.vue
index 2f6196ea5df1b5c81696f3f5f84cfd6e58f5435e..648b1afc76728d53d4d4a66d9b9d5ff2a1590423 100644
--- a/front/src/components/Home.vue
+++ b/front/src/components/Home.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="'Welcome'">
+  <div class="main pusher" v-title="labels.title">
     <div class="ui vertical center aligned stripe segment">
       <div class="ui text container">
         <h1 class="ui huge header">
@@ -146,9 +146,12 @@
 <script>
 
 export default {
-  name: 'home',
-  data () {
-    return {}
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Welcome')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/components/PageNotFound.vue b/front/src/components/PageNotFound.vue
index 46b620c07ad78a254c9a611ceb56afd1afd34114..115bc5d023f1745f1399a868bff86c63c8d12c6a 100644
--- a/front/src/components/PageNotFound.vue
+++ b/front/src/components/PageNotFound.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="'Page Not Found'">
+  <div class="main pusher" :v-title="labels.title">
     <div class="ui vertical stripe segment">
       <div class="ui text container">
         <h1 class="ui huge header">
@@ -26,6 +26,13 @@ export default {
     return {
       path: window.location.href
     }
+  },
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Page Not Found')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue
index 8cdf425496134b5e8a4fd34c395a7e70b7583c45..beced0b44ecef42864dc3627ff3ad26503a6a358 100644
--- a/front/src/components/Sidebar.vue
+++ b/front/src/components/Sidebar.vue
@@ -70,7 +70,7 @@
               <i class="book icon"></i><translate>Library</translate>
               <div
                 :class="['ui', {'teal': $store.state.ui.notifications.importRequests > 0}, 'label']"
-                :title="$gettext('Pending import requests')">
+                :title="labels.pendingRequests">
                 {{ $store.state.ui.notifications.importRequests }}</div>
 
             </router-link>
@@ -87,7 +87,7 @@
               <i class="sitemap icon"></i><translate>Federation</translate>
               <div
                 :class="['ui', {'teal': $store.state.ui.notifications.federation > 0}, 'label']"
-                :title="$gettext('Pending follow requests')">
+                :title="labels.pendingFollows">
                 {{ $store.state.ui.notifications.federation }}</div>
             </router-link>
             <router-link
@@ -211,6 +211,14 @@ export default {
       queue: state => state.queue,
       url: state => state.route.path
     }),
+    labels () {
+      let pendingRequests = this.$gettext('Pending import requests')
+      let pendingFollows = this.$gettext('Pending follow requests')
+      return {
+        pendingRequests,
+        pendingFollows
+      }
+    },
     showAdmin () {
       let adminPermissions = [
         this.$store.state.auth.availablePermissions['federation'],
diff --git a/front/src/components/audio/PlayButton.vue b/front/src/components/audio/PlayButton.vue
index 497229d4408f69d1bd85bb5eccb02f044699b3cf..6c5ebbc2d6181b6bb19c23ecd15cdcccf3ca705e 100644
--- a/front/src/components/audio/PlayButton.vue
+++ b/front/src/components/audio/PlayButton.vue
@@ -1,7 +1,7 @@
 <template>
   <div :title="title" :class="['ui', {'tiny': discrete}, 'buttons']">
     <button
-      :title="$gettext('Add to current queue')"
+      :title="labels.addToQueue"
       @click="addNext(true)"
       :disabled="!playable"
       :class="['ui', {loading: isLoading}, {'mini': discrete}, {disabled: !playable}, 'button']">
@@ -42,6 +42,11 @@ export default {
     jQuery(this.$el).find('.ui.dropdown').dropdown()
   },
   computed: {
+    labels () {
+      return {
+        addToQueue: this.$gettext('Add to current queue')
+      }
+    },
     title () {
       if (this.playable) {
         return this.$gettext('Play immediatly')
diff --git a/front/src/components/audio/Player.vue b/front/src/components/audio/Player.vue
index 37457df7d7628d9a3a365a07c35b53e8eea86905..ef9356c98042fc3f83357a0274d5d9de20baa072 100644
--- a/front/src/components/audio/Player.vue
+++ b/front/src/components/audio/Player.vue
@@ -57,44 +57,50 @@
 
       <div class="two wide column controls ui grid">
         <div
-          :title="$gettext('Previous track')"
+          :title="labels.previousTrack"
           class="two wide column control"
           :disabled="emptyQueue">
             <i @click="previous" :class="['ui', 'backward', {'disabled': emptyQueue}, 'big', 'icon']"></i>
         </div>
         <div
           v-if="!playing"
-          :title="$gettext('Play track')"
+          :title="labels.play"
           class="two wide column control">
             <i @click="togglePlay" :class="['ui', 'play', {'disabled': !currentTrack}, 'big', 'icon']"></i>
         </div>
         <div
           v-else
-          :title="$gettext('Pause track')"
+          :title="labels.pause"
           class="two wide column control">
             <i @click="togglePlay" :class="['ui', 'pause', {'disabled': !currentTrack}, 'big', 'icon']"></i>
         </div>
         <div
-          :title="$gettext('Next track')"
+          :title="labels.next"
           class="two wide column control"
           :disabled="!hasNext">
             <i @click="next" :class="['ui', {'disabled': !hasNext}, 'step', 'forward', 'big', 'icon']" ></i>
         </div>
         <div class="two wide column control volume-control">
-          <i :title="$gettext('Unmute')" @click="$store.commit('player/volume', 1)" v-if="volume === 0" class="volume off secondary icon"></i>
-          <i :title="$gettext('Mute')" @click="$store.commit('player/volume', 0)" v-else-if="volume < 0.5" class="volume down secondary icon"></i>
-          <i :title="$gettext('Mute')" @click="$store.commit('player/volume', 0)" v-else class="volume up secondary icon"></i>
+          <i
+            :title="labels.unmute"
+            @click="$store.commit('player/volume', 1)" v-if="volume === 0" class="volume off secondary icon"></i>
+          <i
+            :title="labels.mute"
+            @click="$store.commit('player/volume', 0)" v-else-if="volume < 0.5" class="volume down secondary icon"></i>
+          <i
+            :title="labels.mute"
+            @click="$store.commit('player/volume', 0)" v-else class="volume up secondary icon"></i>
           <input type="range" step="0.05" min="0" max="1" v-model="sliderVolume" />
         </div>
         <div class="two wide column control looping">
           <i
-            :title="$gettext('Looping disabled. Click to switch to single-track looping.')"
+            :title="labels.loopingDisabled"
             v-if="looping === 0"
             @click="$store.commit('player/looping', 1)"
             :disabled="!currentTrack"
             :class="['ui', {'disabled': !currentTrack}, 'step', 'repeat', 'secondary', 'icon']"></i>
           <i
-            :title="$gettext('Looping on a single track. Click to switch to whole queue looping.')"
+            :title="labels.loopingSingle"
             v-if="looping === 1"
             @click="$store.commit('player/looping', 2)"
             :disabled="!currentTrack"
@@ -102,7 +108,7 @@
             <span class="ui circular tiny orange label">1</span>
           </i>
           <i
-            :title="$gettext('Looping on whole queue. Click to disable looping.')"
+            :title="labels.loopingWhole"
             v-if="looping === 2"
             @click="$store.commit('player/looping', 0)"
             :disabled="!currentTrack"
@@ -111,7 +117,7 @@
         </div>
         <div
           :disabled="queue.tracks.length === 0"
-          :title="$gettext('Shuffle your queue')"
+          :title="labels.shuffle"
           class="two wide column control">
           <div v-if="isShuffling" class="ui inline shuffling inverted small active loader"></div>
           <i v-else @click="shuffle()" :class="['ui', 'random', 'secondary', {'disabled': queue.tracks.length === 0}, 'icon']" ></i>
@@ -119,7 +125,7 @@
         <div class="one wide column"></div>
         <div
           :disabled="queue.tracks.length === 0"
-          :title="$gettext('Clear your queue')"
+          :title="labels.clear"
           class="two wide column control">
           <i @click="clean()" :class="['ui', 'trash', 'secondary', {'disabled': queue.tracks.length === 0}, 'icon']" ></i>
         </div>
@@ -236,6 +242,32 @@ export default {
       currentTimeFormatted: 'player/currentTimeFormatted',
       progress: 'player/progress'
     }),
+    labels () {
+      let previousTrack = this.$gettext('Previous track')
+      let play = this.$gettext('Play track')
+      let pause = this.$gettext('Pause track')
+      let next = this.$gettext('Next track')
+      let unmute = this.$gettext('Unmute')
+      let mute = this.$gettext('Mute')
+      let loopingDisabled = this.$gettext('Looping disabled. Click to switch to single-track looping.')
+      let loopingSingle = this.$gettext('Looping on a single track. Click to switch to whole queue looping.')
+      let loopingWhole = this.$gettext('Looping on whole queue. Click to disable looping.')
+      let shuffle = this.$gettext('Shuffle your queue')
+      let clear = this.$gettext('Clear your queue')
+      return {
+        previousTrack,
+        play,
+        pause,
+        next,
+        unmute,
+        mute,
+        loopingDisabled,
+        loopingSingle,
+        loopingWhole,
+        shuffle,
+        clear
+      }
+    },
     style: function () {
       let style = {
         'background': this.ambiantGradiant
diff --git a/front/src/components/audio/Search.vue b/front/src/components/audio/Search.vue
index d04777ec40edabfbf40b78e8105555bd67e8cf62..06ae2c1cc7636020b3cd6710b2c3c8c81e56b9c4 100644
--- a/front/src/components/audio/Search.vue
+++ b/front/src/components/audio/Search.vue
@@ -4,7 +4,7 @@
     <div :class="['ui', {'loading': isLoading }, 'search']">
       <div class="ui icon big input">
         <i class="search icon"></i>
-        <input ref="search" class="prompt" placeholder="Artist, album, track..." v-model.trim="query" type="text" />
+        <input ref="search" class="prompt" :placeholder="labels.searchPlaceholder" v-model.trim="query" type="text" />
       </div>
     </div>
     <template v-if="query.length > 0">
@@ -59,6 +59,13 @@ export default {
     }
     this.search()
   },
+  computed: {
+    labels () {
+      return {
+        searchPlaceholder: this.$gettext('Artist, album, track...')
+      }
+    }
+  },
   methods: {
     search: _.debounce(function () {
       if (this.query.length < 1) {
diff --git a/front/src/components/audio/SearchBar.vue b/front/src/components/audio/SearchBar.vue
index d5cb39e3232fd83c1c807d457fecf78249e7951d..024a36906875791233438dc6a19e826798907f1f 100644
--- a/front/src/components/audio/SearchBar.vue
+++ b/front/src/components/audio/SearchBar.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="ui fluid category search">
     <slot></slot><div class="ui icon input">
-      <input class="prompt" placeholder="Search for artists, albums, tracks..." type="text">
+      <input class="prompt" :placeholder="labels.placeholder" type="text">
       <i class="search icon"></i>
     </div>
     <div class="results"></div>
@@ -14,7 +14,17 @@ import jQuery from 'jquery'
 import router from '@/router'
 
 export default {
+  computed: {
+    labels () {
+      return {
+        placeholder: this.$gettext('Search for artists, albums, tracks...')
+      }
+    }
+  },
   mounted () {
+    let artistLabel = this.$gettext('Artist')
+    let albumLabel = this.$gettext('Album')
+    let trackLabel = this.$gettext('Track')
     let self = this
     jQuery(this.$el).search({
       type: 'category',
@@ -39,7 +49,7 @@ export default {
             {
               code: 'artists',
               route: 'library.artists.detail',
-              name: 'Artist',
+              name: artistLabel,
               getTitle (r) {
                 return r.name
               },
@@ -50,7 +60,7 @@ export default {
             {
               code: 'albums',
               route: 'library.albums.detail',
-              name: 'Album',
+              name: albumLabel,
               getTitle (r) {
                 return r.title
               },
@@ -61,7 +71,7 @@ export default {
             {
               code: 'tracks',
               route: 'library.tracks.detail',
-              name: 'Track',
+              name: trackLabel,
               getTitle (r) {
                 return r.title
               },
diff --git a/front/src/components/auth/Login.vue b/front/src/components/auth/Login.vue
index b89734b04fc9777678ea4f9366fb490b3ec52ad9..2fdaaba41d4b1977cebc425d1000fa8d9b31cacf 100644
--- a/front/src/components/auth/Login.vue
+++ b/front/src/components/auth/Login.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="'Log In'">
+  <div class="main pusher" v-title="labels.title">
     <div class="ui vertical stripe segment">
       <div class="ui small text container">
         <h2><translate>Log in to your Funkwhale account</translate></h2>
@@ -24,7 +24,7 @@
             required
             type="text"
             autofocus
-            placeholder="Enter your username or email"
+            :placeholder="labels.usernamePlaceholder"
             v-model="credentials.username"
             >
           </div>
@@ -72,6 +72,16 @@ export default {
   mounted () {
     this.$refs.username.focus()
   },
+  computed: {
+    labels () {
+      let usernamePlaceholder = this.$gettext('Enter your username or email')
+      let title = this.$gettext('Log In')
+      return {
+        usernamePlaceholder,
+        title
+      }
+    }
+  },
   methods: {
     submit () {
       var self = this
diff --git a/front/src/components/auth/Logout.vue b/front/src/components/auth/Logout.vue
index 32e21373d119b132f01296cb563fbd410a3747b4..5f60a9dbeb8aaee8554dbb5f9d08402a4ba322da 100644
--- a/front/src/components/auth/Logout.vue
+++ b/front/src/components/auth/Logout.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="'Log Out'">
+  <div class="main pusher" v-title="labels.title">
     <div class="ui vertical stripe segment">
       <div class="ui small text container">
         <h2>
@@ -14,7 +14,13 @@
 
 <script>
 export default {
-  name: 'logout'
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Log Out')
+      }
+    }
+  }
 }
 </script>
 
diff --git a/front/src/components/auth/Profile.vue b/front/src/components/auth/Profile.vue
index 0ead7d7434e541196b43d911e38ff252cba1f7d9..1d15b206facddfe42ef8510f8fbf49725bae74d4 100644
--- a/front/src/components/auth/Profile.vue
+++ b/front/src/components/auth/Profile.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="username + '\'s Profile'">
+  <div class="main pusher" v-title="labels.usernameProfile">
     <div v-if="isLoading" class="ui vertical segment">
       <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
     </div>
@@ -39,6 +39,13 @@ export default {
     this.$store.dispatch('auth/fetchProfile')
   },
   computed: {
+    labels () {
+      let msg = this.$gettext('%{ username }\'s profile')
+      let usernameProfile = this.$gettextInterpolate(msg, {username: this.username})
+      return {
+        usernameProfile
+      }
+    },
     signupDate () {
       let d = new Date(this.$store.state.auth.profile.date_joined)
       return dateFormat(d, 'longDate')
diff --git a/front/src/components/auth/Settings.vue b/front/src/components/auth/Settings.vue
index 7ff825ef7f8d1084869f8e4865a3d818e20046c5..5a74b8888796477cbf75f85299e2da9259e6ed19 100644
--- a/front/src/components/auth/Settings.vue
+++ b/front/src/components/auth/Settings.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="'Account Settings'">
+  <div class="main pusher" v-title="labels.title">
     <div class="ui vertical stripe segment">
       <div class="ui small text container">
         <h2 class="ui header">
@@ -63,7 +63,7 @@
             <translate>Change password</translate>
             <p slot="modal-header"><translate>Change your password?</translate></p>
             <div slot="modal-content">
-              <p>{{ $gettext("Changing your password will have the following consequences") }}</p>
+              <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>Your Subsonic password will be changed to a new, random one, logging you out from devices that used the old Subsonic password</translate></li>
@@ -175,6 +175,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        title: this.$gettext('Account Settings')
+      }
+    },
     orderedSettingsFields () {
       let self = this
       return this.settings.order.map(id => {
diff --git a/front/src/components/auth/Signup.vue b/front/src/components/auth/Signup.vue
index 2a5cb8fb9cf1ffcd1161124edb5375f9bebf4f2f..ae3c47e5cb2a089630b04c2fd0df505ab69916b1 100644
--- a/front/src/components/auth/Signup.vue
+++ b/front/src/components/auth/Signup.vue
@@ -1,8 +1,8 @@
 <template>
-  <div class="main pusher" v-title="'Sign Up'">
+  <div class="main pusher" v-title="labels.title">
     <div class="ui vertical stripe segment">
       <div class="ui small text container">
-        <h2>{{ $gettext("Create a funkwhale account") }}</h2>
+        <h2><translate>Create a funkwhale account</translate></h2>
         <form
           :class="['ui', {'loading': isLoadingInstanceSetting}, 'form']"
           @submit.prevent="submit()">
@@ -11,45 +11,45 @@
           </p>
 
           <div v-if="errors.length > 0" class="ui negative message">
-            <div class="header">{{ $gettext("We cannot create your account") }}</div>
+            <div class="header"><translate>We cannot create your account</translate></div>
             <ul class="list">
               <li v-for="error in errors">{{ error }}</li>
             </ul>
           </div>
           <div class="field">
-            <label>{{ $gettext("Username") }}</label>
+            <label><translate>Username</translate></label>
             <input
             ref="username"
             required
             type="text"
             autofocus
-            placeholder="Enter your username"
+            :placeholder="labels.usernamePlaceholder"
             v-model="username">
           </div>
           <div class="field">
-            <label>{{ $gettext("Email") }}</label>
+            <label><translate>Email</translate></label>
             <input
             ref="email"
             required
             type="email"
-            placeholder="Enter your email"
+            :placeholder="labels.emailPlaceholder"
             v-model="email">
           </div>
           <div class="field">
-            <label>{{ $gettext("Password") }}</label>
+            <label><translate>Password</translate></label>
             <password-input v-model="password" />
           </div>
           <div class="field">
-            <label v-if="!$store.state.instance.settings.users.registration_enabled.value">{{ $gettext("Invitation code") }}</label>
-            <label v-else>{{ $gettext("Invitation code (optional)") }}</label>
+            <label v-if="!$store.state.instance.settings.users.registration_enabled.value"><translate>Invitation code</translate></label>
+            <label v-else><translate>Invitation code (optional)</translate></label>
             <input
             :required="!$store.state.instance.settings.users.registration_enabled.value"
             type="text"
-            :placeholder="$gettext('Enter your invitation code (case insensitive)')"
+            :placeholder="labels.placeholder"
             v-model="invitation">
           </div>
           <button :class="['ui', 'green', {'loading': isLoading}, 'button']" type="submit">
-            {{ $gettext("Create my account") }}
+            <translate>Create my account</translate>
           </button>
         </form>
       </div>
@@ -89,6 +89,20 @@ export default {
       }
     })
   },
+  computed: {
+    labels () {
+      let title = this.$gettext('Sign Up')
+      let placeholder = this.$gettext('Enter your invitation code (case insensitive)')
+      let usernamePlaceholder = this.$gettext('Enter your username')
+      let emailPlaceholder = this.$gettext('Enter your email')
+      return {
+        title,
+        usernamePlaceholder,
+        emailPlaceholder,
+        placeholder
+      }
+    }
+  },
   methods: {
     submit () {
       var self = this
diff --git a/front/src/components/common/ActionTable.vue b/front/src/components/common/ActionTable.vue
index 5c06766ab2272f0165abaddd511be4b574bf0d5d..d74b0dfb749274c7a3dcccd43a7480fca89bed84 100644
--- a/front/src/components/common/ActionTable.vue
+++ b/front/src/components/common/ActionTable.vue
@@ -35,7 +35,7 @@
                     </translate>
                   </p>
                   <p slot="modal-content">
-                    {{ $gettext('This may affect a lot of elements, please double check this is really what you want.')}}
+                    <translate>This may affect a lot of elements, please double check this is really what you want.</translate>
                   </p>
                   <p slot="modal-confirm"><translate>Launch</translate></p>
                 </dangerous-button>
diff --git a/front/src/components/favorites/List.vue b/front/src/components/favorites/List.vue
index a231453f20915660c3ce5f283e368306f6e87cf7..2755dd1903c2f1565bda719d0f2ff6dd809481dd 100644
--- a/front/src/components/favorites/List.vue
+++ b/front/src/components/favorites/List.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="'Your Favorites'">
+  <div class="main pusher" v-title="labels.title">
     <div class="ui vertical center aligned stripe segment">
       <div :class="['ui', {'active': isLoading}, 'inverted', 'dimmer']">
         <div class="ui text loader">
@@ -103,6 +103,13 @@ export default {
   mounted () {
     $('.ui.dropdown').dropdown()
   },
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Your Favorites')
+      }
+    }
+  },
   methods: {
     updateQueryString: function () {
       this.$router.replace({
diff --git a/front/src/components/federation/LibraryFollowTable.vue b/front/src/components/federation/LibraryFollowTable.vue
index 43085f6130458be138e4d63f9a815b569103d46c..6f2a4e4f9b80f4e346fe082d6f200c080f456f97 100644
--- a/front/src/components/federation/LibraryFollowTable.vue
+++ b/front/src/components/federation/LibraryFollowTable.vue
@@ -3,7 +3,7 @@
     <div class="ui form">
       <div class="fields">
         <div class="ui six wide field">
-          <input type="text" v-model="search" placeholder="Search by username, domain..." />
+          <input type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
         </div>
         <div class="ui four wide inline field">
           <div class="ui checkbox">
@@ -134,6 +134,13 @@ export default {
   created () {
     this.fetchData()
   },
+  computed: {
+    labels () {
+      return {
+        searchPlaceholder: this.$gettext('Search by username, domain...')
+      }
+    }
+  },
   methods: {
     fetchData () {
       let params = _.merge({
diff --git a/front/src/components/federation/LibraryForm.vue b/front/src/components/federation/LibraryForm.vue
index 37d19e2f87ba69da4388047b8fac2a043f070ed6..7039cb524b04330bcf5f913516d24726bb58c6c7 100644
--- a/front/src/components/federation/LibraryForm.vue
+++ b/front/src/components/federation/LibraryForm.vue
@@ -20,7 +20,7 @@
         <label>
           <translate>Library name</translate>
         </label>
-        <input v-model="libraryUsername" type="text" placeholder="library@demo.funkwhale.audio" />
+        <input v-model="libraryUsername" type="text" :placeholder="labels.namePlaceholder" />
       </div>
       <div class="ui field">
         <label>&nbsp;</label>
@@ -91,6 +91,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        namePlaceholder: this.$gettext('library@demo.funkwhale.audio')
+      }
+    },
     scanErrors () {
       let errors = []
       if (!this.result) {
diff --git a/front/src/components/federation/LibraryTrackTable.vue b/front/src/components/federation/LibraryTrackTable.vue
index 48d84942fb5b5d608e2773261dad604024cc77ad..645663964e86be71b4d7ad9c8e4d0149d056c291 100644
--- a/front/src/components/federation/LibraryTrackTable.vue
+++ b/front/src/components/federation/LibraryTrackTable.vue
@@ -4,7 +4,7 @@
       <div class="fields">
         <div class="ui field">
           <label><translate>Search</translate></label>
-          <input type="text" v-model="search" placeholder="Search by title, artist, domain..." />
+          <input type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
         </div>
         <div class="ui field">
           <label><translate>Import status</translate></label>
@@ -145,6 +145,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        searchPlaceholder: this.$gettext('Search by title, artist, domain...')
+      }
+    },
     actionFilters () {
       var currentFilters = {
         q: this.search
diff --git a/front/src/components/forms/PasswordInput.vue b/front/src/components/forms/PasswordInput.vue
index 363f1f82f496558e9bdf73cc3c08b95006202e26..377b2d3e4b111b38ea242e9e729dc29eb326499b 100644
--- a/front/src/components/forms/PasswordInput.vue
+++ b/front/src/components/forms/PasswordInput.vue
@@ -6,7 +6,7 @@
     :type="passwordInputType"
     @input="$emit('input', $event.target.value)"
     :value="value">
-    <span @click="showPassword = !showPassword" :title="$gettext('Show/hide password')" class="ui icon button">
+    <span @click="showPassword = !showPassword" :title="labels.title" class="ui icon button">
       <i class="eye icon"></i>
     </span>
   </div>
@@ -20,6 +20,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        title: this.$gettext('Show/hide password')
+      }
+    },
     passwordInputType () {
       if (this.showPassword) {
         return 'text'
diff --git a/front/src/components/instance/Stats.vue b/front/src/components/instance/Stats.vue
index 4f145ba98ec1174986891a705f0775ed83928445..bb23b617c29cc43d3ef8484866d264c23068d026 100644
--- a/front/src/components/instance/Stats.vue
+++ b/front/src/components/instance/Stats.vue
@@ -28,7 +28,7 @@
         </div>
       </div>
       <div class="column">
-        <h3 class="ui left aligned header">Library</h3>
+        <h3 class="ui left aligned header"><translate>Library</translate></h3>
         <div class="ui mini horizontal statistics">
           <div class="statistic">
             <div class="value">
diff --git a/front/src/components/library/Album.vue b/front/src/components/library/Album.vue
index b4cae319cec841c9749e9d82b5d579633abebe18..ced69edebd2f3abf69d79b8d5489db30fc33313c 100644
--- a/front/src/components/library/Album.vue
+++ b/front/src/components/library/Album.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-if="isLoading" class="ui vertical segment" v-title="'Album'">
+    <div v-if="isLoading" class="ui vertical segment" v-title="">
       <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
     </div>
     <template v-if="album">
@@ -86,6 +86,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        title: this.$gettext('Album')
+      }
+    },
     wikipediaUrl () {
       return 'https://en.wikipedia.org/w/index.php?search=' + this.album.title + ' ' + this.album.artist.name
     },
diff --git a/front/src/components/library/Artist.vue b/front/src/components/library/Artist.vue
index ce1470098a7c096cbc8ffd660965351ff5af1905..89eb7459c0f85fd95aeb32ea8c1ecbfa1e77c286 100644
--- a/front/src/components/library/Artist.vue
+++ b/front/src/components/library/Artist.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-if="isLoading" class="ui vertical segment" v-title="'Artist'">
+    <div v-if="isLoading" class="ui vertical segment" v-title="labels.title">
       <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
     </div>
     <template v-if="artist">
@@ -103,6 +103,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        title: this.$gettext('Artist')
+      }
+    },
     totalTracks () {
       return this.albums.map((album) => {
         return album.tracks.length
diff --git a/front/src/components/library/Artists.vue b/front/src/components/library/Artists.vue
index 9d02971c3ee5f8f71201ecdf590db045d44dc652..b1374633dd4bd37d2dd459d607e2bf8e95d605f5 100644
--- a/front/src/components/library/Artists.vue
+++ b/front/src/components/library/Artists.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Artists'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <h2 class="ui header">
         <translate>Browsing artists</translate>
@@ -10,7 +10,7 @@
             <label>
               <translate>Search</translate>
             </label>
-            <input type="text" v-model="query" placeholder="Enter an artist name..."/>
+            <input type="text" v-model="query" :placeholder="labels.searchPlaceholder"/>
           </div>
           <div class="field">
             <label><translate>Ordering</translate></label>
@@ -23,8 +23,8 @@
           <div class="field">
             <label><translate>Ordering direction</translate></label>
             <select class="ui dropdown" v-model="orderingDirection">
-              <option value="+">Ascending</option>
-              <option value="-">Descending</option>
+              <option value="+"><translate>Ascending</translate></option>
+              <option value="-"><translate>Descending</translate></option>
             </select>
           </div>
           <div class="field">
@@ -113,6 +113,16 @@ export default {
   mounted () {
     $('.ui.dropdown').dropdown()
   },
+  computed: {
+    labels () {
+      let searchPlaceholder = this.$gettext('Enter an artist name...')
+      let title = this.$gettext('Artists')
+      return {
+        searchPlaceholder,
+        title
+      }
+    }
+  },
   methods: {
     updateQueryString: _.debounce(function () {
       this.$router.replace({
diff --git a/front/src/components/library/Home.vue b/front/src/components/library/Home.vue
index f38c0d645af00335f82d81cdda7c54b7dc2b1cc6..5610198a466478412be47e5d42bed4ebbf418f9d 100644
--- a/front/src/components/library/Home.vue
+++ b/front/src/components/library/Home.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Home'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <search :autofocus="true"></search>
     </div>
@@ -60,6 +60,13 @@ export default {
   created () {
     this.fetchArtists()
   },
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Home')
+      }
+    }
+  },
   methods: {
     fetchArtists () {
       var self = this
diff --git a/front/src/components/library/Radios.vue b/front/src/components/library/Radios.vue
index 1438e2f48082c1ad4baf7286a8fdf3836eb1a3dc..49489a31fa8c325417478526020eb2b2304344c4 100644
--- a/front/src/components/library/Radios.vue
+++ b/front/src/components/library/Radios.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Radios'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <h2 class="ui header">
         <translate>Browsing radios</translate>
@@ -12,7 +12,7 @@
         <div class="fields">
           <div class="field">
             <label><translate>Search</translate></label>
-            <input type="text" v-model="query" placeholder="Enter a radio name..."/>
+            <input type="text" v-model="query" :placeholder="labels.searchPlaceholder"/>
           </div>
           <div class="field">
             <label><translate>Ordering</translate></label>
@@ -119,6 +119,16 @@ export default {
   mounted () {
     $('.ui.dropdown').dropdown()
   },
+  computed: {
+    labels () {
+      let searchPlaceholder = this.$gettext('Enter a radio name...')
+      let title = this.$gettext('Radios')
+      return {
+        searchPlaceholder,
+        title
+      }
+    }
+  },
   methods: {
     updateQueryString: _.debounce(function () {
       this.$router.replace({
diff --git a/front/src/components/library/Track.vue b/front/src/components/library/Track.vue
index d4ed13ad8aabdf771241f43b8a967aa840e23790..01824292fc24d0fcfbf61e96c38ee28f7c286336 100644
--- a/front/src/components/library/Track.vue
+++ b/front/src/components/library/Track.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-if="isLoadingTrack" class="ui vertical segment" v-title="'Track'">
+    <div v-if="isLoadingTrack" class="ui vertical segment" v-title="labels.title">
       <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
     </div>
     <template v-if="track">
@@ -169,6 +169,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        title: this.$gettext('Track')
+      }
+    },
     wikipediaUrl () {
       return 'https://en.wikipedia.org/w/index.php?search=' + this.track.title + ' ' + this.track.artist.name
     },
diff --git a/front/src/components/library/import/ArtistImport.vue b/front/src/components/library/import/ArtistImport.vue
index 2f37edc62f4018c177e718d55843eff7f33b0d2d..f86f71cce1000fb2c998bdbca1969add1426f7f2 100644
--- a/front/src/components/library/import/ArtistImport.vue
+++ b/front/src/components/library/import/ArtistImport.vue
@@ -1,7 +1,7 @@
 <template>
   <div>
     <h3 class="ui dividing block header">
-      <a :href="getMusicbrainzUrl('artist', metadata.id)" target="_blank" title="View on MusicBrainz">{{ metadata.name }}</a>
+      <a :href="getMusicbrainzUrl('artist', metadata.id)" target="_blank" :title="labels.viewOnMusicbrainz">{{ metadata.name }}</a>
     </h3>
     <form class="ui form" @submit.prevent="">
       <h6 class="ui header">
@@ -126,6 +126,11 @@ export default Vue.extend({
     }
   },
   computed: {
+    labels () {
+      return {
+        viewOnMusicbrainz: this.$gettext('View on MusicBrainz')
+      }
+    },
     type () {
       return 'artist'
     },
diff --git a/front/src/components/library/import/BatchDetail.vue b/front/src/components/library/import/BatchDetail.vue
index b0d64a3d3287f5ae57527f4e2aa17236d6bce0fb..e46bf2a318067819d3410c8cd3ac107312aec240 100644
--- a/front/src/components/library/import/BatchDetail.vue
+++ b/front/src/components/library/import/BatchDetail.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Import Batch #' + id">
+  <div v-title="labels.title">
     <div v-if="isLoading && !batch" class="ui vertical segment">
       <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
     </div>
@@ -47,7 +47,7 @@
                 v-if="stats.errored > 0"
                 class="ui tiny basic icon button">
                 <i class="redo icon" />
-                {{ $gettext('Rerun errored jobs')}}
+                <translate>Rerun errored jobs</translate>
               </button>
             </td>
           </tr>
@@ -61,7 +61,7 @@
         <div class="fields">
           <div class="ui field">
             <label><translate>Search</translate></label>
-            <input type="text" v-model="jobFilters.search" placeholder="Search by source..." />
+            <input type="text" v-model="jobFilters.search" :placeholder="labels.searchPlaceholder" />
           </div>
           <div class="ui field">
             <label><translate>Status</translate></label>
@@ -103,7 +103,7 @@
                 <button
                   @click="rerun({batches: [], jobs: [job.id]})"
                   v-if="job.status === 'errored'"
-                  :title="$gettext('Rerun job')"
+                  :title="labels.rerun"
                   class="ui tiny basic icon button">
                   <i class="redo icon" />
                 </button>
@@ -180,6 +180,19 @@ export default {
       clearTimeout(this.timeout)
     }
   },
+  computed: {
+    labels () {
+      let msg = this.$gettext('Import Batch #%{ id }')
+      let title = this.$gettextInterpolate(msg, {id: this.id})
+      let rerun = this.$gettext('Rerun job')
+      let searchPlaceholder = this.$gettext('Search by source...')
+      return {
+        title,
+        searchPlaceholder,
+        rerun
+      }
+    }
+  },
   methods: {
     fetchData () {
       var self = this
diff --git a/front/src/components/library/import/BatchList.vue b/front/src/components/library/import/BatchList.vue
index a7a7de91e1d6806ffaffe211028a3f8dbd6b98d3..ff26d0f7f5eaae63e9f361efb2e731c6c812d488 100644
--- a/front/src/components/library/import/BatchList.vue
+++ b/front/src/components/library/import/BatchList.vue
@@ -1,12 +1,12 @@
 <template>
-  <div v-title="'Import Batches'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <div v-if="isLoading" :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
       <div class="ui inline form">
         <div class="fields">
           <div class="ui field">
             <label><translate>Search</translate></label>
-            <input type="text" v-model="filters.search" placeholder="Search by submitter, source..." />
+            <input type="text" v-model="filters.search" :placeholder="labels.searchPlaceholder" />
           </div>
           <div class="ui field">
             <label><translate>Status</translate></label>
@@ -111,6 +111,16 @@ export default {
   created () {
     this.fetchData()
   },
+  computed: {
+    labels () {
+      let searchPlaceholder = this.$gettext('Search by submitter, source...')
+      let title = this.$gettext('Import Batches')
+      return {
+        searchPlaceholder,
+        title
+      }
+    }
+  },
   methods: {
     fetchData () {
       let params = {
diff --git a/front/src/components/library/import/Main.vue b/front/src/components/library/import/Main.vue
index b24bb8eb3769b822bee5a555cdcd8f1e7d29b431..e7d9d7d3de3e235603026af32cfb913b54cc4f2f 100644
--- a/front/src/components/library/import/Main.vue
+++ b/front/src/components/library/import/Main.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Import Music'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <div class="ui top three attached ordered steps">
         <a @click="currentStep = 0" :class="['step', {'active': currentStep === 0}, {'completed': currentStep > 0}]">
@@ -112,7 +112,7 @@
             <p><translate>You can also skip this step and enter metadata manually.</translate></p>
           </div>
           <div class="column">
-            <h5 class="ui header">What is metadata?</h5>
+            <h5 class="ui header"><translate>What is metadata?</translate></h5>
             <template v-translate>
               Metadata is the data related to the music you want to import. This includes all the information about the artists, albums and tracks. In order to have a high quality library, it is recommended to grab data from the
               <a href="https://musicbrainz.org" target="_blank">
@@ -262,6 +262,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        title: this.$gettext('Import Music')
+      }
+    },
     metadataComponent () {
       if (this.currentType === 'artist') {
         return 'ArtistCard'
diff --git a/front/src/components/library/radios/Builder.vue b/front/src/components/library/radios/Builder.vue
index 2b8e71a3d0d411b5b5407f2ddc16c80926ce47de..dbcd376b6d4c47a08662336f8e338aef6d0cc224 100644
--- a/front/src/components/library/radios/Builder.vue
+++ b/front/src/components/library/radios/Builder.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="ui vertical stripe segment" v-title="'Radio Builder'">
+  <div class="ui vertical stripe segment" v-title="labels.title">
     <div>
       <div>
         <h2 class="ui header">
@@ -10,7 +10,7 @@
           <div class="inline fields">
             <div class="field">
               <label for="name"><translate>Radio name</translate></label>
-              <input id="name" type="text" v-model="radioName" placeholder="My awesome radio" />
+              <input id="name" type="text" v-model="radioName" :placeholder="labels.placeholder" />
             </div>
             <div class="field">
               <input id="public" type="checkbox" v-model="isPublic" />
@@ -201,6 +201,14 @@ export default {
     }
   },
   computed: {
+    labels () {
+      let title = this.$gettext('Radio Builder')
+      let placeholder = this.$gettext('My awesome radio')
+      return {
+        title,
+        placeholder
+      }
+    },
     canSave: function () {
       return (
         this.radioName.length > 0 && this.checkErrors.length === 0
diff --git a/front/src/components/manage/library/FilesTable.vue b/front/src/components/manage/library/FilesTable.vue
index 98b23f0609e8d8cefce2ba8666471f7f097e4d84..9bec0714200c33c3205af671d48bd851079aebe4 100644
--- a/front/src/components/manage/library/FilesTable.vue
+++ b/front/src/components/manage/library/FilesTable.vue
@@ -4,7 +4,7 @@
       <div class="fields">
         <div class="ui field">
           <label><translate>Search</translate></label>
-          <input type="text" v-model="search" placeholder="Search by title, artist, domain..." />
+          <input type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
         </div>
         <div class="field">
           <label><translate>Ordering</translate></label>
@@ -17,8 +17,8 @@
         <div class="field">
           <label><translate>Ordering direction</translate></label>
           <select class="ui dropdown" v-model="orderingDirection">
-            <option value="+">Ascending</option>
-            <option value="-">Descending</option>
+            <option value="+"><translate>Ascending</translate></option>
+            <option value="-"><translate>Descending</translate></option>
           </select>
         </div>
       </div>
@@ -170,6 +170,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        searchPlaceholder: this.$gettext('Search by title, artist, domain...')
+      }
+    },
     actionFilters () {
       var currentFilters = {
         q: this.search
diff --git a/front/src/components/manage/library/RequestsTable.vue b/front/src/components/manage/library/RequestsTable.vue
index 4c2883ff88f43544ed2209c995c20c07db8e9c9f..be25c4bb4080564a06fad868272e7a3d8d54a8f6 100644
--- a/front/src/components/manage/library/RequestsTable.vue
+++ b/front/src/components/manage/library/RequestsTable.vue
@@ -4,7 +4,7 @@
       <div class="fields">
         <div class="ui field">
           <label><translate>Search</translate></label>
-          <input type="text" v-model="search" placeholder="Search by artist, username, comment..." />
+          <input type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
         </div>
         <div class="field">
           <label><translate>Ordering</translate></label>
@@ -17,12 +17,12 @@
         <div class="field">
           <label><translate>Ordering direction</translate></label>
           <select class="ui dropdown" v-model="orderingDirection">
-            <option value="+">Ascending</option>
-            <option value="-">Descending</option>
+            <option value="+"><translate>Ascending</translate></option>
+            <option value="-"><translate>Descending</translate></option>
           </select>
         </div>
         <div class="field">
-          <label>{{ $gettext("Status") }}</label>
+          <label><translate>Status</translate></label>
           <select class="ui dropdown" v-model="status">
             <option :value="null"><translate>All</translate></option>
             <option :value="'pending'"><translate>Pending</translate></option>
@@ -175,6 +175,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        searchPlaceholder: this.$gettext('Search by artist, username, comment...')
+      }
+    },
     actionFilters () {
       var currentFilters = {
         q: this.search
diff --git a/front/src/components/manage/users/InvitationForm.vue b/front/src/components/manage/users/InvitationForm.vue
index 92e419bdc622fb32ec3ba38484004c0e05f2231c..8ee5d0525e5894547f54cd0aa9c3ca07b7282fb9 100644
--- a/front/src/components/manage/users/InvitationForm.vue
+++ b/front/src/components/manage/users/InvitationForm.vue
@@ -9,8 +9,8 @@
       </div>
       <div class="inline fields">
         <div class="ui field">
-          <label>{{ $gettext('Invitation code')}}</label>
-          <input type="text" v-model="code" :placeholder="$gettext('Leave empty for a random code')" />
+          <label><translate>Invitation code</translate></label>
+          <input type="text" v-model="code" :placeholder="labels.placeholder" />
         </div>
         <div class="ui field">
           <button :class="['ui', {loading: isLoading}, 'button']" :disabled="isLoading" type="submit">
@@ -52,6 +52,13 @@ export default {
       errors: []
     }
   },
+  computed: {
+    labels () {
+      return {
+        placeholder: this.$gettext('Leave empty for a random code')
+      }
+    }
+  },
   methods: {
     submit () {
       let self = this
diff --git a/front/src/components/manage/users/InvitationsTable.vue b/front/src/components/manage/users/InvitationsTable.vue
index c9700f2066c6b486bdc360ac2cf691cba69bfec6..7d4864e87a3b68096f29f2880b5e266e6f769b81 100644
--- a/front/src/components/manage/users/InvitationsTable.vue
+++ b/front/src/components/manage/users/InvitationsTable.vue
@@ -4,10 +4,10 @@
       <div class="fields">
         <div class="ui field">
           <label><translate>Search</translate></label>
-          <input type="text" v-model="search" placeholder="Search by username, email, code..." />
+          <input type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
         </div>
         <div class="field">
-          <label>{{ $gettext("Ordering") }}</label>
+          <label><translate>Ordering</translate></label>
           <select class="ui dropdown" v-model="ordering">
             <option v-for="option in orderingOptions" :value="option[0]">
               {{ option[1] }}
@@ -15,7 +15,7 @@
           </select>
         </div>
         <div class="field">
-          <label>{{ $gettext("Status") }}</label>
+          <label><translate>Status</translate></label>
           <select class="ui dropdown" v-model="isOpen">
             <option :value="null"><translate>All</translate></option>
             <option :value="true"><translate>Open</translate></option>
@@ -147,6 +147,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        searchPlaceholder: this.$gettext('Search by username, email, code...')
+      }
+    },
     actionFilters () {
       var currentFilters = {
         q: this.search
diff --git a/front/src/components/manage/users/UsersTable.vue b/front/src/components/manage/users/UsersTable.vue
index d33261f1751a383589628e5ff6476a38c3d02255..a2b486e234cab7201bdea32a3f464233e4deb4af 100644
--- a/front/src/components/manage/users/UsersTable.vue
+++ b/front/src/components/manage/users/UsersTable.vue
@@ -4,7 +4,7 @@
       <div class="fields">
         <div class="ui field">
           <label><translate>Search</translate></label>
-          <input type="text" v-model="search" placeholder="Search by username, email, name..." />
+          <input type="text" v-model="search" :placeholder="labels.searchPlaceholder" />
         </div>
         <div class="field">
           <label><translate>Ordering</translate></label>
@@ -157,6 +157,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        searchPlaceholder: this.$gettext('Search by username, email, name...')
+      }
+    },
     privacyLevels () {
       return {}
     },
diff --git a/front/src/components/metadata/ArtistCard.vue b/front/src/components/metadata/ArtistCard.vue
index 8f9aa741a04ce4593c82e13350d980f7a6edbfd3..ef2fc616af41523a33fa564d97cdc0905a93024d 100644
--- a/front/src/components/metadata/ArtistCard.vue
+++ b/front/src/components/metadata/ArtistCard.vue
@@ -6,7 +6,7 @@
       </div>
       <template v-if="data.id">
         <div class="header">
-          <a :href="getMusicbrainzUrl('artist', data.id)" target="_blank" title="View on MusicBrainz">{{ data.name }}</a>
+          <a :href="getMusicbrainzUrl('artist', data.id)" target="_blank" :title="labels.musicbrainz">{{ data.name }}</a>
         </div>
         <div class="description">
           <table class="ui very basic fixed single line compact table">
@@ -16,7 +16,7 @@
                   {{ group['first-release-date'] }}
                 </td>
                 <td colspan="3">
-                  <a :href="getMusicbrainzUrl('release-group', group.id)" class="discrete link" target="_blank" :title="$gettext('View on MusicBrainz')">
+                  <a :href="getMusicbrainzUrl('release-group', group.id)" class="discrete link" target="_blank" :title="labels.musicbrainz">
                     {{ group.title }}
                   </a>
                 </td>
@@ -44,6 +44,11 @@ export default Vue.extend({
     }
   },
   computed: {
+    labels () {
+      return {
+        musicbrainz: this.$gettext('View on MusicBrainz')
+      }
+    },
     type () {
       return 'artist'
     },
diff --git a/front/src/components/metadata/ReleaseCard.vue b/front/src/components/metadata/ReleaseCard.vue
index 13f5b53ab49cf53f90d9e096681a30cefed402b3..0da2c7e2c64e4f9ec98dd38d829ef08271e778b7 100644
--- a/front/src/components/metadata/ReleaseCard.vue
+++ b/front/src/components/metadata/ReleaseCard.vue
@@ -6,10 +6,10 @@
       </div>
       <template v-if="data.id">
         <div class="header">
-          <a :href="getMusicbrainzUrl('release', data.id)" target="_blank" title="View on MusicBrainz">{{ data.title }}</a>
+          <a :href="getMusicbrainzUrl('release', data.id)" target="_blank" :title="labels.musicbrainz">{{ data.title }}</a>
         </div>
         <div class="meta">
-          <a :href="getMusicbrainzUrl('artist', data['artist-credit'][0]['artist']['id'])" target="_blank" title="View on MusicBrainz">{{ data['artist-credit-phrase'] }}</a>
+          <a :href="getMusicbrainzUrl('artist', data['artist-credit'][0]['artist']['id'])" target="_blank" :title="labels.musicbrainz">{{ data['artist-credit-phrase'] }}</a>
         </div>
         <div class="description">
           <table class="ui very basic fixed single line compact table">
@@ -19,7 +19,7 @@
                   {{ track.position }}
                 </td>
                 <td colspan="3">
-                  <a :href="getMusicbrainzUrl('recording', track.id)" class="discrete link" target="_blank" :title="$gettext('View on MusicBrainz')">
+                  <a :href="getMusicbrainzUrl('recording', track.id)" class="discrete link" target="_blank" :title="labels.musicbrainz">
                     {{ track.recording.title }}
                   </a>
                 </td>
@@ -48,6 +48,11 @@ export default Vue.extend({
     }
   },
   computed: {
+    labels () {
+      return {
+        musicbrainz: this.$gettext('View on MusicBrainz')
+      }
+    },
     type () {
       return 'release'
     },
diff --git a/front/src/components/metadata/Search.vue b/front/src/components/metadata/Search.vue
index 1ba30b7c2135c46579914a535ee624f9bf5f7ec7..4e8bf357d3fbd8e8e310c5971bf9015626e7c47f 100644
--- a/front/src/components/metadata/Search.vue
+++ b/front/src/components/metadata/Search.vue
@@ -12,7 +12,7 @@
     </div>
     <div class="ui fluid search">
       <div class="ui icon input">
-        <input class="prompt" :placeholder="$gettext('Enter your search query...')" type="text">
+        <input class="prompt" :placeholder="labels.placeholder" type="text">
         <i class="search icon"></i>
       </div>
       <div class="results"></div>
@@ -109,6 +109,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        placeholder: this.$gettext('Enter your search query...')
+      }
+    },
     currentTypeObject: function () {
       let self = this
       return this.types.filter(t => {
diff --git a/front/src/components/playlists/Card.vue b/front/src/components/playlists/Card.vue
index 6af726be0b3bdec9f63d2efd08218a6d9ccf54c5..a480975ef63234d733073b66800b65cfe85d0cf6 100644
--- a/front/src/components/playlists/Card.vue
+++ b/front/src/components/playlists/Card.vue
@@ -24,7 +24,7 @@
           %{ count} track
         </translate>
       </span>
-      <play-button class="mini basic orange right floated" :playlist="playlist">Play all</play-button>
+      <play-button class="mini basic orange right floated" :playlist="playlist"><translate>Play all</translate></play-button>
     </div>
   </div>
 </template>
diff --git a/front/src/components/playlists/Editor.vue b/front/src/components/playlists/Editor.vue
index d7ae04b2ca863dc4fdcf8c9df11f1e3965cd515f..35374cb0fe2d5e4686b27171df9b9d8c3da3b300 100644
--- a/front/src/components/playlists/Editor.vue
+++ b/front/src/components/playlists/Editor.vue
@@ -27,7 +27,7 @@
         @click="insertMany(queueTracks)"
         :disabled="queueTracks.length === 0"
         :class="['ui', {disabled: queueTracks.length === 0}, 'labeled', 'icon', 'button']"
-        title="Copy tracks from current queue to playlist">
+        :title="labels.copyTitle">
           <i class="plus icon"></i>
           <translate
             translate-plural="Insert from queue (%{ count } tracks)"
@@ -47,7 +47,7 @@
       </dangerous-button>
       <div class="ui hidden divider"></div>
       <template v-if="plts.length > 0">
-        <p>Drag and drop rows to reorder tracks in the playlist</p>
+        <p><translate>Drag and drop rows to reorder tracks in the playlist</translate></p>
         <table class="ui compact very basic fixed single line unstackable table">
           <draggable v-model="plts" element="tbody" @update="reorder">
             <tr v-for="(plt, index) in plts" :key="plt.id">
@@ -158,6 +158,11 @@ export default {
     ...mapState({
       queueTracks: state => state.queue.tracks
     }),
+    labels () {
+      return {
+        copyTitle: this.$gettext('Copy tracks from current queue to playlist')
+      }
+    },
     status () {
       if (this.isLoading) {
         return 'loading'
diff --git a/front/src/components/playlists/Form.vue b/front/src/components/playlists/Form.vue
index cbde4f8e071fa11c10ac86976be00afb4843bb17..34c75eb97747d822470ffc10a336af126071b455 100644
--- a/front/src/components/playlists/Form.vue
+++ b/front/src/components/playlists/Form.vue
@@ -20,7 +20,7 @@
     <div class="three fields">
       <div class="field">
         <label><translate>Playlist name</translate></label>
-        <input v-model="name" required type="text" placeholder="My awesome playlist" />
+        <input v-model="name" required type="text" :placeholder="labels.placeholder" />
       </div>
       <div class="field">
         <label><translate>Playlist visibility</translate></label>
@@ -69,6 +69,11 @@ export default {
     return d
   },
   computed: {
+    labels () {
+      return {
+        placeholder: this.$gettext('My awesome playlist')
+      }
+    },
     privacyLevelChoices: function () {
       return [
         {
diff --git a/front/src/components/playlists/PlaylistModal.vue b/front/src/components/playlists/PlaylistModal.vue
index cee32dab72bb5d8319e366f878634d6d7cef0d3b..668dbf75e3221c635c149bd2b5297b2439e164a8 100644
--- a/front/src/components/playlists/PlaylistModal.vue
+++ b/front/src/components/playlists/PlaylistModal.vue
@@ -50,7 +50,7 @@
                 <div
                   v-if="track"
                   class="ui green icon basic small right floated button"
-                  :title="$gettext('Add to this playlist')"
+                  :title="labels.addToPlaylist"
                   @click="addToPlaylist(playlist.id)">
                   <i class="plus icon"></i> <translate>Add track</translate>
                 </div>
@@ -110,6 +110,11 @@ export default {
       playlists: state => state.playlists.playlists,
       track: state => state.playlists.modalTrack
     }),
+    labels () {
+      return {
+        addToPlaylist: this.$gettext('Add to this playlist')
+      }
+    },
     sortedPlaylists () {
       let p = _.sortBy(this.playlists, [(e) => { return e.modification_date }])
       p.reverse()
diff --git a/front/src/components/playlists/TrackPlaylistIcon.vue b/front/src/components/playlists/TrackPlaylistIcon.vue
index 4883ba41c5a75a098eb15960353e5e00cc04f923..a75c217f4419935ee807fd7460404fcf756a677e 100644
--- a/front/src/components/playlists/TrackPlaylistIcon.vue
+++ b/front/src/components/playlists/TrackPlaylistIcon.vue
@@ -10,7 +10,7 @@
     v-else
     @click="$store.commit('playlists/chooseTrack', track)"
     :class="['playlist-icon', 'list', 'link', 'icon']"
-    :title="$gettext('Add to playlist...')">
+    :title="labels.addToPlaylist">
   </i>
 </template>
 
@@ -25,6 +25,13 @@ export default {
     return {
       showModal: false
     }
+  },
+  computed: {
+    labels () {
+      return {
+        addToPlaylist: this.$gettext('Add to playlist...')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/components/requests/Form.vue b/front/src/components/requests/Form.vue
index 0b96c20ec2dff32b0b2eb8da5a7e1259f617cbfe..b6752a6353989acdc8bad0feeb4fbb888204d5b1 100644
--- a/front/src/components/requests/Form.vue
+++ b/front/src/components/requests/Form.vue
@@ -4,21 +4,21 @@
       <p><translate>Something's missing in the library? Let us know what you would like to listen!</translate></p>
       <div class="required field">
         <label><translate>Artist name</translate></label>
-        <input v-model="currentArtistName" placeholder="The Beatles, Mickael Jackson…" required maxlength="200">
+        <input v-model="currentArtistName" :placeholder="labels.artistNamePlaceholder" required maxlength="200">
       </div>
       <div class="field">
         <label><translate>Albums</translate></label>
         <p><translate>Leave this field empty if you're requesting the whole discography.</translate></p>
-        <input v-model="currentAlbums" placeholder="The White Album, Thriller…" maxlength="2000">
+        <input v-model="currentAlbums" :placeholder="labels.albumTitlePlaceholder" maxlength="2000">
       </div>
       <div class="field">
         <label><translate>Comment</translate></label>
-        <textarea v-model="currentComment" rows="3" placeholder="Use this comment box to add details to your request if needed" maxlength="2000"></textarea>
+        <textarea v-model="currentComment" rows="3" :placeholder="comentPlaceholder" maxlength="2000"></textarea>
       </div>
       <button class="ui submit button" type="submit"><translate>Submit</translate></button>
     </form>
     <div v-else class="ui success message">
-      <div class="header">Request submitted!</div>
+      <div class="header"><translate>Request submitted!</translate></div>
       <p><translate>We've received your request, you'll get some groove soon ;)</translate></p>
       <button @click="reset" class="ui button"><translate>Submit another request</translate></button>
     </div>
@@ -68,6 +68,18 @@ export default {
       requests: []
     }
   },
+  computed: {
+    labels () {
+      let artistNamePlaceholder = this.$gettext('The Beatles, Mickael Jackson…')
+      let albumTitlePlaceholder = this.$gettext('The White Album, Thriller…')
+      let commentPlaceholder = this.$gettext('Use this comment box to add details to your request if needed')
+      return {
+        artistNamePlaceholder,
+        albumTitlePlaceholder,
+        commentPlaceholder
+      }
+    }
+  },
   methods: {
     fetchRequests () {
       let self = this
diff --git a/front/src/views/admin/Settings.vue b/front/src/views/admin/Settings.vue
index 016ef6f71ec6bc8ddbfc5b9883c0f6b5fa462841..d21b4e277c307f911245a0a29937cb929f4f46f3 100644
--- a/front/src/views/admin/Settings.vue
+++ b/front/src/views/admin/Settings.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher"  v-title="$gettext('Instance settings')">
+  <div class="main pusher"  v-title="labels.settings">
     <div class="ui vertical stripe segment">
       <div class="ui text container">
         <div :class="['ui', {'loading': isLoading}, 'form']"></div>
@@ -70,6 +70,11 @@ export default {
     }
   },
   computed: {
+    labels () {
+      return {
+        settings: this.$gettext('Instance settings')
+      }
+    },
     groups () {
       // somehow, extraction fails if in the return block directly
       let instanceLabel = this.$gettext('Instance information')
diff --git a/front/src/views/admin/library/Base.vue b/front/src/views/admin/library/Base.vue
index a592b4f31e7d8210895a5fafedeeb71c6ca272c2..08277a24ee32cf52ac08c178c37d3b309e3eb2a6 100644
--- a/front/src/views/admin/library/Base.vue
+++ b/front/src/views/admin/library/Base.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher"  v-title="'Manage library'">
+  <div class="main pusher"  v-title="labels.title">
     <div class="ui secondary pointing menu">
       <router-link
         class="ui item"
@@ -10,7 +10,7 @@
           <translate>Import requests</translate>
           <div
             :class="['ui', {'teal': $store.state.ui.notifications.importRequests > 0}, 'label']"
-            :title="$gettext('Pending import requests')">
+            :title="labels.pendingRequests">
             {{ $store.state.ui.notifications.importRequests }}</div>
           </router-link>
     </div>
@@ -19,7 +19,18 @@
 </template>
 
 <script>
-export default {}
+export default {
+  computed: {
+    labels () {
+      let title = this.$gettext('Manage library')
+      let pendingRequests = this.$gettext('Pending import requests')
+      return {
+        title,
+        pendingRequests
+      }
+    }
+  }
+}
 </script>
 
 <style lang="scss">
diff --git a/front/src/views/admin/library/FilesList.vue b/front/src/views/admin/library/FilesList.vue
index aa397f94279dcd026d0cdc38768c049910e9a65a..1c5216c8facf0c1c902f7b6bab0b8eb0ad19a16c 100644
--- a/front/src/views/admin/library/FilesList.vue
+++ b/front/src/views/admin/library/FilesList.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Files'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <h2 class="ui header"><translate>Library files</translate></h2>
       <div class="ui hidden divider"></div>
@@ -14,6 +14,13 @@ import LibraryFilesTable from '@/components/manage/library/FilesTable'
 export default {
   components: {
     LibraryFilesTable
+  },
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Files')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/views/admin/library/RequestsList.vue b/front/src/views/admin/library/RequestsList.vue
index 781f38cada81bf113a8c3e1ec59fc1e267e6ce61..d945fb865ec448f287c8b56a9f39bd6d1905d56d 100644
--- a/front/src/views/admin/library/RequestsList.vue
+++ b/front/src/views/admin/library/RequestsList.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="$gettext('Import requests')">
+  <div v-title="labels.importRequests">
     <div class="ui vertical stripe segment">
       <h2 class="ui header"><translate>Import requests</translate></h2>
       <div class="ui hidden divider"></div>
@@ -14,6 +14,13 @@ import LibraryRequestsTable from '@/components/manage/library/RequestsTable'
 export default {
   components: {
     LibraryRequestsTable
+  },
+  computed: {
+    labels () {
+      return {
+        importRequests: this.$gettext('Import requests')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/views/admin/users/Base.vue b/front/src/views/admin/users/Base.vue
index d04264975a721459f66da7488affb4f3601ea210..bbdf4432419a428e047a5ca230006e4bceb77bbc 100644
--- a/front/src/views/admin/users/Base.vue
+++ b/front/src/views/admin/users/Base.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher"  v-title="$gettext('Manage users')">
+  <div class="main pusher"  v-title="labels.manageUsers">
     <div class="ui secondary pointing menu">
       <router-link
         class="ui item"
@@ -13,7 +13,15 @@
 </template>
 
 <script>
-export default {}
+export default {
+  computed: {
+    labels () {
+      return {
+        manageUsers: this.$gettext('Manage users')
+      }
+    }
+  }
+}
 </script>
 
 <style lang="scss">
diff --git a/front/src/views/admin/users/InvitationsList.vue b/front/src/views/admin/users/InvitationsList.vue
index b874456123b46bf1c567d2e0e6d10766dd0381b7..b2dd8f0374aa21bf3eea2eba1c3cf52e86e457ad 100644
--- a/front/src/views/admin/users/InvitationsList.vue
+++ b/front/src/views/admin/users/InvitationsList.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="$gettext('Invitations')">
+  <div v-title="labels.invitations">
     <div class="ui vertical stripe segment">
       <h2 class="ui header"><translate>Invitations</translate></h2>
       <invitation-form></invitation-form>
@@ -17,6 +17,13 @@ export default {
   components: {
     InvitationForm,
     InvitationsTable
+  },
+  computed: {
+    labels () {
+      return {
+        invitations: this.$gettext('Invitations')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/views/admin/users/UsersDetail.vue b/front/src/views/admin/users/UsersDetail.vue
index a97eb8d5957f6751aecf15279c47d76111bb94f4..72efabd8966bbe05286893f805b88511ec477076 100644
--- a/front/src/views/admin/users/UsersDetail.vue
+++ b/front/src/views/admin/users/UsersDetail.vue
@@ -53,7 +53,7 @@
               <tr>
                 <td>
                   <translate>Account active</translate>
-                  <span :data-tooltip="$gettext('Determine if the user account is active or not. Inactive users cannot login or user the service.')"><i class="question circle icon"></i></span>
+                  <span :data-tooltip="labels.inactive"><i class="question circle icon"></i></span>
                 </td>
                 <td>
                   <div class="ui toggle checkbox">
@@ -141,6 +141,11 @@ 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.')
+      }
+    },
     allPermissions () {
       return [
         {
diff --git a/front/src/views/admin/users/UsersList.vue b/front/src/views/admin/users/UsersList.vue
index edb9e272349056fa93e57afaebb1ee992c5f2ea8..ef4d60961e89ba2566d484bdd42ae800796beded 100644
--- a/front/src/views/admin/users/UsersList.vue
+++ b/front/src/views/admin/users/UsersList.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="$gettext('Users')">
+  <div v-title="labels.users">
     <div class="ui vertical stripe segment">
       <h2 class="ui header"><translate>Users</translate></h2>
       <div class="ui hidden divider"></div>
@@ -14,6 +14,13 @@ import UsersTable from '@/components/manage/users/UsersTable'
 export default {
   components: {
     UsersTable
+  },
+  computed: {
+    labels () {
+      return {
+        users: this.$gettext('Users')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/views/auth/EmailConfirm.vue b/front/src/views/auth/EmailConfirm.vue
index 1fb99961b16713ff7900a5b69116050f6b850591..7b982504506781119fc27efbffd53ff9c61b3854 100644
--- a/front/src/views/auth/EmailConfirm.vue
+++ b/front/src/views/auth/EmailConfirm.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="$gettext('Confirm your email')">
+  <div class="main pusher" v-title="labels.confirm">
     <div class="ui vertical stripe segment">
       <div class="ui small text container">
         <h2><translate>Confirm your email</translate></h2>
@@ -45,6 +45,13 @@ export default {
       success: false
     }
   },
+  computed: {
+    labels () {
+      return {
+        confirm: this.$gettext('Confirm your email')
+      }
+    }
+  },
   methods: {
     submit () {
       let self = this
diff --git a/front/src/views/auth/PasswordReset.vue b/front/src/views/auth/PasswordReset.vue
index 4775e02442d9ef8116e3be64cc0c5b707f649348..52787a516ff52e22813f83579973bf6de8170387 100644
--- a/front/src/views/auth/PasswordReset.vue
+++ b/front/src/views/auth/PasswordReset.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="$gettext('Reset your password')">
+  <div class="main pusher" v-title="labels.reset">
     <div class="ui vertical stripe segment">
       <div class="ui small text container">
         <h2><translate>Reset your password</translate></h2>
@@ -18,7 +18,7 @@
               ref="email"
               type="email"
               autofocus
-              :placeholder="$gettext('Input the email address binded to your account')"
+              :placeholder="labels.placeholder"
               v-model="email">
           </div>
           <router-link :to="{path: '/login'}">
@@ -47,6 +47,16 @@ export default {
   mounted () {
     this.$refs.email.focus()
   },
+  computed: {
+    labels () {
+      let reset = this.$gettext('Reset your password')
+      let placeholder = this.$gettext('Input the email address binded to your account')
+      return {
+        reset,
+        placeholder
+      }
+    }
+  },
   methods: {
     submit () {
       let self = this
diff --git a/front/src/views/auth/PasswordResetConfirm.vue b/front/src/views/auth/PasswordResetConfirm.vue
index 42f2e17867b09c958561dbcab43e2d905acc2f71..b6e4f23224242d160b0c2121b176ed5fb07a8287 100644
--- a/front/src/views/auth/PasswordResetConfirm.vue
+++ b/front/src/views/auth/PasswordResetConfirm.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="$gettext('Change your password')">
+  <div class="main pusher" v-title="labels.changePassword">
     <div class="ui vertical stripe segment">
       <div class="ui small text container">
         <h2><translate>Change your password</translate></h2>
@@ -56,6 +56,13 @@ export default {
       success: false
     }
   },
+  computed: {
+    labels () {
+      return {
+        changePassword: this.$gettext('Change your password')
+      }
+    }
+  },
   methods: {
     submit () {
       let self = this
diff --git a/front/src/views/federation/Base.vue b/front/src/views/federation/Base.vue
index 9ab5dc2b9624a87862144e8593ddd29bb93c037e..908ab7908a97ffa56623a1684ec263073dfc7a9b 100644
--- a/front/src/views/federation/Base.vue
+++ b/front/src/views/federation/Base.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher"  v-title="'Federation'">
+  <div class="main pusher"  v-title="labels.title">
     <div class="ui secondary pointing menu">
       <router-link
         class="ui item"
@@ -12,7 +12,7 @@
             class="ui item"
             :to="{name: 'federation.followers.list'}">
             <translate>Followers</translate>
-            <div class="ui teal label" :title="$gettext('Pending requests')">{{ requestsCount }}</div>
+            <div class="ui teal label" :title="labels.pendingRequests">{{ requestsCount }}</div>
           </router-link>
         </div>
     </div>
@@ -30,6 +30,16 @@ export default {
   created () {
     this.fetchRequestsCount()
   },
+  computed: {
+    labels () {
+      let title = this.$gettext('Federation')
+      let pendingRequests = this.$gettext('Pending requests')
+      return {
+        title,
+        pendingRequests
+      }
+    }
+  },
   methods: {
     fetchRequestsCount () {
       let self = this
diff --git a/front/src/views/federation/LibraryDetail.vue b/front/src/views/federation/LibraryDetail.vue
index 22399b0ba9c13cb9a26a9085eef570618fc39c47..4ddccb79b3ddea21193b6e4726cc4fc319c30c6a 100644
--- a/front/src/views/federation/LibraryDetail.vue
+++ b/front/src/views/federation/LibraryDetail.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-if="isLoading" class="ui vertical segment" v-title="'Library'">
+    <div v-if="isLoading" class="ui vertical segment" v-title="labels.title">
       <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
     </div>
     <template v-if="object">
@@ -20,7 +20,7 @@
               <tr>
                 <td >
                   <translate>Follow status</translate>
-                  <span :data-tooltip="$gettext('This indicate if the remote library granted you access')"><i class="question circle icon"></i></span>
+                  <span :data-tooltip="labels.statusTooltip"><i class="question circle icon"></i></span>
                 </td>
                 <td>
                   <template v-if="object.follow.approved === null">
@@ -39,7 +39,7 @@
               <tr>
                 <td>
                   <translate>Federation</translate>
-                  <span :data-tooltip="$gettext('Use this flag to enable/disable federation with this library')"><i class="question circle icon"></i></span>
+                  <span :data-tooltip="labels.federationTooltip"><i class="question circle icon"></i></span>
                 </td>
                 <td>
                   <div class="ui toggle checkbox">
@@ -55,7 +55,7 @@
               <tr>
                 <td>
                   <translate>Auto importing</translate>
-                  <span :data-tooltip="$gettext('When enabled, auto importing will automatically import new tracks published in this library')"><i class="question circle icon"></i></span>
+                  <span :data-tooltip="labels.autoImportTooltip"><i class="question circle icon"></i></span>
                 </td>
                 <td>
                   <div class="ui toggle checkbox">
@@ -69,7 +69,7 @@
               </tr>
               <!-- Disabled until properly implemented on the backend
               <tr>
-                <td>File mirroring</td>
+                <td><translate>File mirroring</translate></td>
                 <td>
                   <div class="ui toggle checkbox">
                     <input
@@ -190,6 +190,18 @@ export default {
     }
   },
   computed: {
+    labels () {
+      let title = this.$gettext('Library')
+      let statusTooltip = this.$gettext('This indicate if the remote library granted you access')
+      let federationTooltip = this.$gettext('Use this flag to enable/disable federation with this library')
+      let autoImportTooltip = this.$gettext('When enabled, auto importing will automatically import new tracks published in this library')
+      return {
+        title,
+        statusTooltip,
+        federationTooltip,
+        autoImportTooltip
+      }
+    },
     libraryUsername () {
       let actor = this.object.actor
       return `${actor.preferred_username}@${actor.domain}`
diff --git a/front/src/views/federation/LibraryFollowersList.vue b/front/src/views/federation/LibraryFollowersList.vue
index 28e2a9992cc4ed00bc48544354594a0f0e83c1dc..0a9267a85acdfa8b1e4d14d3b128fa6752118bfc 100644
--- a/front/src/views/federation/LibraryFollowersList.vue
+++ b/front/src/views/federation/LibraryFollowersList.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Followers'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <h2 class="ui header"><translate>Browsing followers</translate></h2>
       <p>
@@ -17,6 +17,13 @@ import LibraryFollowTable from '@/components/federation/LibraryFollowTable'
 export default {
   components: {
     LibraryFollowTable
+  },
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Followers')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/views/federation/LibraryList.vue b/front/src/views/federation/LibraryList.vue
index ad54c008cb5c2483084d1a7b664e0757b6e6d14a..c043d17b64e31b102a185dd8d2e65337358d6d43 100644
--- a/front/src/views/federation/LibraryList.vue
+++ b/front/src/views/federation/LibraryList.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Libraries'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <h2 class="ui header"><translate>Browsing libraries</translate></h2>
       <router-link
@@ -13,7 +13,7 @@
         <div class="fields">
           <div class="field">
             <label><translate>Search</translate></label>
-            <input class="search" type="text" v-model="query" placeholder="Enter an library domain name..."/>
+            <input class="search" type="text" v-model="query" :placeholder="labels.searchPlaceholder"/>
           </div>
           <div class="field">
             <label><translate>Ordering</translate></label>
@@ -117,6 +117,16 @@ export default {
     $('.ui.dropdown').dropdown()
     $(this.$el).find('.field .search').focus()
   },
+  computed: {
+    labels () {
+      let searchPlaceholder = this.$gettext('Enter an library domain name...')
+      let title = this.$gettext('Libraries')
+      return {
+        searchPlaceholder,
+        title
+      }
+    }
+  },
   methods: {
     updateQueryString: _.debounce(function () {
       this.$router.replace({
diff --git a/front/src/views/federation/LibraryTrackList.vue b/front/src/views/federation/LibraryTrackList.vue
index 5bfce3f873293b0cf938de4563344840e4019df8..55f9e46af49444c62b2733242ae5e44edad59055 100644
--- a/front/src/views/federation/LibraryTrackList.vue
+++ b/front/src/views/federation/LibraryTrackList.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="'Federated tracks'">
+  <div v-title="labels.title">
     <div class="ui vertical stripe segment">
       <h2 class="ui header"><translate>Browsing federated tracks</translate></h2>
       <div class="ui hidden divider"></div>
@@ -14,6 +14,13 @@ import LibraryTrackTable from '@/components/federation/LibraryTrackTable'
 export default {
   components: {
     LibraryTrackTable
+  },
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Federated tracks')
+      }
+    }
   }
 }
 </script>
diff --git a/front/src/views/instance/Timeline.vue b/front/src/views/instance/Timeline.vue
index 5e9a6efa5e9ec753e7c1144d405ac3903a20bfc1..a70bd404966cc96972efadaa3f8146ee7b9bb599 100644
--- a/front/src/views/instance/Timeline.vue
+++ b/front/src/views/instance/Timeline.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="main pusher" v-title="'Instance Timeline'">
+  <div class="main pusher" v-title="labels.title">
     <div class="ui vertical center aligned stripe segment">
       <div v-if="isLoading" :class="['ui', {'active': isLoading}, 'inverted', 'dimmer']">
         <div class="ui text loader"><translate>Loading timeline...</translate></div>
@@ -51,7 +51,12 @@ export default {
   computed: {
     ...mapState({
       events: state => state.instance.events
-    })
+    }),
+    labels () {
+      return {
+        title: this.$gettext('Instance Timeline')
+      }
+    }
   },
   methods: {
     fetchEvents () {
diff --git a/front/src/views/playlists/Detail.vue b/front/src/views/playlists/Detail.vue
index 5074ce87cc1d42c1b9fdffe932c786cf03e364e2..3fd4730bc58cf26c5197b19dd9e258ced8eb657e 100644
--- a/front/src/views/playlists/Detail.vue
+++ b/front/src/views/playlists/Detail.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-if="isLoading" class="ui vertical segment" v-title="$gettext('Playlist')">
+    <div v-if="isLoading" class="ui vertical segment" v-title="labels.playlist">
       <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
     </div>
     <div v-if="!isLoading && playlist" class="ui head vertical center aligned stripe segment" v-title="playlist.name">
@@ -47,7 +47,7 @@
           :playlist="playlist" :playlist-tracks="playlistTracks"></playlist-editor>
       </template>
       <template v-else>
-        <h2>Tracks</h2>
+        <h2><translate>Tracks</translate></h2>
         <track-table :display-position="true" :tracks="tracks"></track-table>
       </template>
     </div>
@@ -83,6 +83,13 @@ export default {
   created: function () {
     this.fetch()
   },
+  computed: {
+    labels () {
+      return {
+        playlist: this.$gettext('Playlist')
+      }
+    }
+  },
   methods: {
     updatePlts (v) {
       this.playlistTracks = v
diff --git a/front/src/views/playlists/List.vue b/front/src/views/playlists/List.vue
index 6e39e73fc3ebb5eb8eebd73d5b408f48d84a44c9..c28f99561131e402d7b0ecac0e1c40902f31ee08 100644
--- a/front/src/views/playlists/List.vue
+++ b/front/src/views/playlists/List.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-title="$gettext('Playlists')">
+  <div v-title="labels.playlists">
     <div class="ui vertical stripe segment">
       <h2 class="ui header"><translate>Browsing playlists</translate></h2>
       <div :class="['ui', {'loading': isLoading}, 'form']">
@@ -12,7 +12,7 @@
         <div class="fields">
           <div class="field">
             <label><translate>Search</translate></label>
-            <input type="text" v-model="query" :placeholder="$gettext('Enter an playlist name...')"/>
+            <input type="text" v-model="query" :placeholder="labels.searchPlaceholder"/>
           </div>
           <div class="field">
             <label><translate>Ordering</translate></label>
@@ -98,6 +98,16 @@ export default {
   mounted () {
     $('.ui.dropdown').dropdown()
   },
+  computed: {
+    labels () {
+      let playlists = this.$gettext('Playlists')
+      let searchPlaceholder = this.$gettext('Enter an playlist name...')
+      return {
+        playlists,
+        searchPlaceholder
+      }
+    }
+  },
   methods: {
     updateQueryString: _.debounce(function () {
       this.$router.replace({
diff --git a/front/src/views/radios/Detail.vue b/front/src/views/radios/Detail.vue
index 0975398b54237577332a672d3c3f80e1a5c9b169..e8233735013614cae0214a49344a65fbe2366c62 100644
--- a/front/src/views/radios/Detail.vue
+++ b/front/src/views/radios/Detail.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-if="isLoading" class="ui vertical segment" v-title="'Radio'">
+    <div v-if="isLoading" class="ui vertical segment" v-title="labels.title">
       <div :class="['ui', 'centered', 'active', 'inline', 'loader']"></div>
     </div>
     <div v-if="!isLoading && radio" class="ui head vertical center aligned stripe segment" v-title="radio.name">
@@ -24,15 +24,15 @@
           </router-link>
           <dangerous-button class="labeled icon" :action="deleteRadio">
             <i class="trash icon"></i> Delete
-            <p slot="modal-header">Do you want to delete the radio "{{ radio.name }}"?</p>
-            <p slot="modal-content">This will completely delete this radio and cannot be undone.</p>
-            <p slot="modal-confirm">Delete radio</p>
+            <p slot="modal-header"><translate :translate-params="{radio: radio.name}">Do you want to delete the radio "{{ radio }}"?</translate></p>
+            <p slot="modal-content"><translate>This will completely delete this radio and cannot be undone.</translate></p>
+            <p slot="modal-confirm"><translate>Delete radio</translate></p>
           </dangerous-button>
         </template>
       </div>
     </div>
     <div class="ui vertical stripe segment">
-      <h2>Tracks</h2>
+      <h2><translate>Tracks</translate></h2>
       <track-table :tracks="tracks"></track-table>
       <div class="ui center aligned basic segment">
         <pagination
@@ -74,6 +74,13 @@ export default {
   created: function () {
     this.fetch()
   },
+  computed: {
+    labels () {
+      return {
+        title: this.$gettext('Radio')
+      }
+    }
+  },
   methods: {
     selectPage: function (page) {
       this.page = page