+
+
+ Welcome in your Blank Shopware PWA template. It is a base for your own
+ theme.
+
+
+
+
+
+
+
+
diff --git a/packages/theme-base/src/locales/de-DE.json b/packages/theme-base/src/locales/de-DE.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/packages/theme-base/src/locales/de-DE.json
@@ -0,0 +1 @@
+{}
diff --git a/packages/theme-base/src/locales/en-GB.json b/packages/theme-base/src/locales/en-GB.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/packages/theme-base/src/locales/en-GB.json
@@ -0,0 +1 @@
+{}
diff --git a/packages/theme-base/src/logic/useLocales.js b/packages/theme-base/src/logic/useLocales.js
new file mode 100644
index 000000000..d32de2755
--- /dev/null
+++ b/packages/theme-base/src/logic/useLocales.js
@@ -0,0 +1,28 @@
+import { computed } from "@vue/composition-api";
+import languagesMap from "sw-plugins/languages";
+import { getApplicationContext } from "@shopware-pwa/composables";
+
+export const useLocales = (rootContext) => {
+ const { i18n, router } = getApplicationContext(
+ rootContext,
+ "useUICheckoutPage"
+ );
+
+ const availableLanguages = computed(() => Object.values(languagesMap) || []);
+ const currentLocale = computed(() => i18n.locale);
+
+ const changeLocale = async (localeCode) => {
+ if (localeCode === i18n.locale) return;
+ if (localeCode === i18n.fallbackLocale) {
+ router.push(rootContext.$route.fullPath.replace(/^\/[^\/]+/, ""));
+ } else {
+ router.push(`/${localeCode}${rootContext.$route.fullPath}`);
+ }
+ };
+
+ return {
+ availableLanguages,
+ changeLocale,
+ currentLocale,
+ };
+};
diff --git a/packages/theme-base/src/pages/_.vue b/packages/theme-base/src/pages/_.vue
new file mode 100644
index 000000000..88d2d37d2
--- /dev/null
+++ b/packages/theme-base/src/pages/_.vue
@@ -0,0 +1,4 @@
+
diff --git a/packages/theme-base/src/pages/_lang/_.vue b/packages/theme-base/src/pages/_lang/_.vue
new file mode 100644
index 000000000..92175f10d
--- /dev/null
+++ b/packages/theme-base/src/pages/_lang/_.vue
@@ -0,0 +1,17 @@
+