欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在vue3項(xiàng)目中實(shí)現(xiàn)國(guó)際化的代碼示例

 更新時(shí)間:2023年07月14日 11:54:45   作者:前端隨想  
國(guó)際化就是指在一個(gè)項(xiàng)目中,項(xiàng)目中的語(yǔ)言可以進(jìn)行切換(中英文切換),那么在實(shí)際項(xiàng)目中是如何實(shí)現(xiàn)的呢,本文就給大家詳細(xì)的介紹實(shí)現(xiàn)方法,需要的朋友可以參考下

首先我們進(jìn)行一下最終效果的展示:

了解國(guó)際化的實(shí)現(xiàn)思路????

首先在正式的實(shí)現(xiàn)國(guó)際化之前,我們不妨先來(lái)了解一下實(shí)現(xiàn)國(guó)際化的思路:

//定義msg值的數(shù)據(jù)源
const messages={
 ? en:{
 ? msg:"hello world"
 }
 ?zh:{
 ? msg:"你好世界"
 }
}
//定義切換變量
let locale="en";
//3.定義賦值函數(shù)
function t(key){
 ? ?return messages[locale][key]
}

講解一些國(guó)際化的實(shí)現(xiàn)方式,其實(shí)就是定義了一個(gè)對(duì)象,然后在這個(gè)對(duì)象中包含兩種(當(dāng)然也可以是多種)語(yǔ)言,比如在這里這個(gè)messages對(duì)象中就包含兩個(gè)對(duì)象分別文enzh,這兩個(gè)對(duì)象中都有同一個(gè)屬性msg,zh中對(duì)應(yīng)的是中文,而en對(duì)應(yīng)的就是英文,

我們?cè)诔跏嫉臅r(shí)候定義一個(gè)locale變量,并且指定變量值為"en",同時(shí)我們還定義了一個(gè)函數(shù),這個(gè)函數(shù)接收一個(gè)key值,我們可以理解為這個(gè)key是想要獲取的gu國(guó)際化處理的變量值,比如在這個(gè)例子里面這個(gè)key就代表著 ”msg“,這樣我們只需要修改locale的值就可以獲取不同語(yǔ)言下的msg的值了,這就實(shí)現(xiàn)了國(guó)際化

在項(xiàng)目開(kāi)發(fā)中使用國(guó)際化??‍♀???‍♀?

初始化配置

在了解了國(guó)際化的原理之后,其實(shí)實(shí)現(xiàn)國(guó)際化的原理并不復(fù)雜,那么我們?cè)趯?shí)際項(xiàng)目中是如何做的呢?

在開(kāi)發(fā)過(guò)程中,一般我們需要借助第三方的包來(lái)實(shí)現(xiàn)。

首先安裝指定的包

npm i vue-i18n@next

對(duì)于國(guó)際化我們實(shí)現(xiàn)分為一下幾個(gè)步驟:

  • 創(chuàng)建一個(gè)組件用于修改locale
  • 配置修改element-plus的語(yǔ)言包
  • 創(chuàng)建并導(dǎo)入自定義的語(yǔ)言包

在安裝指定的包之后我在實(shí)際項(xiàng)目中是這樣處理的:

  • 首先在src文件下面創(chuàng)建一個(gè)i18n文件夾專(zhuān)門(mén)用來(lái)處理國(guó)際化的問(wèn)題
  • 然后在里面新建index.js文件
  • 并且建立一個(gè)文件夾名稱(chēng)為lang,專(zhuān)門(mén)用來(lái)存放自定義的語(yǔ)言包
