vue3+Ant-design-vue3+i18n實(shí)現(xiàn)多語(yǔ)言切換功能
vue-i18n + Ant Design Vue locale + 本地緩存
這樣:
- 頁(yè)面文字切換
- Ant組件語(yǔ)言同步
- 日期組件語(yǔ)言同步
- 表格語(yǔ)言同步
- 分頁(yè)語(yǔ)言同步
- 刷新記住語(yǔ)言
這是生產(chǎn)項(xiàng)目標(biāo)準(zhǔn)方案。下面給你完整企業(yè)實(shí)現(xiàn)。
一、安裝依賴
npm install vue-i18n
Vue3:
必須:
npm install vue-i18n@9
二、創(chuàng)建語(yǔ)言目錄
推薦結(jié)構(gòu):
src/
locales/
zh-cn.js
zh-tw.js
en.js
index.js
三、語(yǔ)言文件
簡(jiǎn)體中文
// locales/zh-cn.js
export default {
menu:{
dashboard:"首頁(yè)",
factory:"工廠",
device:"設(shè)備",
sensor:"傳感器"
},
button:{
save:"保存",
cancel:"取消"
}
}繁體中文
// locales/zh-tw.js
export default {
menu:{
dashboard:"首頁(yè)",
factory:"工廠",
device:"設(shè)備",
sensor:"感測(cè)器"
},
button:{
save:"保存",
cancel:"取消"
}
}English
// locales/en.js
export default {
menu:{
dashboard:"Dashboard",
factory:"Factory",
device:"Device",
sensor:"Sensor"
},
button:{
save:"Save",
cancel:"Cancel"
}
}四、創(chuàng)建 i18n 配置
locales/index.js
import { createI18n } from 'vue-i18n'
import zhCN from './zh-cn'
import zhTW from './zh-tw'
import en from './en'
const i18n=createI18n({
legacy:false,
locale:
localStorage.getItem("lang")
||"zh-cn",
fallbackLocale:"en",
messages:{
"zh-cn":zhCN,
"zh-tw":zhTW,
"en":en
}
})
export default i18n五、main.js 注冊(cè)
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import i18n from './locales'
createApp(App)
.use(router)
.use(i18n)
.mount('#app')必須:
.use(i18n)
否則:$t 不生效
六、頁(yè)面使用
Vue3:
<script setup>
import { useI18n } from 'vue-i18n'
const { t }=useI18n()
</script>
<template>
<div>
{{t('menu.factory')}}
</div>
</template>不要:{{$t()}}
那是Vue2寫(xiě)法。
七、語(yǔ)言切換實(shí)現(xiàn)
創(chuàng)建:composables/useLang.js
import { useI18n } from 'vue-i18n'
export function useLang(){
const { locale }=useI18n()
const changeLang=(lang)=>{
locale.value=lang
localStorage.setItem(
"lang",
lang
)
}
return{
locale,
changeLang
}
}八、語(yǔ)言切換組件
例如 Header:
<script setup>
import { useLang } from '@/composables/useLang'
const {
locale,
changeLang
}=useLang()
</script>
<template>
<a-select
style="width:120px"
:value="locale"
@change="changeLang"
>
<a-select-option value="zh-cn">
簡(jiǎn)體中文
</a-select-option>
<a-select-option value="zh-tw">
繁體中文
</a-select-option>
<a-select-option value="en">
English
</a-select-option>
</a-select>
</template>九、Ant Design Vue 組件語(yǔ)言同步(重要)
Ant組件不會(huì)自動(dòng)跟隨。
需要:
import zhCN from 'ant-design-vue/es/locale/zh_CN' import zhTW from 'ant-design-vue/es/locale/zh_TW' import enUS from 'ant-design-vue/es/locale/en_US'
創(chuàng)建:utils/antdLocale.js
import zhCN from 'ant-design-vue/es/locale/zh_CN'
import zhTW from 'ant-design-vue/es/locale/zh_TW'
import enUS from 'ant-design-vue/es/locale/en_US'
export function getAntLocale(lang){
if(lang==="zh-cn"){
return zhCN
}
if(lang==="zh-tw"){
return zhTW
}
return enUS
}十、App.vue配置
<script setup>
import { useLang } from './composables/useLang'
import { getAntLocale } from './utils/antdLocale'
const { locale }=useLang()
</script>
<template>
<a-config-provider
:locale="getAntLocale(locale)"
>
<router-view/>
</a-config-provider>
</template>這樣:
Ant:
- Pagination
- Table
- DatePicker
- Modal
- Form
全部同步語(yǔ)言。
十一、企業(yè)推薦優(yōu)化(自動(dòng)檢測(cè)瀏覽器)
自動(dòng)選擇:
const lang=
localStorage.getItem("lang")
||
navigator.language
||
"en"轉(zhuǎn)換:
if(lang.includes("zh")){
locale="zh-cn"
}工業(yè)系統(tǒng)常見(jiàn)。
十二、企業(yè)推薦最終結(jié)構(gòu)
推薦:
src/
locales/
en.js
zh-cn.js
zh-tw.js
index.js
composables/
useLang.js
utils/
antdLocale.js
components/
LangSwitch.vue
大型項(xiàng)目必須模塊化。
十三、工業(yè)系統(tǒng)推薦增強(qiáng)(生產(chǎn)級(jí))
真實(shí)項(xiàng)目還會(huì)加:
- 動(dòng)態(tài)加載語(yǔ)言包
- 后端返回語(yǔ)言
- 權(quán)限菜單翻譯
- 表格列翻譯
- API錯(cuò)誤翻譯
- 日期格式翻譯
- moment dayjs同步
- Echarts語(yǔ)言同步
工業(yè)IoT必做:
設(shè)備狀態(tài):
在線 → Online
離線 → Offline
報(bào)警 → Alarm
統(tǒng)一語(yǔ)言包。
十四、企業(yè)級(jí)最終方案(推薦)
生產(chǎn)項(xiàng)目通常:
i18n/
modules/
menu.js
device.js
factory.js
sensor.js
alarm.js
common.js
不是一個(gè)文件。
否則幾萬(wàn)行
到此這篇關(guān)于vue3+Ant-design-vue3+i18n實(shí)現(xiàn)多語(yǔ)言切換功能的文章就介紹到這了,更多相關(guān)vue3多語(yǔ)言切換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Vue.js一些問(wèn)題和思考學(xué)習(xí)筆記(2)
這篇文章主要為大家分享了關(guān)于Vue.js一些問(wèn)題和思考的學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
vue項(xiàng)目兼容ie11的實(shí)現(xiàn)方法
本文主要介紹了vue項(xiàng)目兼容ie11的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
在vue中獲取微信支付code及code被占用問(wèn)題的解決方法
這篇文章主要介紹了在vue中獲取微信支付code及code被占用問(wèn)題的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04
vue開(kāi)發(fā)中如何在js文件里使用pinia和組件同步
在JavaScript文件中封裝涉及到使用Pinia的方法時(shí),發(fā)現(xiàn)Pinia和組件內(nèi)容并不同步,二者的狀態(tài)是獨(dú)立的,解決辦法是,在新建對(duì)象的時(shí)候,將Pinia作為參數(shù)傳入,本文給大家介紹vue開(kāi)發(fā)中如何在js文件里使用pinia和組件同步,感興趣的朋友一起看看吧2024-10-10
使用VUE+iView+.Net Core上傳圖片的方法示例
這篇文章主要介紹了使用VUE+iView+.Net Core上傳圖片的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01

