fix: load the correct language
continuous-integration/drone/pr Build is failing Details

This commit is contained in:
kolaente 2023-06-12 18:01:56 +02:00
parent 69e94e58c4
commit 6593380013
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
5 changed files with 11 additions and 20 deletions

View File

@ -92,7 +92,7 @@ watch(userEmailConfirm, (userEmailConfirm) => {
router.push({name: 'user.login'})
}, { immediate: true })
setLanguage()
setLanguage(authStore.settings.language)
useColorScheme()
</script>

View File

@ -33,7 +33,7 @@ export const i18n = createI18n({
} as Record<SupportedLocale, any>,
})
export async function setLanguage(lang: SupportedLocale = getCurrentLanguage()): Promise<SupportedLocale | undefined> {
export async function setLanguage(lang: SupportedLocale): Promise<SupportedLocale | undefined> {
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 => {

View File

@ -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)

View File

@ -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<IUserSettings> implements IUserSettings {
@ -14,7 +14,7 @@ export default class UserSettingsModel extends AbstractModel<IUserSettings> impl
defaultProjectId = undefined
weekStart = 0 as IUserSettings['weekStart']
timezone = ''
language = getCurrentLanguage()
language = getBrowserLanguage()
frontendSettings: IFrontendSettings = {
playSoundWhenDone: true,
quickAddMagicMode: PrefixMode.Default,

View File

@ -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')})