前言
當網站的用戶有外籍人士時,客戶本身可以透過 Google 自動翻譯來閱讀,但翻譯過後的內容極有可能不完整、不正確。所以必須由公司內部製作特定語系的版本,讓客戶可以在網站中做語言切換的功能。過往可能會搭配後端 + 網址參數來回傳特定版本的 HTML
,類似這種有參數的網址出現,才能達成多語系切換。而 Vue I18n 則可以在完全不動到網址的前提下,做語系的切換,以下就來介紹使用方法吧!
引入套件
1 | <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> |
建立專案內容
本次專案結構相當簡易,只需 HTML
、CSS
、JS
三支檔案就好。
會不使用 Vue-Cli 引入的原因是 Vue I18n
會在一開始就先引入並使用,而其他套件(ex:Swper.js
)在其後引入也不會出現問題,所以沒有雷點就直接按照官方文件即可。
HTML 直接使用官方模板,跟簡單做一下切換按。
1 |
|
JS 的部分就要注意囉!
- 引入語言包,可以使用
JSON
檔來製作,並搭配其他編譯打包工具import
進來。 new Vue({ i18n }).$mount('#app')
必須比其他new XXX()
寫法更早執行。- 第2點就是本次不使用 Vue-Cli 的原因,畢竟會在
main.js
最先引入,而其他套件則會在元件內引入,所以就不會有問題勒。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61/* 不能比 new Vue({ i18n }).$mount('#app') 還先執行 */
/* 否則會無法輪播呦,但會切換語系 */
// var mySwiper = new Swiper('.swiper-container', {
// direction: 'horizontal',
// loop: true,
// navigation: {
// nextEl: '.swiper-button-next',
// prevEl: '.swiper-button-prev',
// },
// })
/* 定義語言包物件 */
const messages = {
tw: {
message: {
hello: '您好'
}
},
en: {
message: {
hello: 'hello world'
}
},
ja: {
message: {
hello: 'こんにちは、世界'
}
}
}
/* 預設語系 */
let locale = localStorage.getItem('locale') || 'tw'
/* 建立 VueI18n 實體 */
const i18n = new VueI18n({
locale,
messages,
})
/* 必須比其他 JS 套件更前面就執行 */
new Vue({ i18n }).$mount('#app')
/* 切換網switchLang站語系 */
function switchLang () {
locale = this.value;
i18n.locale = locale
localStorage.setItem('locale', locale)
}
const buttons = Array.from(document.querySelectorAll('.switchLan'));
buttons.forEach((button) => {
button.addEventListener('click', switchLang);
});
var mySwiper = new Swiper('.swiper-container', {
direction: 'horizontal',
loop: true,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
})1
2
3
4
5.swiper-container {
width: 600px;
height: 300px;
background-color: skyblue;
}
結尾 Demo
依照上面參考範例打開 Web server
就可以同時執行輪播以及切換語系囉。
Vue - 使用 Vue I18n 打造多國語系網站環境