// src/main.ts import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' import router from './router' import '@/style.css' import { useSettingsStore } from './stores/settings' import { useUserStore } from './stores/user' import { createI18n } from 'vue-i18n' import en from '@/locales/en.json' import ru from '@/locales/ru.json' // Функция определения языка браузера function getBrowserLocale(): string { const browserLang = navigator.language.split('-')[0] return browserLang === 'ru' ? 'ru' : 'en' } // Получаем сохраненный язык из localStorage (для неавторизованных) const storedLocale = localStorage.getItem('locale') const initialLocale = storedLocale || getBrowserLocale() const i18n = createI18n({ legacy: false, locale: initialLocale, fallbackLocale: 'en', messages: { en, ru } }) const app = createApp(App) const pinia = createPinia() app.use(pinia) app.use(router) app.use(i18n) const settingsStore = useSettingsStore() const userStore = useUserStore() // Загружаем настройки и профиль Promise.all([ settingsStore.loadSettings(), userStore.fetchProfile().catch(() => {}) ]).then(() => { // Если пользователь авторизован – используем язык из профиля if (userStore.id && userStore.language) { i18n.global.locale.value = userStore.language // Сохраняем в localStorage для синхронизации (опционально) localStorage.setItem('locale', userStore.language) } else { // Для неавторизованных – сохраняем текущий язык в localStorage localStorage.setItem('locale', i18n.global.locale.value) } app.mount('#app') })