From 6593380013ff6043b846126ac67e6f96442a1c5b Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 12 Jun 2023 18:01:56 +0200 Subject: [PATCH] fix: load the correct language --- src/App.vue | 2 +- src/i18n/index.ts | 14 ++------------ src/main.ts | 5 +++-- src/models/userSettings.ts | 4 ++-- src/stores/auth.ts | 6 +++--- 5 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/App.vue b/src/App.vue index 79fa63a46..175ba1dbf 100644 --- a/src/App.vue +++ b/src/App.vue @@ -92,7 +92,7 @@ watch(userEmailConfirm, (userEmailConfirm) => { router.push({name: 'user.login'}) }, { immediate: true }) -setLanguage() +setLanguage(authStore.settings.language) useColorScheme() diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 8feef3970..491a0f3f1 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -33,7 +33,7 @@ export const i18n = createI18n({ } as Record, }) -export async function setLanguage(lang: SupportedLocale = getCurrentLanguage()): Promise { +export async function setLanguage(lang: SupportedLocale): Promise { if (!lang) { throw new Error() } @@ -54,17 +54,7 @@ export async function setLanguage(lang: SupportedLocale = getCurrentLanguage()): return lang } -export function getCurrentLanguage(): SupportedLocale { - try { - const authStore = useAuthStore() - if (authStore.settings.language !== null) { - return authStore.settings.language - } - } catch (e) { - // This may happen on the very first load of Vikunja because setting the language is attempted very early in the lifecycle - console.debug('could not load language from store:', e) - } - +export function getBrowserLanguage(): SupportedLocale { const browserLanguage = navigator.language const language = Object.keys(SUPPORTED_LOCALES).find(langKey => { diff --git a/src/main.ts b/src/main.ts index 3b2389e65..586839b86 100644 --- a/src/main.ts +++ b/src/main.ts @@ -16,7 +16,7 @@ import Notifications from '@kyvg/vue3-notification' import './registerServiceWorker' // i18n -import {i18n, setLanguage} from './i18n' +import {getBrowserLanguage, i18n, setLanguage} from './i18n' declare global { interface Window { @@ -56,7 +56,8 @@ import Card from '@/components/misc/card.vue' // We're loading the language before creating the app so that it won't fail to load when the user's // language file is not yet loaded. -setLanguage().then(() => { +const browserLanguage = getBrowserLanguage() +setLanguage(browserLanguage).then(() => { const app = createApp(App) app.use(Notifications) diff --git a/src/models/userSettings.ts b/src/models/userSettings.ts index cf996278b..397963dff 100644 --- a/src/models/userSettings.ts +++ b/src/models/userSettings.ts @@ -1,7 +1,7 @@ import AbstractModel from './abstractModel' import type {IFrontendSettings, IUserSettings} from '@/modelTypes/IUserSettings' -import {getCurrentLanguage} from '@/i18n' +import {getBrowserLanguage} from '@/i18n' import {PrefixMode} from '@/modules/parseTaskText' export default class UserSettingsModel extends AbstractModel implements IUserSettings { @@ -14,7 +14,7 @@ export default class UserSettingsModel extends AbstractModel impl defaultProjectId = undefined weekStart = 0 as IUserSettings['weekStart'] timezone = '' - language = getCurrentLanguage() + language = getBrowserLanguage() frontendSettings: IFrontendSettings = { playSoundWhenDone: true, quickAddMagicMode: PrefixMode.Default, diff --git a/src/stores/auth.ts b/src/stores/auth.ts index 5fe205ff1..ade6e0908 100644 --- a/src/stores/auth.ts +++ b/src/stores/auth.ts @@ -2,7 +2,7 @@ import {computed, readonly, ref} from 'vue' import {acceptHMRUpdate, defineStore} from 'pinia' import {AuthenticatedHTTPFactory, HTTPFactory} from '@/helpers/fetcher' -import {getCurrentLanguage, i18n, setLanguage} from '@/i18n' +import {getBrowserLanguage, i18n, setLanguage} from '@/i18n' import {objectToSnakeCase} from '@/helpers/case' import UserModel, {getAvatarUrl, getDisplayName} from '@/models/user' import UserSettingsService from '@/services/userSettings' @@ -284,7 +284,7 @@ export const useAuthStore = defineStore('auth', () => { await saveUserSettings({ settings: { ...settings.value, - language: getCurrentLanguage(), + language: settings.value.language ? settings.value.language : getBrowserLanguage(), }, showMessage: false, }) @@ -333,7 +333,7 @@ export const useAuthStore = defineStore('auth', () => { try { const updateSettingsPromise = userSettingsService.update(settings) setUserSettings({...settings}) - await setLanguage() + await setLanguage(settings.language) await updateSettingsPromise if (showMessage) { success({message: i18n.global.t('user.settings.general.savedSuccess')})