diff --git a/src/App.vue b/src/App.vue
index c629bd6..53a0cf7 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -22,8 +22,37 @@ const installDismissed = ref(false);
const isCoarsePointer = ref(false);
const isStandalone = ref(false);
const themePreference = ref('system');
+const isLangOpen = ref(false);
+const langMenuRef = ref(null);
let displayModeMedia = null;
let prefersColorSchemeMedia = null;
+const languageFlags = {
+ en: '',
+ zh: '',
+ hi: '',
+ es: '',
+ fr: '',
+ ar: '',
+ bn: '',
+ ru: '',
+ pt: '',
+ ur: '',
+ pl: ''
+};
+
+const languages = computed(() => [
+ { code: 'en', label: t('language.en') },
+ { code: 'zh', label: t('language.zh') },
+ { code: 'hi', label: t('language.hi') },
+ { code: 'es', label: t('language.es') },
+ { code: 'fr', label: t('language.fr') },
+ { code: 'ar', label: t('language.ar') },
+ { code: 'bn', label: t('language.bn') },
+ { code: 'ru', label: t('language.ru') },
+ { code: 'pt', label: t('language.pt') },
+ { code: 'ur', label: t('language.ur') },
+ { code: 'pl', label: t('language.pl') }
+]);
const installLabel = computed(() => {
return isCoarsePointer.value ? t('pwa.installMobile') : t('pwa.installDesktop');
@@ -85,6 +114,18 @@ const handleSystemThemeChange = () => {
}
};
+const selectLanguage = (value) => {
+ setLocale(value);
+ isLangOpen.value = false;
+};
+
+const handleOutsideClick = (event) => {
+ if (!langMenuRef.value) return;
+ if (!langMenuRef.value.contains(event.target)) {
+ isLangOpen.value = false;
+ }
+};
+
onMounted(() => {
if (!store.loadState()) {
store.initGame(); // Inicjalizacja domyślnej gry jeśli brak zapisu
@@ -111,6 +152,7 @@ onMounted(() => {
} else if (displayModeMedia?.addListener) {
displayModeMedia.addListener(updateStandalone);
}
+ document.addEventListener('click', handleOutsideClick);
}
});
@@ -128,6 +170,7 @@ onUnmounted(() => {
} else if (displayModeMedia?.removeListener) {
displayModeMedia.removeListener(updateStandalone);
}
+ document.removeEventListener('click', handleOutsideClick);
});
@@ -138,9 +181,29 @@ onUnmounted(() => {