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

vue3+ts+vite+pinia+element?plus項(xiàng)目使用語(yǔ)言國(guó)際化詳解

 更新時(shí)間:2025年11月22日 15:17:08   作者:活寶小娜  
文章介紹了如何在Vue?3?+?TypeScript?+?Vite?+?Pinia?+?Element?Plus項(xiàng)目中實(shí)現(xiàn)語(yǔ)言國(guó)際化,主要步驟包括安裝vue-i18n、創(chuàng)建語(yǔ)言文件、創(chuàng)建i18n實(shí)例、全局引入、類型聲明(可選)、創(chuàng)建語(yǔ)言切換組件、動(dòng)態(tài)加載語(yǔ)言文件以及在組件和PiniaStore中使用國(guó)際化

vue3+ts+vite+pinia+element plus項(xiàng)目使用語(yǔ)言國(guó)際化

1、安裝vue-i18n@9

npm install vue-i18n@9

2、創(chuàng)建語(yǔ)言文件en.json和zh-CN.json,路徑在src/i18n/

en.json和zh-CN.json文件內(nèi)容要一致,以便在切換語(yǔ)言時(shí)生效,需要傳入的內(nèi)容可用{}

en.json內(nèi)容:

{
    "common": {
      "login": "Login",
      "welcome": "Welcome, {name}!",
      "button": {
        "confirm": "Confirm",
        "cancel": "Cancel"
      }
    },
    "author": {
       "name": "name"
    }
}

zh-CN.json內(nèi)容

{
    "common": {
      "login": "登錄",
      "welcome": "歡迎,{name}!",
      "button": {
        "confirm": "確定",
        "cancel": "取消"
      }
    },
    "author": {
       "name": "姓名"
    }
}

3、創(chuàng)建 i18n 實(shí)例

src/i18n/index.ts

import { createI18n } from 'vue-i18n'
import en from './en.json'
import zhCN from './zh-CN.json'

type MessageSchema = typeof en

const messages = {
  en,
  'zh-CN': zhCN
}

export const i18n = createI18n<[MessageSchema], 'en' | 'zh-CN'>({
  legacy: false, // 使用 Composition API 模式
  locale: 'en', // 默認(rèn)語(yǔ)言
  fallbackLocale: 'en', // 回退語(yǔ)言
  globalInjection: true, // 全局注入 $t
  messages
})

// 導(dǎo)出類型增強(qiáng)
export type I18nType = typeof i18n

4、 全局引入,修改 main.ts

import { createApp } from 'vue'
import App from './App.vue'
import { i18n } from './i18n'
import { createPinia } from 'pinia'

const app = createApp(App)
const pinia = createPinia()

app.use(i18n)
app.use(pinia)
app.mount('#app')

5、類型聲明(可選)

src/shims-vue-i18n.d.ts

import { I18nType } from './i18n'

declare module 'vue-i18n' {
  export interface Composer extends I18nType.global.Composer {}
}

6、創(chuàng)建語(yǔ)言切換組件

路徑:src/components/LangSwitcher/index.vue

<template>
  <select v-model="locale">
    <option value="en">English</option>
    <option value="zh-CN">中文</option>
  </select>
</template>

<script setup lang="ts">
import { useI18n } from 'vue-i18n'

const { locale } = useI18n()
</script>

7、創(chuàng)建動(dòng)態(tài)加載語(yǔ)言文件

路徑: src/i18n/loader.ts

import { i18n } from "@/i18n/index";
import { nextTick } from "vue";

export async function loadLocaleMessages(locale: string) {
  try {
    const messages = await import(`./locales/${locale}.json`)
    i18n.global.setLocaleMessage(locale, messages.default)
    return nextTick()
  } catch (error) {
    console.error('Failed to load locale:', error)
  }
}

在切換語(yǔ)言時(shí)調(diào)用

// 傳遞的參數(shù)newLocal 為定義的語(yǔ)言,例如:en,zh-CN等
const switchLocale = async (newLocale: string) => {
  await loadLocaleMessages(newLocale)
  locale.value = newLocale
}

8、在組件中使用國(guó)際化

8.1組合式 API 寫(xiě)法

<script setup lang="ts">
import { useI18n } from 'vue-i18n'

const { t } = useI18n()

const message = t('common.welcome', { name: 'John' })
</script>

8.2模板中使用:

<template>
  <div>
    <h1>{{ $t('common.login') }}</h1>
    <p>{{ $t('common.welcome', { name: 'Alice' }) }}</p>
    <button>{{ $t('common.button.confirm') }}</button>
    <span>{{ $t('common.profile') }}</span>
    <span>{{ $t('author.name') }}</span>
  </div>
</template>

8.3在 Pinia Store 中使用

