最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實現(xiàn)多語言配置的Vue3項目方式

 更新時間:2025年12月04日 08:54:35   作者:竭點  
在Vue3項目中使用vue-i18n庫實現(xiàn)多語言配置,通過安裝、創(chuàng)建語言文件、配置全局語言并實現(xiàn)語言切換,為用戶提供多語言界面體驗

在 Vue 3 項目中,通過使用vue-i18n 庫可以方便地實現(xiàn)多語言配置,為用戶提供多語言支持的界面體驗。

在本篇博客中,我將向您介紹如何在 Vue 3 項目中配置和使用多語言功能,讓您的應(yīng)用能夠支持多種語言。讓你的開發(fā)起來更加簡單。

步驟一:安裝 vue-i18n

首先,在您的 Vue 3 項目中安裝vue-i18n 庫。您可以通過以下命令來安裝:

npm install vue-i18n@next

步驟二:創(chuàng)建語言文件

在src下創(chuàng)建一個語言文件夾,用來存放語言配置文件(en.js,zh.js,i18n.js)三個文件,我這個項目只需要中英文,現(xiàn)在做一個簡單使用示例

具體的文件

en.js:(英文翻譯文件夾)

//en
export default {
  message: {
   home: 'home'
  }
}

zh.js:(中文)

export default {
  message: {
   home: '首頁'
  }
}

i18n.js:

import { createI18n } from "vue-i18n";
import en from './en'
import zh from './zh';
 
const i18n = createI18n({
  locale:localStorage.getItem('language') || 'zh', // 默認是中文
  globalInjection:true,//全局配置$t
  legacy:false,
  messages:{en,zh}// 需要做國際化的語種
 
})
 
export default i18n

然后在main.js里頭配置全局的語言

main.js:

import './assets/main.css'

import { createApp } from 'vue'
import pinia from '@/stores/index.js'

import App from './App.vue'
import router from './router'
import i18n from './lang/i18n';

const app = createApp(App) 
app.use(router)
app.use(pinia)
app.use(i18n)

app.mount('#app')

配置好這些以后就可以使用了:

切換中英文的文件:

<template>
    <div class="entry_box">
      <div class="entry_head">
        <button @click="changeLocale">{{ currentLocale === 'en' ? 'Switch to Chinese' : '切換英文' }}</button>
      </div>
      <div class="entry_main">
        <div class="menu">
          <Menu/>
        </div>
        <div class="main">
          <router-view>
          </router-view>
        </div>
      </div>
    </div>
  </template>
  <script setup>
  import { ref } from 'vue';
  import Menu from '@/components/Menu.vue'
  import { useI18n } from 'vue-i18n';
  const { locale, t } = useI18n();
  locale.value = 'zh';
  const currentLocale = ref(locale.value);
  const changeLocale = () => {
    currentLocale.value = currentLocale.value === 'zh' ? 'en' : 'zh';
    locale.value = currentLocale.value;
  };
  </script>
  <style scoped lang="less">
  .entry_box{
    height: 100%;
    width: 100%;
    .entry_head{
      height: 64px;
      width: 100%;
      display: flex;
      background: #409eff;
    }
    .entry_main{
      width: 100%;
      height: calc(100vh - 64px);
      display: flex;
      .menu{
        width: 1;
        height: calc(100vh - 64px);
      }
      .main{
        padding: 10px;
        flex: 1;
        height: calc(100vh - 64px);
      }
    }
  }
  
  </style>
  

在菜單配置項里頭做語言切換的監(jiān)聽

<template>
  <div class="menu_box">
    <el-menu
      active-text-color="#d71921"
      background-color="#fff"
      class="el-menu-vertical-gat"
      :default-active="defaultActive"
      text-color="#040c2c"
      :collapse="isCollapse"
      @open="handleOpen"
      @close="handleClose"
      ref="menuRef"
    >
      <template v-for="item in menuData" :key="item.index">
        <el-sub-menu v-if="item.children && item.children.length > 0" :index="item.index">
          <template #title>
            <span>{{ item.title }}</span>
          </template>
          <el-menu-item v-for="citem in item.children" :index="citem.index" :key="citem.index" @click="changeMenu(citem)">
            {{ citem.title }}
          </el-menu-item>
        </el-sub-menu>
        <el-menu-item v-else :index="item.index" @click="changeMenu(item)">
          <el-icon><component :is="item.icon"></component></el-icon>
          <span>{{ item.title }}</span>
        </el-menu-item>
      </template>
    </el-menu>
  </div>
</template>

