###### tags: `Vue` 、`前端小天地|JS` Vue 3 - i18n (國際化多語系) === > 這邊紀錄如何在Vue3專案裡使用多語系[color=#9C7DDE] 1. 安裝 **vue-i18n** 套件 :::warning 請注意:v8 目前無支援 vue3,v9 才有支援。 ::: 2. 當時安裝版本:`^9.3.0-beta.24` ```npm npm install vue-i18n@next -S ``` 3. **/src/main.js** 寫入以下程式: :::info 💬 說明 - `zh` 與 zhCustomized 分別是繁體中文基礎檔案 與 繁體中文客製檔案。 - `cn` 是簡體中文基礎檔案。 - `en` 是英文基礎檔案。 - `legacy` 官方文獻提到:您必須設置 **false** 才能使用 Composition API。 - `fallbackLocale` 偏好語言在你提供的翻譯中找不到對應的翻譯內容時,回退語言將會被使用作為替代。 - `zhMerged` 合併繁體中文兩個 json 檔案資料,若key值重複,依後面的為優先 ( , ...zhCustomized ) 。 ::: **main.js** ```javascript= // i18n import { createI18n } from "vue-i18n" import zh from "./language/zh-Hant-TW.json" import zhCustomized from "./language/zh-Hant-TW-customized.json" import cn from "./language/zh-CN.json" import en from "./language/en-US.json" const zhMerged = { ...zh, ...zhCustomized }; const i18n = createI18n({ legacy: false, locale: localStorage.getItem("locale") ?? zhMerged, fallbackLocale: zhMerged, messages :{ "zh-Hant-TW": zhMerged, "zh-CN": cn, "en-US": en } }) createApp(App).use(i18n).mount('#app') ``` 4. 語系json檔案,繁體中文範例: ```json= { "home": "啟程開始", "about": "現況分享", "portfolio": "參觀作品", "skills": "技能列表", "contact": "聯絡我" } ``` 5. 在要使用的SFC`<script>`中,寫入以下程式: **NavMenu.vue** ```javascript= <script setup> import { useI18n } from "vue-i18n"; // 多語系 const languageOptions = ref([ { value: "zh-Hant-TW", label: "繁體中文", }, { value: "zh-CN", label: "简体中文", }, { value: "en-US", label: "English", }, ]); const { t, locale } = useI18n(); watch(locale, (newlocale) => { localStorage.setItem("locale", newlocale); }); </script> <template> <el-select v-model="locale" placeholder="......"> <el-option v-for="item in languageOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </template> ```