最近因專案需要英文版本所以使用了這套件,也因為第一次使用作一些簡單的紀錄。
第一次使用 I18n 覺得真的算是蠻方便的,雖然需要將 template 中的文字一一替換😅,
也是非常花時間的。
首先可以透過 npm install vue-i18n 或 vue add i18n 安裝到專案之中。
之後我們建立了一個 i18n 的資料夾統一存放語言與設定的檔案,
// i18n/i18n.js
import Vue from "vue";
import VueI18n from "vue-i18n";
// 因為翻譯的部分較多,所以另外設置了兩個語言檔個別引入,
// 如果需要翻譯的地方不多寫在一起也是沒問題的。
import eng from "./lang/eng";
import zht from "./lang/zht";
// 使用插件
Vue.use(VueI18n);
// 建立 VueI18n 實體
export const i18n = new VueI18n({
locale: zht,
messages: { eng, zht },
silentTranslationWarn: true,
});
export default i18n;
範例的語言檔大概就像這樣設置:
// i18n/lang/zht
export default {
_Hello : "哈囉",
_good:"非常好",
};
// i18n/lang/eng
export default {
_Hello : "Hello",
_good : "Good",
};
基本的使用就很簡單了,只要將需要翻譯替換的文字替換成 i18n 的模板語法,
下方使用了兩個不同的方式將 i18n 模板加在 HTML 中,
再透過 Click function 切換 i18n 中的 locale 值,文字就能夠順利切換了。
通常也會將選定的語言存在 localStorage 。
// Test.vue
<template>
<h1> {{ $t( "_Hello" ) }} </h1>
<h2> {{ $t( testText ) }} </h2>
< button @click="langChange("zht")"> 中文 </button>
< button @click="langChange("eng")"> English </button>
</template>
<script>
import i18n from "@/i18n/i18n.js"
export default {
name: "Header",
data() {
return {
testText:"_good",
}
},
methods: {
langChange(lan) {
i18n.locale = lan
localStorage.setItem("locale", lan)
},
}
}
</script>
那其實在使用的過程中還有遇到 API 回來的資料有分中英文版本要做切換的部分。
這時候就有另外使用到 Vuex 紀錄當前語言並搭配 computed & watch 做資料的及時切換,
這部分就有機會在提好了。