<script setup>
import { ref, onMounted, onBeforeUnmount, watch, markRaw, onUpdated } from 'vue';
import { Document, Menu as IconMenu, Location, Setting } from '@element-plus/icons-vue';
import { useRoute, useRouter } from 'vue-router';
import { useI18n } from 'vue-i18n'
  const { locale, t } = useI18n();
  const router = useRouter()
  const defaultActive = ref('1');
  const isCollapse = ref(false);
  const menuRef = ref(null);
  const menuData = ref([]);

  const initMenuData = () => {
    menuData.value = [
      {
        index: '1',
        title: t('message.home'),
        name: 'home',
        icon: markRaw(Location)
      },
      {
        index: '2',
        title: '系統(tǒng)管理',
        name: 'systemManagement',
        icon: markRaw(Setting),
        
      },
      {
        index: '3',
        title: '網(wǎng)關(guān)配置',
        name: 'equipmentConfig',
        icon: markRaw(IconMenu)
      },
      {
        index: '4',
        title: '日志管理',
        name: 'logManagement',
        icon: markRaw(Document)
      }
    ];
  }
  // 監(jiān)聽語言變化,并重新初始化菜單數(shù)據(jù)
  watch(locale, () => {
    initMenuData();
  });
  // 初始化菜單數(shù)據(jù)
  initMenuData();
  const setCollapseState = (windowWidth) => {
    if (windowWidth < 768) {
      isCollapse.value = true;
    } else {
      isCollapse.value = false;
    }
  }

  const handleOpen = (key, keyPath) => {
    if(menuRef&&menuData){
          for(let i=0;i<menuData.length;i++){
            let menu = menuData[i];
            if(menu.index!=key&&menu.children&&menu.children.length>0){
              //關(guān)閉其他sub-menu
              menuRef.close(menu.index);
            }
          }
        }

    // if (key !== defaultActive.value && menuData.value) {
    //   menuData.value.forEach((menu) => {
    //     if (menu.index !== key && menu.children && menu.children.length > 0) {
    //       menu.$refs.menuRef.close(menu.index);
    //     }
    //   });
    // }
  }

  const handleClose = (key, keyPath) => {
    // Handle close logic here
  }

  const changeMenu = (item) => {
    console.log(item);
    router.push({ name: item.name });
    // this.$router.push({ name: item.name });
  }

  onMounted(() => {
    setCollapseState(window.innerWidth);
    window.addEventListener('resize', () => {
      setCollapseState(window.innerWidth);
    });
  });

  onBeforeUnmount(() => {
    window.removeEventListener('resize', setCollapseState);
  });

</script>

<style scoped lang="less">
.menu_box {
  height: 100%;

  .el-menu {
    height: 100%;
  }
}
</style>

效果如下:

總結(jié)

通過以上步驟,您已經(jīng)成功配置了 Vue 3 項目的多語言功能。用戶可以通過切換語言來改變應(yīng)用中顯示的文字內(nèi)容,為不同語言用戶提供更好的用戶體驗。

這只是一個簡單的配置,后續(xù)還需要把切換的語言放到store中,以便其他地方使用。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于Element上傳組件beforeUpload上傳前限制失效問題

    關(guān)于Element上傳組件beforeUpload上傳前限制失效問題

    這篇文章主要介紹了Element上傳組件beforeUpload上傳前限制失效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • elementplus實現(xiàn)多級表格(最后一級展示圖片)

    elementplus實現(xiàn)多級表格(最后一級展示圖片)

    本文主要介紹了elementplus實現(xiàn)多級表格(最后一級展示圖片),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Vue之請求如何傳遞參數(shù)

    Vue之請求如何傳遞參數(shù)

    這篇文章主要介紹了Vue之請求如何傳遞參數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue組件之間的參數(shù)傳遞與方法調(diào)用的實例詳解

    Vue組件之間的參數(shù)傳遞與方法調(diào)用的實例詳解

    這篇文章主要介紹了Vue組件之間的參數(shù)傳遞與方法調(diào)用,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • vue form表單post請求結(jié)合Servlet實現(xiàn)文件上傳功能

    vue form表單post請求結(jié)合Servlet實現(xiàn)文件上傳功能

    這篇文章主要介紹了vue form表單post請求結(jié)合Servlet實現(xiàn)文件上傳功能,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Vue3滑動到最右驗證功能實現(xiàn)

    Vue3滑動到最右驗證功能實現(xiàn)

    在登錄頁面需要啟動向右滑塊驗證功能,遇到這樣的需求怎么實現(xiàn)呢,下面小編通過示例代碼給大家分享Vue3滑動到最右驗證功能實現(xiàn),感興趣的朋友一起看看吧
    2024-06-06
  • vue3中路由寫法與傳參方式的超詳細指南

    vue3中路由寫法與傳參方式的超詳細指南

    Vue?Router是Vue.js官方的路由管理器,它主要用于單頁面應(yīng)用程序中,幫助解決頁面導(dǎo)航、組件復(fù)用等問題,下面我們就來看看vue3中路由寫法與傳參方式吧
    2024-11-11
  • el-input寬度跟隨輸入內(nèi)容自適應(yīng)的實現(xiàn)方法

    el-input寬度跟隨輸入內(nèi)容自適應(yīng)的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于el-input寬度跟隨輸入內(nèi)容自適應(yīng)的實現(xiàn)方法,我們再實際應(yīng)用中可能需要input文本框能夠根據(jù)輸入字符的所占據(jù)的寬度自動調(diào)節(jié)尺寸,需要的朋友可以參考下
    2023-08-08
  • 解決vue v-for 遍歷循環(huán)時key值報錯的問題

    解決vue v-for 遍歷循環(huán)時key值報錯的問題

    今天小編就為大家分享一篇解決vue v-for 遍歷循環(huán)時key值報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue實現(xiàn)移動端左右滑動效果的方法

    Vue實現(xiàn)移動端左右滑動效果的方法

    最近得到一個新需求,需要在Vue項目的移動端頁面上加上左右滑動效果,經(jīng)過一番折騰,最終決定四月vue-touch。下面小編把實現(xiàn)代碼分享給大家,感興趣的朋友一起看看吧
    2018-11-11

最新評論

共和县| 邢台市| 育儿| 大埔县| 双城市| 北宁市| 临江市| 中阳县| 历史| 平塘县| 治县。| 清水县| 娱乐| 镇巴县| 武鸣县| 梁平县| 青阳县| 麦盖提县| 旺苍县| 尚志市| 开鲁县| 宣威市| 潍坊市| 白银市| 泰安市| 铜山县| 崇左市| 临猗县| 株洲市| 乳源| 青岛市| 元阳县| 固安县| 日照市| 花莲县| 临江市| 安福县| 潮安县| 班戈县| 于田县| 基隆市|