This commit is contained in:
parent
69e94e58c4
commit
6593380013
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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 => {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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')})
|
||||||
|
|
Reference in New Issue
Block a user