@Jeannttevue
最近由於須要弄一個英文(en)/中文(zh)/西班牙(es)語言的網站,用SSR的Nuxt構建, 再配合vue-i18n去解決切換語言問題web
vue-i18n
npm install vue-i18n --save-dev
複製代碼
在根目錄新建locales
vuex
新建zh.json / en.json / es.json 按需配置語言(備註: 分別對應 中文 / 英文 / 西班牙)npm
zh.jsonelement-ui
{
"links": {
"home": "首頁"
},
"home": {
"title": "歡迎來到首頁",
"meta": "這是一個簡單的網站"
}
}
複製代碼
en.jsonjson
{
"links": {
"home": "Home"
},
"home": {
"title": "Welcome to the homepage",
"meta": "This is a simple website"
}
}
複製代碼
es.jsonbash
{
"links": {
"home": "Inicio"
},
"home": {
"title": "Bienvenido a la pagina de inicio",
"meta": "Este es un sitio web simple"
}
}
複製代碼
export const state = (): Istate => ({
locales: ['en', 'zh', 'es'],
locale: 'zh'
})
複製代碼
export const mutations = {
[types.SET_LANG](state, locale) {
if (state.locales.indexOf(locale) !== -1) {
state.locale = locale
}
}
}
複製代碼
export const SET_LANG = 'SET_LANG'
複製代碼
import Vue from 'vue';
import VueI18n from 'vue-i18n';
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import ElementLocale from 'element-ui/lib/locale'
// 加入Vue全局
Vue.use(VueI18n)
export default ({ app, store }) => {
// Set i18n instance on app
// This way we can use it in middleware and pages asyncData/fetch
app.i18n = new VueI18n({
locale: store.state.locale,
fallbackLocale: 'en',
messages: {
'en': { ...require('~/locales/en.json') , ...enLocale },
'zh': { ...require('~/locales/zh.json'), ...zhLocale },
'es': { ...require('~/locales/es.json'), ...zhLocale },
}
});
app.i18n.path = (link) => {
if (app.i18n.locale === app.i18n.fallbackLocale) {
return `/${link}`;
}
return `/${app.i18n.locale}/${link}`;
}
// 配置element-ui的組件國際化
ElementLocale.i18n((key, value) => app.i18n.t(key, value))
}
複製代碼
用於指定vue-i18n的一些配置文件 nuxt.config.tsapp
nuxt.config.ts
文件import NuxtConfiguration from '@nuxt/config'
const config: NuxtConfiguration = {
.... # 其它配置內容忽略,新增plugins&build.verdor
plugins: [ '~/plugins/i18n.ts' ], build: { vendor: ['vue-i18n'], } } export default config 複製代碼
當點擊事件觸發切換以後,經過更改切換async
this.$i18n.locale = 'zh' | 'es' | 'en';
// 經過切換語言
複製代碼
結語:fetch
切換國際化仍是挺方便的,經過自定義與elementUi的語言庫,這樣就完美了...