diff --git a/aleksis/core/assets/messages.js b/aleksis/core/assets/messages.js
index cc3ab1b19bc6601e31502b8a319d198aaa108725..16708c5ec7a1ed1e3d07aabc3d1ccbd18fd9127f 100644
--- a/aleksis/core/assets/messages.js
+++ b/aleksis/core/assets/messages.js
@@ -1,9 +1,5 @@
-import appDetails from "aleksisAppDetails";
+import { appMessages } from "aleksisAppImporter";
 
-for (const details of Object.values(appDetails)) {
-  if (details.hasMessages) {
-    import(details.assetDir + "/messages.json").then(function (appMessages) {
-      window.i18n.registerLocale(appMessages);
-    });
-  }
+for (const messages of Object.values(appMessages)) {
+  window.i18n.registerLocale(messages);
 }
diff --git a/aleksis/core/vite.config.js b/aleksis/core/vite.config.js
index 3eb8cb327c9446584dda436478304958eb3fbf70..00083a2998c6499b322c8a1e11f1108221478479 100644
--- a/aleksis/core/vite.config.js
+++ b/aleksis/core/vite.config.js
@@ -12,6 +12,7 @@ const django_values = JSON.parse(fs.readFileSync("./django-vite-values.json"));
 
 function generateAppImporter(appDetails) {
   let code = "let appObjects = {};\n";
+  let code += "let appMessages = {};\n";
   for (const [appPackage, appMeta] of Object.entries(appDetails)) {
     let indexPath = appMeta.assetDir + "/index.js";
     let importAppName =
@@ -20,8 +21,14 @@ function generateAppImporter(appDetails) {
     code += `console.debug("Importing AlekSIS app entrypoint for ${appPackage}");\n`;
     code += `import ${importAppName} from '${indexPath}';\n`;
     code += `appObjects["${appMeta.name}"] = ${importAppName};\n`;
+    if appMeta.hasMessages {
+      let messagesPath = appMeta.assetDir + "/messages.json";
+      code += `import ${importAppName}Messages from '${messagesPath}';\n`;
+      code += `appMessages["${appMeta.name}"] = ${importAppName}Messages;\n`;
+    }
   }
   code += "export default appObjects;\n";
+  code += "export { appObjects, appMessages };\n";
   return code;
 }
 
@@ -92,7 +99,6 @@ export default defineConfig({
   plugins: [
     virtual({
       aleksisAppImporter: generateAppImporter(django_values.appDetails),
-      aleksisAppDetails: generateAppDetails(django_values.appDetails),
     }),
     vue(),
     nodeResolve({ modulePaths: [path.resolve("./node_modules")] }),