目录结构

lang/index.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
function getMessages (languages) {
const modules = new Set(require.context('./modules', true, /\.json$/).keys().map(key => key.split('/')[1]))
const messages = {}
languages.forEach(language => {
messages[language] = {}
})
modules.forEach(moduleName => {
languages.forEach(async lang => {
try {
const { default: obj } = await import('./modules/' + `${moduleName}/${lang}.json`)
!messages[lang][moduleName] && (messages[lang][moduleName] = {})
Object.assign(messages[lang][moduleName], obj)
} catch (e) {
console.warn(e.message)
}
})
})
console.log(messages)
return messages
}
const languages = ['zh_CN', 'en']
const i18n = new VueI18n({
locale: 'zh-CN',
messages: getMessages(languages)
})
export default i18n
main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import i18n from './lang'
Vue.config.productionTip = false
new Vue({
router,
store,
i18n,
render: h => h(App)
}).$mount('#app')