看了上一篇博客嗎?咱們就根據那一篇博客來,用裏面的項目,進行咱們接下來國際化翻譯項目。
咱們安裝vue-i18n和js-cookiejavascript
npm install vue-i18n npm install js-cookie --save
第一步在main.js的js引入i18n
第二步創建src/locale文件夾,
vue
//en-US.js export default { "components": { // "langChange": 'Language switching' "langChange": 'Lang' } }
//zh-CN export default { "components": { "langChange": '語言' } }
//index.js import Vue from 'vue' import VueI18n from 'vue-i18n' import Cookies from 'js-cookie' import zhCNLocale from 'iview/src/locale/lang/zh-CN' import enUSLocale from 'iview/src/locale/lang/en-US' import zhCN from './lang/zh-CN' import enUS from './lang/en-US' Vue.use(VueI18n) const messages = { 'zh-CN':{ ...zhCN, ...zhCNLocale }, 'en-US':{ ...enUS, ...enUSLocale } } const getLanguage = function () { let lang = navigator.browerLanguage?navigator.browerLanguage:navigator.language||navigator.userLanguage lang = lang?lang:'zh-CN' if(Cookies.get('language')){ lang = Cookies.get('language') } return lang } const i18n = new VueI18n({ locale:getLanguage(), messages }) export default i18n
建立LangSelect.vue組件java
<template> <div> <Dropdown> <a href="javascript:void(0)"> {{$t('components.langChange')}} <Icon type="ios-arrow-down"></Icon> </a> <Dropdown-menu slot="list"> <!-- DropdownItem 這裏必須用 @click.native 綁定點擊事件 --> <Dropdown-item v-for="(item,key) in languages" :key="item.id" @click.native="changeLanguage(key)"> {{ item }} </Dropdown-item> </Dropdown-menu> </Dropdown> </div> </template> <script> export default { computed: { locale() { return this.$store.getters.language } }, mounted() { // this.currentLanguage = this.languages[this.locale]; }, data() { return { // currentLanguage: "", languages: { "zh-CN": "簡體中文", "en-US": "English" } }; }, methods: { changeLanguage(lang) { this.$i18n.locale = lang this.$store.dispatch('setLanguage', lang) this.currentLanguage = this.languages[this.locale]; } } }; </script> <style scoped> </style>
在store中添加狀態
ios
//action/index.js import setLanguage from './setLanguage.js' export default { setLanguage }
//setLanguage.js import Cookies from 'js-cookie' export default ({ commit, getters }, language) => { commit('updateLanguage', language) }
//getters/index.js import language from './language' export default { language }
//getters/language.js export default (state) => { return state.language }
//mutations/index.js import updateLanguage from './updateLanguage' export default { updateLanguage }
//mutations/updateLanguage.js import Cookies from 'js-cookie' export default (state,language) => { console.log('updateLang:'+language) state.language = language Cookies.set('language',language) }
//state/index.js import language from './language' export default { language }
//state/language import Cookies from 'js-cookie' export default Cookies.get('language') || 'zh-CN'
//store/index.js import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); import state from './state' import getters from './getters' import mutations from './mutations' import actions from './actions' export default new Vuex.Store({ state, getters, mutations, actions })
在HelloWorld中引入LangSelect組件vuex
<template> <div class="language-all"> <div class="langguage"> <lang-select class="right-menu-item"></lang-select> </div> </div> </template> <script> import {mapGetters} from 'vuex' import LangSelect from './LangSelect' export default { name: 'HelloWorld', components:{ 'lang-select':LangSelect } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> h3 { margin: 30px auto 20px 30px; } .device-list-con { padding: 10px; } .table-bar { margin: 30px 20px 10px 20px } .table-bar .search-input { width: 300px; } .table { margin: 0 20px 0 20px } </style>
咱們看一下頁面運行的效果
npm
你們能夠按照上面個人方法作,實現不了效果留言,我解答
裏面還存在一個很重要的東西沒有引用,看大家發現沒有。cookie