最近在作一個香港的項目,須要項目支持簡體中文、繁體中文和英文。經調研後,使用Vue生態中比較成熟的是vue-i18n
。項目實戰時,本身也積累了些有用的經驗,寫出來和你們分享。html
這裏默認各位看官使用Vue-cli
搭建前端工程。前端
npm i vue-i18n --save
複製代碼
src
目錄下建立i18n
目錄,放置多語言相關代碼i18n
目錄建立locale
,放置語言包語言包通常使用json
形式存儲,咱們建立簡體中文、繁體中文和英文三個語言包:vue
zh-CN.json
{
"message": "你好,中國",
"pleaseEnter": "請輸入內容",
"apple": "蘋果",
"banana": "香蕉"
}
複製代碼
zh-HK.json
{
"message": "你好,中國",
"pleaseEnter": "請輸入內容",
"apple": "蘋果",
"banana": "香蕉"
}
複製代碼
en.json
{
"message": "hello, china",
"pleaseEnter": "please enter content",
"apple": "apple",
"banana": "banana"
}
複製代碼
i18n
目錄下建立index.js
,建立i18n
實例:import Vue from 'vue';
import VueI18n from 'vue-i18n';
// 導入語言包信息
import en from "./locale/en.json";
import zhCN from "./locale/zh-CN.json";
import zhTW from "./locale/zh-TW.json";
// 註冊i18n
Vue.use(VueI18n);
// 語言包根據語言環境分類
const messages = {
en,
"zh-CN": zhCN,
"zh-TW": zhTW,
}
// 經過選項建立 VueI18n 實例並導出
export default new VueI18n({
locale: 'zh-CN', // 設置當前語言環境,默認中文簡體
messages, // 設置語言環境對應信息
})
複製代碼
main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import i18n from './i18n';// 引入i18n實例
new Vue({
router,
store,
i18n, // 掛載到根實例中
render: h => h(App)
}).$mount('#app')
複製代碼
頁面或組件中,通常使用多語言比較多的三種狀況:git
其實這三種狀況都依賴於i18n
掛載後的全局$t
方法。github
這裏在App.vue
中展現一下寫法:npm
<template>
<div id="app">
<!-- 切換語言 -->
<label for>選擇語言:</label>
<select v-model="locale">
<option
v-for="(locale, index) in locales"
:key="index"
:value="locale.value"
>{{ locale.label }}</option>
</select>
<!-- 渲染內容 -->
<h1>{{ $t('message') }}</h1>
<!-- 標籤屬性 -->
<input type="text" :placeholder="$t('pleaseEnter')" />
<!-- 計算屬性列表渲染 -->
<ul>
<li v-for="(fruit, index) in fruits" :key="index">{{ fruit.label }}</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
locale: this.$i18n.locale, //使用i18n實例默認定義的語言
locales: [
{
value: "en",
label: "英文"
},
{
value: "zh-CN",
label: "中文簡體"
},
{
value: "zh-TW",
label: "中文繁體"
}
]
};
},
watch: {
locale(val) {
this.$i18n.locale = val;
}
},
computed: {
fruits() {
return [
{
value: 1,
label: this.$t("apple") // 列表中的數據支持多語言
},
{
value: 2,
label: this.$t("banana")
}
];
}
},
mounted() {
console.log(this.$t());
}
};
</script>
複製代碼
經過看上面的代碼,咱們會發現多語言寫的代碼可讀性不好,當頁面都是用多語言,看到項目都是相似於$t("message")
這種寫法,簡直就是噩夢。json
那麼怎麼能夠加強可讀性呢?其實已經有大佬在前面踩坑了,經過IDE插件來解決!!bash
這裏推薦VSCode
的Vue i18n Ally
,使用三步走:app
Vue i18n Ally
並安裝;ctrl+shift+p
,頂部彈出搜索框輸入Vue i18n ally: Change display language
,選擇zh-CN
。ok,而後IDE就會幫你的代碼加強可讀性,看圖:ui
設計稿給咱們通常是以簡體中文來寫樣式的,但因爲英文和中文長度不一致,會致使樣式錯亂問題,因此須要要求設計一開始要留意這個點。通常有兩種方案:
若是文章有什麼說得不對的地方,歡迎評論指出;而若是文章對你有幫助的話,幫忙點個贊吧