From fd39c5303a31fad0dc562efea00a2b4943996906 Mon Sep 17 00:00:00 2001 From: Nikolai Giman Date: Sun, 22 Feb 2026 19:52:39 +0100 Subject: [PATCH] fix: save the locale in storage --- web/src/components/UserMenu.vue | 5 +++-- web/src/main.ts | 3 ++- web/src/plugins/i18n.ts | 18 +++++++++++++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/web/src/components/UserMenu.vue b/web/src/components/UserMenu.vue index 5b58411..d3b33cc 100644 --- a/web/src/components/UserMenu.vue +++ b/web/src/components/UserMenu.vue @@ -42,6 +42,7 @@ import { useI18n } from 'vue-i18n' import { useRouter } from 'vue-router' import { useAppStore } from '@/stores/app.store' import { useLogout } from '@/composables/useLogout' +import { saveLocale } from '@/plugins/i18n' import { useUpdater } from '@/composables/useUpdater' import { useUserStore } from '@/stores/user.store' import { $ls } from '@/plugins/axios' @@ -176,7 +177,7 @@ const items = computed(() => [ checked: locale.value === 'en', onSelect(e: Event) { e.preventDefault() - locale.value = 'en' + saveLocale('en') }, }, { @@ -185,7 +186,7 @@ const items = computed(() => [ checked: locale.value === 'ru', onSelect(e: Event) { e.preventDefault() - locale.value = 'ru' + saveLocale('ru') }, }, ], diff --git a/web/src/main.ts b/web/src/main.ts index 8cd7fc9..67efa51 100644 --- a/web/src/main.ts +++ b/web/src/main.ts @@ -8,7 +8,7 @@ import type { Plugin } from 'vue' import { createApp } from 'vue' import { createRouter, createWebHistory } from 'vue-router' import ui from '@nuxt/ui/vue-plugin' -import { i18n } from './plugins/i18n' +import { i18n, restoreSavedLocale } from './plugins/i18n' addCollection(lucide) addCollection(mdi) @@ -82,3 +82,4 @@ app.use(router) app.use(ui as unknown as Plugin) app.mount('#app') +restoreSavedLocale() diff --git a/web/src/plugins/i18n.ts b/web/src/plugins/i18n.ts index eda320e..602f0d9 100644 --- a/web/src/plugins/i18n.ts +++ b/web/src/plugins/i18n.ts @@ -1,5 +1,7 @@ import { createI18n } from 'vue-i18n' -import { messages, defaultLocale } from '@/locales' +import { messages, defaultLocale, locales, type Locale } from '@/locales' + +export const LOCALE_STORAGE_KEY = 'locale' export const i18n = createI18n({ legacy: false, @@ -8,6 +10,20 @@ export const i18n = createI18n({ messages, }) +export async function restoreSavedLocale() { + const { $ls } = await import('@/plugins/axios') + const value = await $ls.getValue(LOCALE_STORAGE_KEY) + if (value && locales.includes(value as Locale)) { + i18n.global.locale.value = value as Locale + } +} + +export async function saveLocale(locale: Locale) { + const { $ls } = await import('@/plugins/axios') + await $ls.setValue(LOCALE_STORAGE_KEY, locale) + i18n.global.locale.value = locale +} + export function useI18n() { return i18n.global }