Vue3+TS i18n插件使用與配置

首先安裝庫:

npm i vue-i18n@next
npm i vue-cli-plugin-i18n@next

vite.config.ts 配置:

import {defineConfig} from "vite"
import vue from "@vitejs/plugin-vue"
import path from 'path'
import {vueI18n} from "@intlify/vite-plugin-vue-i18n"

// https://vitejs.dev/config/
export default defineConfig({
   resolve: {
       alias: {
            'vue-i18n': 'vue-i18n/dist/vue-i18n.runtime.esm-bundler.js'
       }
    },
    plugins: [
        vue(),
        vueI18n(
            {
                include: path.resolve(__dirname, './src/i18n/locales/**')
            }
        )
// ... 這里是其他配置
]
})

src 目錄新增 i18n文件夾瞎嬉,i18n文件夾下新建 index.ts文件和 locales 文件夾

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

type MessageSchema = typeof enUS

const i18n = createI18n<[MessageSchema], 'en-US' | 'zh-CN'>({
    // 默認(rèn)語言先取自定義的,再取瀏覽器的膝宁,最后默認(rèn)英文
    locale: localStorage.getItem("locale") || navigator.language || 'en-US',
    legacy: false,
    // allowComposition: true, // 是否允許在 Legacy API 模式下使用 Composition API
    messages: {
        'en-US': enUS,
        'zh-CN': zhCN // 可以追加其他語言
    }
})

export default i18n

locales 文件夾下新建 zh-CN.json短曾、en-US.json

文件內(nèi)格式要保持一樣:

舉例:

zh-CN.json


{
    "Home": "首頁"
}

en-US.json

{
    "Home": "Home"
}

然后在 main.ts 安裝插件:

import i18n from './i18n'
... 
// 國際化管理
app.use(i18n)

接著就能在vue組件中使用了,使用方式是:

<script setup lang="ts">
import i18n from "./i18n"

const setLanguage = (locale: 'zh-CN' | 'en-US') => {
   // @ts-ignore, 這是官方的錯誤抗果,本身現(xiàn)在它就是一個ComputedRefImpl類型的參數(shù)
   if(locale !== i18n.global.locale.value) {
      localStorage.setItem("locale", locale)
      // @ts-ignore
      i18n.global.locale.value  = locale
      // 重新加載頁面,組件的類型才能生效
      location.reload()
      return true // 這里加彈窗也可以
   }{
      return false
   }
}
</script>
<template>
   <h1>{{ $t('Home') }}</h1>
 <button @click="setLanguage('zh-CN')">簡體中文</button>
</template>

setLanguage方法可以抽離出來放到utils目錄中的index里面單獨導(dǎo)出奸晴,后續(xù)作為標(biāo)準(zhǔn)工具冤馏。

下一篇文章說說 NaiveUI全局組件語言的變更。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寄啼,一起剝皮案震驚了整個濱河市逮光,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌墩划,老刑警劉巖涕刚,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乙帮,居然都是意外死亡杜漠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門察净,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驾茴,“玉大人,你說我怎么就攤上這事氢卡⌒庵粒” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵译秦,是天一觀的道長峡捡。 經(jīng)常有香客問我,道長诀浪,這世上最難降的妖魔是什么棋返? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮雷猪,結(jié)果婚禮上睛竣,老公的妹妹穿的比我還像新娘。我一直安慰自己求摇,他們只是感情好射沟,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布殊者。 她就那樣靜靜地躺著,像睡著了一般验夯。 火紅的嫁衣襯著肌膚如雪猖吴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天挥转,我揣著相機與錄音海蔽,去河邊找鬼。 笑死绑谣,一個胖子當(dāng)著我的面吹牛党窜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播借宵,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼幌衣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壤玫?” 一聲冷哼從身側(cè)響起豁护,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎欲间,沒想到半個月后楚里,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡括改,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年腻豌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘱能。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吝梅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惹骂,到底是詐尸還是另有隱情苏携,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布对粪,位于F島的核電站右冻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏著拭。R本人自食惡果不足惜纱扭,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望儡遮。 院中可真熱鬧乳蛾,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至因惭,卻和暖如春岳锁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹦魔。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工激率, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人勿决。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓柱搜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剥险。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容