import { createI18n } from "vue-i18n";
//這是我自己創(chuàng)建的語(yǔ)言包
import mZhLocale from "./lang/zh";
import mEnLocale from "./lang/en";
//這里使用了vuex來(lái)進(jìn)行全局的數(shù)據(jù)共享
import store from "@/store";
//創(chuàng)建messages對(duì)象,里面注冊(cè)相應(yīng)的語(yǔ)言包,這里面我注冊(cè)了自己定義的語(yǔ)言包
const messages = {
 ?en: {
 ? ?...mEnLocale,
  },
 ?zh: {
 ? ?...mZhLocale,
  },
};
// 進(jìn)行持久化處理,防止在頁(yè)面刷新之后數(shù)據(jù)丟失
const getLanguage = () => {
 ?return store && store.getters && store.getters.language;
};
const i18n = createI18n({
 ?legacy: false, // 使用composition API
 ?locale: getLanguage(),//初始的時(shí)候調(diào)用這個(gè)函數(shù)獲取vuex中的數(shù)據(jù),當(dāng)然vuex初始數(shù)據(jù)調(diào)用localstorage中存儲(chǔ)的數(shù)據(jù),或者默認(rèn)賦值為”zh“
 ?globalInjection: true, ?// 表明使用全局t函數(shù)
 ?messages,
});
export default i18n;//將i18函數(shù)導(dǎo)出

我們?cè)趇ndex.js中進(jìn)行i18函數(shù)的創(chuàng)建和導(dǎo)出,注冊(cè)使用了自己定義的語(yǔ)言包,我們導(dǎo)出之后還需要在main.js中進(jìn)行注冊(cè)使用

main.js中

import App from "./App.vue";
import i18n from "@/i18n/index";
const app = createApp(App);
app.use(i18n);

在進(jìn)行注冊(cè)完之后我們還要在項(xiàng)目中對(duì)要展示的文字的部分進(jìn)行如下的修改,因此我們要使用$t函數(shù)

在項(xiàng)目中使用

其中的navBar.home則是在語(yǔ)言包中定義的數(shù)據(jù) 例如在英語(yǔ)語(yǔ)言包中:

export default{
 navBar:{
 ? home:"Home"
 }
}

在中文語(yǔ)言包中就會(huì)有一個(gè)對(duì)應(yīng)的中文數(shù)據(jù)

export default{
 navBar:{
 ? home:"主頁(yè)"
 }
}

這里只是做一個(gè)實(shí)例。

<span>{{ $t("navBar.home") }}</span>

t函數(shù)的第一種使用方式,我們當(dāng)然還會(huì)遇到其他的情況。

就比如說(shuō)是在登錄注冊(cè)頁(yè)面中的輸入框我們也想要使用t函數(shù)來(lái)進(jìn)行國(guó)際化的處理:

 <el-input :placeholder="$t('login.inputName')"></el-input>

沒(méi)有發(fā)生太大的變化,只是要注意一下,當(dāng)然我們有的時(shí)候可能需要封裝一個(gè)函數(shù),然后在函數(shù)中我們封裝了國(guó)際化的相關(guān)需求,這個(gè)時(shí)候如何做呢?

其實(shí)也不復(fù)雜,比如我們封裝了一個(gè)函數(shù)用來(lái)處理sideBarItem中的標(biāo)題。

import i18n from "@/i18n";
// 根據(jù)這個(gè)函數(shù)來(lái)處理面包屑和sidebar
export const generateTitle = (title) => {
 ?return i18n.global.t("route." + title);
};

這里面我們導(dǎo)入了之前創(chuàng)建的I18n文件夾下面的idnex.js文件,注意最后我們?cè)诤瘮?shù)返回值上面通過(guò)i18n.global.t()來(lái)將相應(yīng)的值返回。

element-plus組件中的國(guó)際化處理????

在上面的說(shuō)明中我們只是配置了自定義的語(yǔ)言包處理,那么我們?nèi)绾翁幚韊lement-plus中的組件的國(guó)際化處理呢?

