我还是 Vue 的新手,但我觉得我几乎掌握了它。我设法创建了一个可以翻译成不同语言的应用程序,其中的内容是从 LANG.json 文件加载的。问题是每当我改变一个新的观点时,它就会回到原来的翻译..
所以我尝试将 Vuex 集成到我的应用程序中,但我似乎无法让它工作..
我相信这是所有相关的代码:
src/i18n/index.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import store from './../store'
Vue.use(VueI18n)
export default new VueI18n({
locale: store.state.Language,
messages: {
'en': require('./en.json'),
'cn': require('./cn.json')
}
})
src/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const actions = {
changeLanguage: ({ commit }, data) => commit('changeLanguage', data)
}
const mutations = {
changeLanguage (state, data) {
this.state.Language = data
}
}
const getters = {
getLanguage: state => state.Language
}
const state = {
Language: 'en'
}
export default new Vuex.Store({
state,
getters,
actions,
mutations
})
src/main.js
[...]
import store from './store'
import i18n from './i18n'
[...]
new Vue({
el: '#app',
router,
store,
i18n,
render: h => h(App)
})
src/components/randomfile.js
<template>
[...]
<button v-on:click="en">English</button>
<button v-on:click="cn">Chinese</button>
</template>
<script>
export default {
name: 'navFooter',
data () {
return {
}
},
methods: {
en: function () {
console.log('change lang')
this.$store.dispatch('changeLanguage', 'en')
// this.$i18n.locale = 'en'
},
cn: function () {
this.$store.dispatch('changeLanguage', 'cn')
// this.$i18n.locale = 'cn'
}
}
}
</script>
我猜这个问题要么与这一行有关:locale: store.state.Language
,要么是因为我在调度方面做错了,因为在我的一个视图中我写了{{$store.state.Language}}
,它呈现到en
页面加载,但在我点击按钮后消失了调用调度方法。
我用它来调用翻译,{{ $t('views.home.title') }}
但我很确定在集成 vuex(存储)之后仍然应该调用它们,并且翻译确实按应有的方式显示,只是在单击发送 changeLanguage 的按钮后它们不会更新。
任何帮助将非常感激
编辑:实际上,似乎我翻译的方式确实有所不同..在将其更改为{{ $t('views.home.title', $store.state.Language) }}
(也许应该是this.$store.state.Language
?)之后,翻译又开始工作了..但翻译状态仍然不是持久的(意味着如果我刷新页面或者打开一个新的网址,然后它会变回英文翻译...
任何想法为什么会这样?