需求
通过自动化程序生成的json文件多个json文件,需要将其合并并使用i18n
实现思路
将所有的语言文件放在一个文件夹中,通过js脚本将其内容拼接成一个json文件,然后在生成 i18n多语言化;
代码目录
代码
import { createI18n } from 'vue-i18n';
const modulesFiles = require.context("./locals", true, /\.json$/);
const languageModules = modulesFiles.keys().reduce((modules, modulePath) => {
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, "$1");
const pathArr = moduleName.split("/");
const pathLen = pathArr.length - 1;
let resultItem = modules;
pathArr.map((pItem, pIndex) => {
if(pIndex < pathLen) {
if(!resultItem[pItem]) {
resultItem[pItem] = {}
}
resultItem = resultItem[pItem]
} else {
resultItem[pItem] = modulesFiles(modulePath)
}
})
return modules;
}, {});
const messages = languageModules
const i18n = createI18n({
locale: 'ja',
messages
})
export default i18n
代码说明
这里通过使用require.context 获取文件夹 locals 下的所有.json文件,并将其拼成一个json文件,然后创建i18n。