在element-plus的給出的方案中,我們一般這么處理:

  • 在APP.vue中使用el-config-provider組件將router-view標(biāo)簽包裹
  • 其次我們需要給locale定義值,這里我們同樣還是使用vuex中的共享數(shù)據(jù)來(lái)進(jìn)行定義,判斷vuex中的存儲(chǔ)的值,如果是zh的化就配置中文語(yǔ)言包,否則就是英文語(yǔ)言包。
  • 我們需要導(dǎo)入element-plus自帶的語(yǔ)言包來(lái)進(jìn)行相應(yīng)的處理。
<template>
 ?<el-config-provider :locale="$store.getters.language === 'zh' ? ZhCn : En">
 ? ?<router-view></router-view>
 ?</el-config-provider>
</template>
<script setup>
import En from "element-plus/lib/locale/lang/en";
import ZhCn from "element-plus/lib/locale/lang/zh-cn";
</script>

這樣當(dāng)我們vuex中的數(shù)據(jù)發(fā)生變化的時(shí)候,element-plus中的語(yǔ)言也會(huì)發(fā)生相應(yīng)的變化。

封裝語(yǔ)言切換組件

當(dāng)然為了切換語(yǔ)言我封裝了一個(gè)組件LangSelect:

<template>
 ?<div>
 ? ?<el-dropdown trigger="click" @command="handleSetLanguage">
 ? ? ?<div>
 ? ? ? ?<el-tooltip content="國(guó)際化">
 ? ? ? ? ?<div><svg-icon icon="language"></svg-icon></div>
 ? ? ? ?</el-tooltip>
 ? ? ?</div>
 ? ? ?<template #dropdown>
 ? ? ? ?<el-dropdown-menu>
 ? ? ? ? ?<el-dropdown-item command="zh" :disabled="language === 'zh'"
 ? ? ? ? ? ?>中文</el-dropdown-item
 ? ? ? ? ?>
 ? ? ? ? ?<el-dropdown-item command="en" :disabled="language === 'en'"
 ? ? ? ? ? ?>English</el-dropdown-item
 ? ? ? ? ?>
 ? ? ? ?</el-dropdown-menu>
 ? ? ?</template>
 ? ?</el-dropdown>
 ?</div>
</template>
<script setup>
import { computed } from "vue";
import { useStore } from "vuex";
import { useI18n } from "vue-i18n";
import { ElMessage } from "element-plus";
const store = useStore();
// 實(shí)例化i18
const i18 = useI18n();
const language = computed(() => store.getters.language);
// 進(jìn)行語(yǔ)言切換
const handleSetLanguage = (lang) => { ? ?
 ?i18.locale.value = lang;
 ?store.commit("app/setLanguage", lang);
 ?ElMessage.success("更新完成");
 ?console.log(lang);
};
</script>

