diff --git a/.gitignore b/.gitignore
index ef5007af7a121c2ba82ba13b76eef9915407ce03..ee2ed95e258ab9743032d4c73c8b1f8e50c6f848 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,7 +35,6 @@ htmlcov
 
 # Translations
 *.mo
-*.pot
 
 # Pycharm
 .idea
diff --git a/front/package.json b/front/package.json
index 6e10338514dc2983eab1b4ffb8e300c27ad1dda1..01d396d01229a97fe3a4c1f819143cd8cb19478c 100644
--- a/front/package.json
+++ b/front/package.json
@@ -39,7 +39,7 @@
     "vue-upload-component": "^2.7.4",
     "vuedraggable": "^2.14.1",
     "vuex": "^3.0.1",
-    "vuex-persistedstate": "^2.4.2",
+    "vuex-persistedstate": "^2.5.2",
     "vuex-router-sync": "^5.0.0"
   },
   "devDependencies": {
diff --git a/front/src/App.vue b/front/src/App.vue
index e8ab18694ae4c44a5c6995d263b194dffe598dc2..babe359b0173c171bf122ab9e61e006478aaff0b 100644
--- a/front/src/App.vue
+++ b/front/src/App.vue
@@ -49,6 +49,7 @@ export default {
     PlaylistModal
   },
   created () {
+    console.log(this.$t('hello'))
     this.$store.dispatch('instance/fetchSettings')
     let self = this
     setInterval(() => {
diff --git a/front/src/main.js b/front/src/main.js
index 5030e5c9c429d62eda3d6c20e86acc1d4e19a3c2..aa63944fcbafd4b7229c15eca410d4f80f187032 100644
--- a/front/src/main.js
+++ b/front/src/main.js
@@ -11,6 +11,9 @@ import router from './router'
 import axios from 'axios'
 import {VueMasonryPlugin} from 'vue-masonry'
 import VueLazyload from 'vue-lazyload'
+import i18next from 'i18next'
+// import i18nextFetch from 'i18next-fetch-backend'
+import VueI18Next from '@panter/vue-i18next'
 import store from './store'
 import config from './config'
 import { sync } from 'vuex-router-sync'
@@ -27,6 +30,7 @@ window.$ = window.jQuery = require('jquery')
 require('semantic-ui-css/semantic.js')
 require('masonry-layout')
 
+Vue.use(VueI18Next)
 Vue.use(VueMasonryPlugin)
 Vue.use(VueLazyload)
 Vue.config.productionTip = false
@@ -77,11 +81,31 @@ axios.interceptors.response.use(function (response) {
   return Promise.reject(error)
 })
 store.dispatch('auth/check')
+
+// i18n
+i18next.init({
+  lng: 'en',
+  resources: {
+    en: {
+      translation: {
+        'hello': 'Hello'
+      }
+    },
+    fr: {
+      translation: {
+        'hello': 'Bonjour'
+      }
+    }
+  }
+})
+const i18n = new VueI18Next(i18next)
+
 /* eslint-disable no-new */
 new Vue({
   el: '#app',
   router,
   store,
+  i18n,
   template: '<App/>',
   components: { App }
 })
diff --git a/po/funkwhale.pot b/po/funkwhale.pot
new file mode 100644
index 0000000000000000000000000000000000000000..b5480d50981970a743eb13a7b97f03c12f4a8296
--- /dev/null
+++ b/po/funkwhale.pot
@@ -0,0 +1,13 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Funkwhale 0.8\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-23 15:49-0700\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-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"