本專案的前端架構為Vue3+TypeScript,首先用npm安裝如下:
npm install vue-i18n@8
在main.ts裡加上:
import i18n from './plugins/i18n'
app.use(i18n)
新增資料夾plugins並新增i18n.ts:
import { createI18n } from 'vue-i18n'
import en from '../locales/en.json'
import zh from '../locales/zh.json'
import cn from '../locales/cn.json'
type MessageSchema = typeof en
const i18n = createI18n<[MessageSchema], 'zh-TW' | 'en-US' | 'zh-CN'>({
legacy: false, // 要把 legacy 設為 false,才可以使用 Composition API
locale: 'en-US',
fallbackLocale: 'en-US',
globalInjection: true,
messages: {
'zh-TW': zh,
'en-US': en,
'zh-CN': cn
}
})
export default i18n
再新增資料夾locales新增語系檔案例如:zh.json,en.json,json範例如下:
{
"Language": "Language",
}
{
"Language": "語系",
}
在主版的Vue裡加進下拉選單:
<n-select
v-model:value="$i18n.locale"
:options="localeOptions"
@change="changeToNewLanguege($event)"
/>
data() {
return {
/**
* 語系選項
*/
localeOptions: [
{
label: 'English',
value: 'en-US'
},
{
label: '繁體中文',
value: 'zh-TW'
},
{
label: '简体中文',
value: 'zh-CN'
}
],
}
},
methods:{
/**
* 變更語系
* @param param
*/
changeToNewLanguege(param: string) {
console.log('changeToNewLanguege param', param)
this.$i18n.locale = param
setCookie('Language', param)
},
}
在每頁面上可以用如下寫法:
{{ $t('Language') }}
或是自己寫function:
/**
* 繫結語系
* @param {*} name
*/
export function renderLanguage(name: string) {
const { t } = useI18n()
return () => t(name)
}
在script裡這樣寫:
renderLanguage('Language')