許多項目需要做語言國際化抑进,那就可以用到i18n了,在vue 中用到的插件是vue-i18n
1.安裝依賴包
npm install vue-i18n
或者
yarn add vue-i18n
2.創(chuàng)建語言包睡陪、i18n實例對象寺渗,并在main.js中引入:
|-- main.js 導入文件
|-- i18n
|-- index.js 創(chuàng)建實例對象
|-- languages 各種語言包
|-- en_us.json 英文包
|-- id_us.json 中文包
i18n/index.js匿情,創(chuàng)建i18n實例對象,代碼如下:
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
// 注冊i18n實例并引入語言文件
const i18n = new VueI18n({
locale: 'zh',
messages: {
'zh': require('./languages/zh_cn'),
'en': require('./languages/en_us')
}
})
export default i18n
接下來我們就需要新建兩個js文件(或者josn文件)作為語言包信殊。
其中zh.js中文包中代碼為i18n/languages/zh:
module.exports = {
message: {
login: '歡迎登錄',
lang:{
zh: '中文',
en: '英文'
}
}
}
其中en.js英文包中代碼為i18n/languages/en:
module.exports = {
message: {
login: 'Welcome To Login',
lang: {
zh: 'Chinese',
en: 'English'
}
}
}
將i18n實例對象掛載到Vue實例之上:main.js
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
import "@/assets/plugins/element-ui";
import i18n from '@/assets/plugins/i18n';
new Vue({
i18n, // 掛載到Vue實例之上
router,
store,
render: (h) => h(App),
}).$mount("#app");
3.實現(xiàn)中英文切換按鈕炬称,代碼如下:
<template>
<div>
<el-dropdown
class="languageBox"
trigger="click"
placement="bottom-end"
@command="changeLanguage"
>
<el-button class="languageBtn">
<div class="languageBtnBox">
<img v-lazy="currentLanguage.icon" class="languageImg" />
<span>{{ currentLanguage.label }}</span>
<i class="el-icon-arrow-down el-icon--right"></i>
</div>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
v-for="item in languages"
:key="item.index"
:command="item.value"
>
<div class="languageItem">
<img :src="item.icon" alt="" />
<span>{{ item.label }}</span>
</div>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</template>
<script>
import Vue from "vue";
export default {
data() {
return {
language: "zh",
};
},
computed: {
currentLanguage() {
return this.languages.find((item) => {
return item.value === this.$i18n.locale;
});
},
},
mounted() {
this.$i18n.locale = this.$store.state.language;
},
methods:{
changeLanguage(locale) {
this.$i18n.locale = locale
}
},
};
</script>