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'}) router.push({name: 'user.login'})
}, { immediate: true }) }, { immediate: true })
setLanguage() setLanguage(authStore.settings.language)
useColorScheme() useColorScheme()
</script> </script>

View File

@ -33,7 +33,7 @@ export const i18n = createI18n({
} as Record<SupportedLocale, any>, } 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) { if (!lang) {
throw new Error() throw new Error()
} }
@ -54,17 +54,7 @@ export async function setLanguage(lang: SupportedLocale = getCurrentLanguage()):
return lang return lang
} }
export function getCurrentLanguage(): SupportedLocale { export function getBrowserLanguage(): 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)
}
const browserLanguage = navigator.language const browserLanguage = navigator.language
const language = Object.keys(SUPPORTED_LOCALES).find(langKey => { const language = Object.keys(SUPPORTED_LOCALES).find(langKey => {

View File

@ -16,7 +16,7 @@ import Notifications from '@kyvg/vue3-notification'
import './registerServiceWorker' import './registerServiceWorker'
// i18n // i18n
import {i18n, setLanguage} from './i18n' import {getBrowserLanguage, i18n, setLanguage} from './i18n'
declare global { declare global {
interface Window { 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 // 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. // language file is not yet loaded.
setLanguage().then(() => { const browserLanguage = getBrowserLanguage()
setLanguage(browserLanguage).then(() => {
const app = createApp(App) const app = createApp(App)
app.use(Notifications) app.use(Notifications)

View File

@ -1,7 +1,7 @@
import AbstractModel from './abstractModel' import AbstractModel from './abstractModel'
import type {IFrontendSettings, IUserSettings} from '@/modelTypes/IUserSettings' import type {IFrontendSettings, IUserSettings} from '@/modelTypes/IUserSettings'
import {getCurrentLanguage} from '@/i18n' import {getBrowserLanguage} from '@/i18n'
import {PrefixMode} from '@/modules/parseTaskText' import {PrefixMode} from '@/modules/parseTaskText'
export default class UserSettingsModel extends AbstractModel<IUserSettings> implements IUserSettings { export default class UserSettingsModel extends AbstractModel<IUserSettings> implements IUserSettings {
@ -14,7 +14,7 @@ export default class UserSettingsModel extends AbstractModel<IUserSettings> impl
defaultProjectId = undefined defaultProjectId = undefined
weekStart = 0 as IUserSettings['weekStart'] weekStart = 0 as IUserSettings['weekStart']
timezone = '' timezone = ''
language = getCurrentLanguage() language = getBrowserLanguage()
frontendSettings: IFrontendSettings = { frontendSettings: IFrontendSettings = {
playSoundWhenDone: true, playSoundWhenDone: true,
quickAddMagicMode: PrefixMode.Default, quickAddMagicMode: PrefixMode.Default,

View File

@ -2,7 +2,7 @@ import {computed, readonly, ref} from 'vue'
import {acceptHMRUpdate, defineStore} from 'pinia' import {acceptHMRUpdate, defineStore} from 'pinia'
import {AuthenticatedHTTPFactory, HTTPFactory} from '@/helpers/fetcher' import {AuthenticatedHTTPFactory, HTTPFactory} from '@/helpers/fetcher'
import {getCurrentLanguage, i18n, setLanguage} from '@/i18n' import {getBrowserLanguage, i18n, setLanguage} from '@/i18n'
import {objectToSnakeCase} from '@/helpers/case' import {objectToSnakeCase} from '@/helpers/case'
import UserModel, {getAvatarUrl, getDisplayName} from '@/models/user' import UserModel, {getAvatarUrl, getDisplayName} from '@/models/user'
import UserSettingsService from '@/services/userSettings' import UserSettingsService from '@/services/userSettings'
@ -284,7 +284,7 @@ export const useAuthStore = defineStore('auth', () => {
await saveUserSettings({ await saveUserSettings({
settings: { settings: {
...settings.value, ...settings.value,
language: getCurrentLanguage(), language: settings.value.language ? settings.value.language : getBrowserLanguage(),
}, },
showMessage: false, showMessage: false,
}) })
@ -333,7 +333,7 @@ export const useAuthStore = defineStore('auth', () => {
try { try {
const updateSettingsPromise = userSettingsService.update(settings) const updateSettingsPromise = userSettingsService.update(settings)
setUserSettings({...settings}) setUserSettings({...settings})
await setLanguage() await setLanguage(settings.language)
await updateSettingsPromise await updateSettingsPromise
if (showMessage) { if (showMessage) {
success({message: i18n.global.t('user.settings.general.savedSuccess')}) success({message: i18n.global.t('user.settings.general.savedSuccess')})