// stores/user.ts
import { defineStore } from 'pinia'
import { useI18n } from 'vue-i18n'

export const useUserStore = defineStore('user', () => {
  const { t } = useI18n()
  
  const login = () => {
    console.log(t('common.login'))
  }

  return { login }
})

總結(jié)

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

相關(guān)文章

  • Vue實(shí)現(xiàn)點(diǎn)擊按鈕下載文件的操作代碼(后端Java)

    Vue實(shí)現(xiàn)點(diǎn)擊按鈕下載文件的操作代碼(后端Java)

    最近項(xiàng)目中需要實(shí)現(xiàn)點(diǎn)擊按鈕下載文件的需求,前端用的vue后端使用的java代碼,今天通過(guò)本文給大家分享vue點(diǎn)擊按鈕下載文件的實(shí)現(xiàn)代碼,需要的朋友參考下吧
    2021-08-08
  • 前端vue3搭建超詳細(xì)指南(快速上手搭建)

    前端vue3搭建超詳細(xì)指南(快速上手搭建)

    這篇文章主要介紹了使用Vue?3和Element-plus搭建前端項(xiàng)目的過(guò)程,包括項(xiàng)目搭建、Element-plus安裝和引入、axios安裝、sass使用、app.vue配置、組件創(chuàng)新、路由配置以及使用輔助插件來(lái)提高開(kāi)發(fā)效率,需要的朋友可以參考下
    2025-02-02
  • vue移動(dòng)端模態(tài)框(可傳參)的實(shí)現(xiàn)

    vue移動(dòng)端模態(tài)框(可傳參)的實(shí)現(xiàn)

    這篇文章主要介紹了vue移動(dòng)端模態(tài)框(可傳參)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Vue動(dòng)態(tài)獲取數(shù)據(jù)后控件不可編輯問(wèn)題

    Vue動(dòng)態(tài)獲取數(shù)據(jù)后控件不可編輯問(wèn)題

    這篇文章主要介紹了Vue動(dòng)態(tài)獲取數(shù)據(jù)后控件不可編輯問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue3新特性Suspense和Teleport應(yīng)用場(chǎng)景分析

    Vue3新特性Suspense和Teleport應(yīng)用場(chǎng)景分析

    本文介紹了Vue2和Vue3中的Suspense用于處理異步請(qǐng)求的加載提示,以及如何在組件間實(shí)現(xiàn)動(dòng)態(tài)加載,同時(shí),Teleport技術(shù)展示了如何在DOM中靈活地控制組件的渲染位置,解決布局問(wèn)題,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • vue2的todolist入門小項(xiàng)目的詳細(xì)解析

    vue2的todolist入門小項(xiàng)目的詳細(xì)解析

    本篇文章主要介紹了vue2的todolist入門小項(xiàng)目的詳細(xì)解析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 前端Vue自定義地址展示地址選擇地址管理組件的示例詳解

    前端Vue自定義地址展示地址選擇地址管理組件的示例詳解

    這篇文章主要介紹了前端Vue自定義地址展示地址選擇地址管理組件的示例詳解,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • vscode 配置vue+vetur+eslint+prettier自動(dòng)格式化功能

    vscode 配置vue+vetur+eslint+prettier自動(dòng)格式化功能

    這篇文章主要介紹了vscode 配置vue+vetur+eslint+prettier自動(dòng)格式化功能,本文通過(guò)實(shí)例代碼圖文的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • vue+element 實(shí)現(xiàn)商城主題開(kāi)發(fā)的示例代碼

    vue+element 實(shí)現(xiàn)商城主題開(kāi)發(fā)的示例代碼

    這篇文章主要介紹了vue+element 實(shí)現(xiàn)商城主題開(kāi)發(fā)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • vue實(shí)現(xiàn)修改標(biāo)簽中的內(nèi)容:id class style

    vue實(shí)現(xiàn)修改標(biāo)簽中的內(nèi)容:id class style

    這篇文章主要介紹了vue實(shí)現(xiàn)修改標(biāo)簽中的內(nèi)容:id class style,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

射洪县| 聂拉木县| 太谷县| 陕西省| 华坪县| 尉氏县| 大埔区| 高陵县| 都昌县| 武乡县| 陵水| 阿尔山市| 陈巴尔虎旗| 阿城市| 随州市| 祁东县| 静乐县| 武胜县| 黔南| 察雅县| 卓资县| 阜阳市| 天柱县| 瑞安市| 伊金霍洛旗| 疏勒县| 永济市| 尚志市| 会宁县| 石城县| 和顺县| 丹棱县| 嫩江县| 晋州市| 广州市| 泰安市| 玉环县| 东乡族自治县| 兴化市| 江孜县| 黄梅县|