vue2+element-ui使用vue-i18n進(jìn)行國際化的多語言/國際化詳細(xì)教程
安裝包
注意:vue2.0要用8版本的,使用9版本的會(huì)報(bào)錯(cuò)
npm install vue-i18n@8.27.0 --save
創(chuàng)建相關(guān)的語言包文件
在src目錄下,創(chuàng)建新的文件夾,命名為i18n
在文件夾i18n中新建langs文件夾,里邊放語言文件.js
zh.js:存放所有的中文顯示內(nèi)容
en.js:存放所有的英文顯示內(nèi)容
與langs文件夾同級(jí),創(chuàng)建index.js:用于配置i18n,并導(dǎo)出i18n
zh.js
export default { //中文 msg: { msg1: '測(cè)試一', msg2: '測(cè)試二', msg3: '測(cè)試三', message: "第一個(gè)值", display: "第二個(gè)值", // 材料列表的材料類型 materialType: { nameSteel: '鋼材', nameAlumialloy: '鋁合金', nameCfrp: '碳纖維復(fù)合材料', nameSoft: '軟材料', nameOther: '其他', }, } }
en.js
export default { //英文 msg: { msg1: 'test one', msg2: 'test two', msg3: 'test three', message: "first value", display: "second value", // 材料列表的材料類型 materialType: { nameSteel: 'Steel', nameAlumialloy: 'Aluminum alloy', nameCfrp: 'Carbon Fiber Composites', nameSoft: 'Soft Materials', nameOther: 'Other', }, } }
index.js
import Vue from "vue" import VueI18n from "vue-i18n" //引入自定義語言配置 import zh from './langs/zh' import en from './langs/en' //引入U(xiǎn)I框架語言配置---elementui import ElementLocale from 'element-ui/lib/locale' import enLocale from 'element-ui/lib/locale/lang/en' import zhLocale from 'element-ui/lib/locale/lang/zh-CN' ElementLocale.i18n((key, value) => i18n.t(key, value)) //為了實(shí)現(xiàn)element插件的多語言切換 Vue.use(VueI18n); // 全局注冊(cè)國際化包 // 準(zhǔn)備翻譯的語言環(huán)境信息 const i18n = new VueI18n({ locale: localStorage.getItem('lang') || "zh", //將語言標(biāo)識(shí)存入localStorage或sessionStorage中,頁面刷新不會(huì)默認(rèn)中文顯示 messages: { // 中文語言包 'zh': { ...zh, ...zhLocale }, //英文語言包 'en': { ...en, ...enLocale } }, silentTranslationWarn: true, //解決vue-i18n黃色警告"value of key 'xxx' is not a string"和"cannot translate the value of keypath 'xxx'.use the value of keypath as default",可忽略 globalInjection: true, // 全局注入 fallbackLocale: 'zh', // 指定的locale沒有找到對(duì)應(yīng)的資源或當(dāng)前語種不存在時(shí),默認(rèn)設(shè)置當(dāng)前語種為中文 }); export default i18n
在main里導(dǎo)入語言包文件
main.js
import Vue from 'vue' import App from './App.vue' import router from './router' import ELEMENT from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import 'element-ui/lib/theme-chalk/display.css' import i18n from './i18n' ... // Vue.use(ELEMENT) Vue.use(ELEMENT, { i18n: (key, value) => i18n.t(key, value) // 在注冊(cè)Element時(shí)設(shè)置i18n的處理方法,可以實(shí)現(xiàn)當(dāng)點(diǎn)擊切換按鈕后,elementUI可以自動(dòng)調(diào)用.js語言文件實(shí)現(xiàn)多語言切換 } ) ... new Vue({ router, store, i18n, render: h => h(App) }).$mount('#app')
基本使用
使用方式一
<!-- 使用方式一,在模板字符串中使用 --> <h1>使用方式一:</h1> <h4>{{ $t('msg.msg1') }}</h4>
效果圖
使用方式二
<!-- 使用方式二,綁定屬性使用 --> <h1>使用方式二:</h1> <h4 v-text="$t('msg.msg2')"></h4> <el-input :placeholder="$t('msg.msg2')"></el-input>
效果圖
使用方式三
在
<template> <!-- 使用方式三,在script標(biāo)簽內(nèi)的data中先聲明變量,然后獲取到值,最后渲染到html中 --> <h1>使用方式三:</h1> <h4>{{ title }}</h4> <h4 v-text="title"></h4> <!-- 標(biāo)簽頁--> <el-tabs @tab-click = "handleClick"> <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getSteel"> </el-tab-pane> <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getAlumialloy"> </el-tab-pane> <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getCfrp"> </el-tab-pane> <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getSoft"> </el-tab-pane> <el-tab-pane :label = "materialType[0].name" :name = "materialType[0].id" v-model="getOther"> </el-tab-pane> </el-tabs> </template> <script> export default { name: '', // 在data節(jié)點(diǎn)中使用 data () { return { title: this.$t('msg.msg3'), //this.$i18n.t('')也行 // 標(biāo)簽頁 materialType: [ { id: '1', // name: '鋼材' name: this.$t('msg.materialType.nameSteel') }, { id: '2', // name: '鋁合金' name: this.$t('msg.materialType.nameAlumialloy') }, { id: '3', // name: '碳纖維復(fù)合材料' name: this.$t('msg.materialType.nameCfrp') }, { id: '4', // name: '軟材料' name: this.$t('msg.materialType.nameSoft') }, { id: '5', // name: '其他' name: this.$t('msg.materialType.nameOther') } ], } }, // 在methods節(jié)點(diǎn)中使用 methods: { console.log(this.$t('msg.materialType.nameOther')) }, // 在 computed節(jié)點(diǎn)中使用 computed: { infoX() { return this.$t('msg.materialDetailsTitle3.infoX') }, }, mounted() {}, } </script>
效果圖`
注意:這種方式存在更新this.$i18n.locale的值時(shí)無法自動(dòng)切換的問題,需要刷新頁面才能切換語言。解決辦法主要有兩種:
解決辦法一:調(diào)整寫法
錯(cuò)誤的寫法為:
正確的寫法為:
解決方法二:寫在計(jì)算屬性computed:{…}中,不要寫在data(){return{…}}中
請(qǐng)查看官方討論貼,官方回復(fù)https://github.com/kazupon/vue-i18n/issues/271
使用方式四
<!-- 使用方式四,msgss存在多個(gè)值,使用了模板字符串,拿到msgss的值再拼接,構(gòu)成msg.message或者msg.display --> <h1>使用方式四:存在多個(gè)值之間的切換</h1> <h4>{{ $t(`msg.${msgss}`) }}</h4> <button @click="changeWord">切換按鈕</button> data () { return { // 定義變量用于切換不同的值,對(duì)應(yīng)著en.js和zh.js中的message和display msgss:'message' } }, methods: { // 用于不同的值 changeWord() { if(this.msgss === 'message'){ this.msgss = 'display' } else { this.msgss = 'message' } } }
效果圖
使用方式五
<!-- 使用elementui的翻譯包 --> <h1>使用方式五:elementui的翻譯包</h1> <h4>{{$t('el.colorpicker.confirm')}}</h4>
在‘node_modules/_element-ui@2.15.13@element-ui/lib/locale/lang中有elementui組件庫提供的語言包文件
效果圖
切換語言
<!-- 切換語言 --> <h1>切換語言方式</h1> <button @click="switchLang">切換語言</button> <el-select @change="langChange" placeholder="請(qǐng)選擇語言"> <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> options:[ { value:'zh', label:'中文' }, { value: 'en', label: 'English' } ], switchLang(){ // 讀取緩存 let lang = localStorage.getItem('lang') ? localStorage.getItem('lang') : 'zh' if (lang === 'zh') { this.$i18n.locale = 'en' localStorage.setItem('lang', 'en') // en表示英文,zh表示中文,可根據(jù)自己喜好設(shè)定,盡量通俗易懂 } else { this.$i18n.locale = 'zh' localStorage.setItem('lang', 'zh') } location.replace(location) //刷新網(wǎng)頁 }, langChange(e){ // this.$nextTick無法修改方式三 this.$nextTick(() => { localStorage.setItem('lang', e) this.$i18n.locale = e }) // location.replace(location) },
總結(jié)
到此這篇關(guān)于vue2+element-ui使用vue-i18n進(jìn)行國際化的多語言/國際化的文章就介紹到這了,更多相關(guān)vue2 vue-i18n國際化多語言內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
el-date-picker如何篩選時(shí)間日期選擇范圍
這篇文章主要介紹了el-date-picker篩選時(shí)間日期選擇范圍,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2024-12-12vue ssr 實(shí)現(xiàn)方式(學(xué)習(xí)筆記)
這篇文章主要介紹了vue ssr 實(shí)現(xiàn)方式(學(xué)習(xí)筆記),本文不涉及到源碼解析,主要講解如何實(shí)現(xiàn) vue 的服務(wù)端渲染,比較適合 vue-ssr 小白閱讀,感興趣的小伙伴們可以參考一下2019-01-01vuejs數(shù)據(jù)超出單行顯示更多,點(diǎn)擊展開剩余數(shù)據(jù)實(shí)例
這篇文章主要介紹了vuejs數(shù)據(jù)超出單行顯示更多,點(diǎn)擊展開剩余數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05詳解Vue CLI 3.0腳手架如何mock數(shù)據(jù)
這篇文章主要介紹了詳解Vue CLI 3.0腳手架如何mock數(shù)據(jù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11Vue淺析axios二次封裝與節(jié)流及防抖的實(shí)現(xiàn)
axios是基于promise的HTTP庫,可以使用在瀏覽器和node.js中,它不是vue的第三方插件,vue-axios是axios集成到Vue.js的小包裝器,可以像插件一樣安裝使用:Vue.use(VueAxios,?axios),本文給大家介紹axios的二次封裝和節(jié)流與防抖2022-08-08vue實(shí)現(xiàn)循環(huán)滾動(dòng)圖片
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)循環(huán)滾動(dòng)圖片,多圖片輪播,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07springboot+vue+對(duì)接支付寶接口+二維碼掃描支付功能(沙箱環(huán)境)
這篇文章主要介紹了springboot+vue+對(duì)接支付寶接口+二維碼掃描支付(沙箱環(huán)境),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10