diff --git a/aleksis/core/frontend/app/i18n.js b/aleksis/core/frontend/app/i18n.js
index ed50743eddf2d7fe306b9fe1116ef17fc914911d..a345a13c457ca979a1a2cee7319d82f46cb67ca2 100644
--- a/aleksis/core/frontend/app/i18n.js
+++ b/aleksis/core/frontend/app/i18n.js
@@ -5,7 +5,6 @@
 import dateTimeFormats from "./dateTimeFormats.js";
 
 const i18nOpts = {
-  locale: "en",
   fallbackLocale: "en",
   messages: {},
   dateTimeFormats,
diff --git a/aleksis/core/frontend/components/app/App.vue b/aleksis/core/frontend/components/app/App.vue
index da681615b320f70c3ac3c494bc12f1d70cd1d7f9..8896f20785f8992c81e5cecf4488536b9d29caf8 100644
--- a/aleksis/core/frontend/components/app/App.vue
+++ b/aleksis/core/frontend/components/app/App.vue
@@ -244,8 +244,6 @@ export default {
   },
   watch: {
     systemProperties: function (newProperties) {
-      this.$i18n.locale = newProperties.currentLanguage;
-      this.$vuetify.lang.current = newProperties.currentLanguage;
       this.$vuetify.theme.themes.light.primary =
         newProperties.sitePreferences.themePrimary;
       this.$vuetify.theme.themes.light.secondary =
diff --git a/aleksis/core/frontend/components/app/systemProperties.graphql b/aleksis/core/frontend/components/app/systemProperties.graphql
index e599cf04694c79a0bd7d1a38dd7f9bb0bd80a4ae..35dc824fd3ec64f090615ebc4a484cf9c3a70911 100644
--- a/aleksis/core/frontend/components/app/systemProperties.graphql
+++ b/aleksis/core/frontend/components/app/systemProperties.graphql
@@ -5,7 +5,6 @@
       nameTranslated
       cookie
     }
-    currentLanguage
     sitePreferences {
       themePrimary
       themeSecondary
diff --git a/aleksis/core/frontend/index.js b/aleksis/core/frontend/index.js
index ef66ecf6576ed1d7d4581639a65b5607c7a75dc5..25df11b343a0708bbb6a1a378cfa1b17ab154749 100644
--- a/aleksis/core/frontend/index.js
+++ b/aleksis/core/frontend/index.js
@@ -9,6 +9,7 @@ import Vuetify from "@/vuetify";
 import VueI18n from "@/vue-i18n";
 import VueRouter from "@/vue-router";
 import VueApollo from "@/vue-apollo";
+import VueCookies from "@/vue-cookies";
 
 import AleksisVue from "./plugins/aleksis.js";
 
@@ -26,6 +27,7 @@ Vue.use(Vuetify);
 Vue.use(VueI18n);
 Vue.use(VueRouter);
 Vue.use(VueApollo);
+Vue.use(VueCookies);
 
 // All of these imports yield config objects to be passed to the plugin constructors
 import vuetifyOpts from "./app/vuetify.js";
@@ -33,8 +35,20 @@ import i18nOpts from "./app/i18n.js";
 import routerOpts from "./app/router.js";
 import apolloOpts from "./app/apollo.js";
 
-const i18n = new VueI18n(i18nOpts);
-const vuetify = new Vuetify(vuetifyOpts);
+const i18n = new VueI18n({
+  locale: Vue.$cookies.get("django_language")
+    ? Vue.$cookies.get("django_language")
+    : "en",
+  ...i18nOpts,
+});
+const vuetify = new Vuetify({
+  lang: {
+    current: Vue.$cookies.get("django_language")
+      ? Vue.$cookies.get("django_language")
+      : "en",
+  },
+  ...vuetifyOpts,
+});
 const router = new VueRouter(routerOpts);
 const apolloProvider = new VueApollo(apolloOpts);
 
diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index 44d440510a4e21af4006d26a2763d6f86d4ae3d7..842583fe2b880c6bf98ab89dbdb96b461f8ac574 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -587,6 +587,7 @@ YARN_INSTALLED_APPS = [
     "vue-apollo@^3.1.0",
     "vuetify@^2.6.7",
     "vue-router@^3.5.2",
+    "vue-cookies@^1.8.2",
     "vite@^4.0.1",
     "vite-plugin-pwa@^0.14.1",
     "vite-plugin-top-level-await@^1.2.2",