Вы можете передать this.$i18n
в качестве параметра для действия
actions: {
changeLanguage (context, payload) {
context.commit('changeLanguage')
payload.i18n.locale = payload.lang
}
}
В вашем компоненте есть место, где вы можете изменить:
onLanguageChange () {
this.changeLanguage({ lang: this.selectedLang, i18n: this.$i18n })
}
Больше мыслей
Вы также должны хранить lang
в localStorage.В случае, если пользователь жестко обновляет страницу, мы все равно можем загрузить язык из локального хранилища:
Что-то вроде:
const LANG_KEY = 'language'
const initLang = (() => {
let lang = window.localStorage.getItem(LANG_KEY) || window.navigator.language
return lang || 'en'
})()
const state = {
lang: initLang
}
const actions = {
changeLanguage ({ commit }, payload) {
commit('onLangChanged', payload)
}
}
const mutations = {
onLangChanged (state, payload) {
window.localStorage.setItem(LANG_KEY, payload.lang)
payload.i18n.locale = payload.lang
state.lang = payload.lang
}
}