你好,
我有兩個問題想提問:
(1)如何在vue-i18n套件裡,import json格式的語言包?
(2)vscode套件i18n Ally的設定要怎麼設定?
我的工作環境是:(Vue3、Vite框架)
"vue": "^3.2.13",
"vue-i18n": "^9.2.0-beta.9"
"vite": "^2.5.10",
如果語言包是JS檔的話,一切都正常。
//en.js語言包
export const locale = {
"GENERAL": {
"NAV_OPTIONS": ["Home", "About", "Contact"],
"WELCOME_WORD": "Welcome to your Vue.js application",
"OK": "ok",
"CONTINUE": "continue",
"CANCEL": "cancel",
"GUEST": "guest"
}
}
//vue-i18n.js
import {createI18n} from 'vue-i18n'
import { locale as en } from '../config/i18n/en'
import { locale as tw } from '../config/i18n/tw'
let messages = {}
messages = {en, tw}
const lang = localStorage.getItem('language') || 'tw'
const i18n =createI18n({
locale: lang,
messages:messages
})
export default i18n
//main.js
import { createApp } from 'vue'
import App from './App.vue'
import VueI18n from './assets/languages/plugins/vue-i18n'
createApp(App).use(VueI18n ).mount('#app')
//template
<h2>{{ $t('GENERAL.CANCEL') }}</h2>
<h2 v-t="'GENERAL.CONTINUE'"></h2>
但是!!i18n Ally使用上會有問題。
不知道是我沒設定i18n Ally(我爬文,有些文章說還要設定一些參數?),
還是因為語言包是JS檔的關係?
所以我決定把JS檔的語言包,改成JSON格式。
//en.json
{
"GENERAL": {
"NAV_OPTIONS": ["Home", "About", "Contact"],
"WELCOME_WORD": "Welcome to your Vue.js application",
"OK": "ok",
"CONTINUE": "continue",
"CANCEL": "cancel",
"GUEST": "guest"
}
}
//vue-i18n.js
import {createI18n} from 'vue-i18n'
//只修改import,其他不變,main.js不變
import en from '../config/i18n/en.json'
import tw from '../config/i18n/tw.json'
let messages = {}
messages = {en, tw}
const lang = localStorage.getItem('language') || 'tw'
const i18n =createI18n({
locale: lang,messages:messages
})
export default i18n
就出現以下的錯誤....
是因為json,import進JS檔的方法錯誤嗎?還是因為其他關係?
我不太清楚 Vue3 跟 Vue2 的做法是不是有差,所以這邊提供我 Vue2 的作法
希望能幫你解答
資料夾結構應該差不多
// 我的 en.js
export const locale = {
GENERAL: {
NAV_OPTIONS: ['Home', 'About', 'Contact'],
WELCOME_WORD: 'Welcome to your Vue.js application',
OK: 'ok',
CONTINUE: 'continue',
CANCEL: 'cancel',
GUEST: 'guest',
},
}
語言包一樣,然後是 js 格式
// 我的 vue-i18n.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import { locale as en } from '../config/i18n/en'
import { locale as tw } from '../config/i18n/tw'
Vue.use(VueI18n)
let messages = {}
messages = {en, tw }
const langs = localStorage.getItem('langs') || 'tw'
const i18n = new VueI18n({
locale: langs,
messages,
})
export default i18n
這邊 '../config/i18n/en'
跟 '../config/i18n/tw'
位置要注意抓不抓的到檔案,如果沒有會報錯,就需要去自己修改路徑
版主的 import {createI18n} from 'vue-i18n'
雖然這裡不一樣,但看起來功能可能是一樣的,應該沒差
// 我的 main.js
import Vue from 'vue'
import App from './App'
import router from './router'
import i18n from '../common/plugins/vue-i18n.js'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
i18n,
components: { App },
template: '<App/>'
})
猜測版主應該是這邊的問題
因為 export default i18n
>> 它 export 出來的名字做 i18n
不過你 main.js import VueI18n from './assets/languages/plugins/vue-i18n'
幫他改了名字
// 我的 App.vue
<template>
<div id="app">
<button @click="changlang('tw')">中文</button>
<button @click="changlang('en')">英文</button>
<h1>{{ $t("GENERAL.WELCOME_WORD") }}</h1>
<img src="./assets/logo.png" />
<router-view />
</div>
</template>
<script>
export default {
name: "App",
methods: {
changlang(val) {
this.$i18n.locale = val;
},
},
};
</script>
可以使用 this.$i18n.locale
去變更語系
謝謝你的幫忙^^
JS檔的語言包,我也是可以正常使用。
不過JSON檔的語言包,我一直找不到怎麼解決...
卡在JSON檔這關..
了解~不過我安裝完插件後
直接貼你的JSON檔,看起來好像可以~~
看一下專案是否有 .vscode/settiong.json
這個檔案裡面會有設定檔,通常會自動產生,如下
{
"i18n-ally.localesPaths": [
"src/i18n",
"src/i18n/locale"
],
}
沒有的話可以自己新增修改成你的 i18n 路徑
另外以下是要自己輸入的設定,如果是要用 json 檔案的話
"i18n-ally.enabledParsers": ["js", "json"],
"i18n-ally.keystyle": "nested",
其他設定這邊也有文件可以看