Как реализовать переход между двумя цветовыми темами, связанными с изменением языка?
Языки меняются с помощью Vuex Store.При смене языка необходимо изменить класс тела.
Состояние истории:
export default {
language: {
current: { name: 'en'},
available: [{ name: 'en' }, { name: 'ru' }]
}
}
Действие истории:
export default { ['app:language:change']({ commit }, language) {
commit('app:language:change', language); },
}
Мутация истории:
export default { ['app:language:change'](state, language) {
state.language.current = language; },
}
Изменение языка компонента
<tempalte v-for="(lang, index) in availableLanguages">
<span style="cursor: pointer;" v-on:click="() =>
onLanguageChange(lang)">{{ lang.name }}</span>
<span v-if="index !== availableLanguages.length - 1"> / </span>
</tempalte>
<script>
export default {
name: 'app-footer',
computed: {
language()
{return this.$store.state.language.current;},
availableLanguages()
{return this.$store.state.language.available;}
},
methods: {
onLanguageChange(lang) {
this.$store.dispatch('app:language:change', lang); }
}
}
</script>
Пример компонента, в котором изменяется язык
<template>
<h1> {{ language && title && title[language.name] }} </h1>
</template>
<script>
const ABOUT_DIC = {
title: {
en: 'About',
ru: 'Компания'
}
};
export default {
name: 'about',
data () {
return { title: ABOUT_DIC.title }
},
computed: {
language() {
return this.$store.state.language.current; }
}
}
</script>