const fs = require('fs'); var languageSrcPath = __dirname + "/../assets/resources/il8n/" var languageDistPath = __dirname + "/language/fliterkey/" var languageMap = {} var keyMapPrefex = 'filterkey.json' var fullkeyPrefex = 'fullkeys.json' var cpkeyPrefex = 'cpkeys.json' var isChinese = (temp) => { let reg = new RegExp("[\\u4E00-\\u9FFF]+", "g") if (reg.test(temp)) { return true } else { return false } } var initLaguage = () => { languageMap['en'] = 'en.json' languageMap['ja'] = 'ja.json' languageMap['kr'] = 'kr.json' languageMap['tw'] = 'tw.json' languageMap['zh'] = 'zh.json' } var lg = [ // "en", // "ja", // "kr", // "tw", "zh" ] var beautifyJson = (str) => { // try { // // 设置缩进为2个空格 // str = JSON.stringify(JSON.parse(str), null, 2); // str = str // .replace(/&/g, '&') // .replace(//g, '>'); // return str.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { // var cls = 'number'; // if (/^"/.test(match)) { // if (/:$/.test(match)) { // cls = 'key'; // } else { // cls = 'string'; // } // } else if (/true|false/.test(match)) { // cls = 'boolean'; // } else if (/null/.test(match)) { // cls = 'null'; // } // return match; // }); // } catch (e) { // alert("异常信息:" + e); // } return str } var generateLanguageJson = (jsstr, iKey, cb) => { let distPath = languageDistPath + "/" if (!fs.existsSync(distPath)) { fs.mkdirSync(distPath); } var keyMap = {} var jsObk = JSON.parse(jsstr) var cpKeyMap = {} for (const key in jsObk) { if (Object.prototype.hasOwnProperty.call(jsObk, key)) { const value = jsObk[key]; if (!isChinese(value)) { keyMap[key] = value } else { if (!cpKeyMap[value]) cpKeyMap[value] = key } } } //产生 dirty key var jsMapstr = JSON.stringify(keyMap) fs.writeFile(languageDistPath + keyMapPrefex, (jsMapstr), function (err) { // 写入成功后err的值就是null,且在该文件夹下生成一个02文件 if (err) { return console.log('文件写入失败!' + err.message); } console.log('文件写入成功!'); }) //重复key var languageKeyToValueMap = {} var keyMap = {} var jsObk = JSON.parse(jsstr) for (const key in jsObk) { if (Object.prototype.hasOwnProperty.call(jsObk, key)) { const value = jsObk[key]; if (isChinese(value)) { languageKeyToValueMap[value] = languageKeyToValueMap[value] || [] languageKeyToValueMap[value].push(key) if (!keyMap[value]) keyMap[value] = key } } } var keyMapstr = JSON.stringify(languageKeyToValueMap) fs.writeFile(distPath + fullkeyPrefex, beautifyJson(keyMapstr), function (err) { // 写入成功后err的值就是null,且在该文件夹下生成一个02文件 if (err) { return console.log('文件写入失败!' + err.message); } }) //保存CPkey var resultMap = {} for (const key in cpKeyMap) { if (Object.prototype.hasOwnProperty.call(cpKeyMap, key)) { const value = cpKeyMap[key]; resultMap[value] = key } } //产生剔除重复值的Json文件 var jsMapstr = JSON.stringify(resultMap) fs.writeFile(distPath + cpkeyPrefex, beautifyJson(jsMapstr), function (err) { // 写入成功后err的值就是null,且在该文件夹下生成一个02文件 if (err) { return console.log('文件写入失败!' + err.message); } }) } var readLanguae = (iKey, cb) => { fs.readFile(languageSrcPath + languageMap[iKey], 'utf8', function (err, dataStr) { if (err) { console.log(err); // 打印失败的结果 return } cb && cb(dataStr) }) } var actionFile = (index, fb) => { if (index >= lg.length) { return } readLanguae(lg[index], (jsondatastr) => { generateLanguageJson(jsondatastr, lg[index], () => { console.log("success: ", lg[index]) actionFile(index + 1) }) }) } var main = () => { initLaguage() actionFile(0) } main();