vue-react-i18n-plugin
Version:
中文国际化插件,适用于 vue,react
57 lines (52 loc) • 1.5 kB
JavaScript
const utils = require("./utils");
const babelUtils = require("../babel-plugin/utils");
const path = require("path");
const ora = require("ora");
const fs = require("fs");
const myOra = ora();
const translate = require("./translate");
/**
*
* @param options
*/
function genConfigFile(opt) {
let options = {
i18nDir: utils.defaultDir(),
...opt,
};
myOra.info("国际化配置生成中...");
let i18nMap = babelUtils.getI18nMap(),
oldKeysMap = {};
let localeFilePath = path.resolve(options.i18nDir, "./zh_CN/index.js");
if (fs.existsSync(localeFilePath)) {
oldKeysMap = require(localeFilePath);
}
let oldKeysMapKeys = Object.keys(oldKeysMap);
let textKeyArr = [],
newTextKeyArr = [],
sortKeysMap = {};
Object.keys(i18nMap).map((key) => {
if (oldKeysMapKeys.length && !oldKeysMap[key]) {
newTextKeyArr.push(key);
} else {
textKeyArr.push(key);
}
});
if (oldKeysMapKeys.length) {
textKeyArr.sort((a, b) => {
return oldKeysMapKeys.indexOf(a) - oldKeysMapKeys.indexOf(b);
});
}
textKeyArr.concat(newTextKeyArr).forEach((key) => {
sortKeysMap[key] = i18nMap[key];
});
let localeCode = "module.exports = " + JSON.stringify(sortKeysMap);
utils.writeFile(path.resolve(options.i18nDir, "./zh_CN/index.js"), localeCode);
translate(options,sortKeysMap);
}
/**
*
* @type {genConfigFile}
*/
module.exports = genConfigFile;
module.exports.utils = utils;