注意這里我們使用了useI18n這個(gè)函數(shù)來(lái)進(jìn)行實(shí)例化,然后我們定義了一個(gè)函數(shù)handleSetLanguage,用來(lái)切換語(yǔ)言,

  • 在函數(shù)內(nèi)部,通過(guò)修改i18.locale.value的值來(lái)更新當(dāng)前語(yǔ)言。
  • 然后調(diào)用store.commit方法來(lái)觸發(fā)名為"setLanguage"的Vuex mutation,更新store中的語(yǔ)言狀態(tài)。
  • 使用computed函數(shù)創(chuàng)建名為language的計(jì)算屬性,language屬性依賴(lài)于store.getters.language,即從Vuex store的language`的getters中獲取當(dāng)前語(yǔ)言。

vuex中的數(shù)據(jù)

export default {
state: {
 ? ?// 獲取緩存中的顯示文字類(lèi)型,如果為空默認(rèn)為中文
 ? ?language: getItem(LANG) || "zh",
  },
 ? ?mutations: {
 ? ?//通過(guò)這個(gè)方法來(lái)修改vuex中的數(shù)據(jù)
 ? ?setLanguage(state, lang) {
 ? ? ?// 給緩存中添加數(shù)據(jù)
 ? ? ?setItem(LANG, lang);
 ? ? ?state.language = lang;
 ?  },
  },
  }

到此這篇關(guān)于在vue3項(xiàng)目中實(shí)現(xiàn)國(guó)際化的代碼示例的文章就介紹到這了,更多相關(guān)vue3項(xiàng)目國(guó)際化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue.extend與vue.component的區(qū)別和聯(lián)系

    vue.extend與vue.component的區(qū)別和聯(lián)系

    這篇文章主要介紹了vue.extend與vue.component的區(qū)別和聯(lián)系,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-09-09
  • 利用vue實(shí)現(xiàn)模態(tài)框組件

    利用vue實(shí)現(xiàn)模態(tài)框組件

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)模態(tài)框組件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • vue3動(dòng)態(tài)路由解決刷新頁(yè)面空白或跳轉(zhuǎn)404問(wèn)題

    vue3動(dòng)態(tài)路由解決刷新頁(yè)面空白或跳轉(zhuǎn)404問(wèn)題

    這篇文章主要為大家詳細(xì)介紹了vue3如何通過(guò)動(dòng)態(tài)路由解決刷新頁(yè)面空白或跳轉(zhuǎn)404問(wèn)題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-01-01
  • Vue-cli3中如何引入ECharts并實(shí)現(xiàn)自適應(yīng)

    Vue-cli3中如何引入ECharts并實(shí)現(xiàn)自適應(yīng)

    這篇文章主要介紹了Vue-cli3中如何引入ECharts并實(shí)現(xiàn)自適應(yīng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue3?Table分頁(yè)保留選中狀態(tài)代碼示例

    vue3?Table分頁(yè)保留選中狀態(tài)代碼示例

    這篇文章主要給大家介紹了關(guān)于vue3?Table分頁(yè)保留選中狀態(tài)的相關(guān)資料,vue table組件是一個(gè)非常方便的表格組件,它可以幫助我們實(shí)現(xiàn)分頁(yè)和選中功能,需要的朋友可以參考下
    2023-08-08
  • 如何解決.vue文件url引用文件的問(wèn)題

    如何解決.vue文件url引用文件的問(wèn)題

    這篇文章主要介紹了解決.vue文件url引用文件的問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 詳解Nuxt.js中使用Element-UI填坑

    詳解Nuxt.js中使用Element-UI填坑

    這篇文章主要介紹了詳解Nuxt.js中使用Element-UI填坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vue el-radio單選傳值和默認(rèn)選中方式

    vue el-radio單選傳值和默認(rèn)選中方式

    文章介紹了一個(gè)父組件和子組件的交互過(guò)程,父組件通過(guò)點(diǎn)擊“關(guān)聯(lián)公司”輸入框彈出子組件dialog,子組件中使用SelectCompany.vue實(shí)現(xiàn)默認(rèn)選中功能,作者分享了個(gè)人經(jīng)驗(yàn),希望能對(duì)大家有所幫助
    2025-01-01
  • Vue.js展示AJAX數(shù)據(jù)簡(jiǎn)單示例講解

    Vue.js展示AJAX數(shù)據(jù)簡(jiǎn)單示例講解

    當(dāng)通過(guò)AJAX方式取回?cái)?shù)據(jù)后,使用vue.js可以完美地按一定邏輯在頁(yè)面上的展示數(shù)據(jù),代碼簡(jiǎn)單、優(yōu)美、自然,而且便于與在用的頁(yè)面框架集成,本文給大家介紹Vue.js展示AJAX數(shù)據(jù)簡(jiǎn)單示例
    2017-03-03
  • Vue項(xiàng)目中實(shí)現(xiàn)AES加密解密的全過(guò)程

    Vue項(xiàng)目中實(shí)現(xiàn)AES加密解密的全過(guò)程

    AES算法是一種對(duì)稱(chēng)加密算法,用于加密和解密數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中實(shí)現(xiàn)AES加密解密的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08

最新評(píng)論