const fs = require('fs'); var languageSrcPath = __dirname + "/../assets/resources/il8n/" var languageDistPath = __dirname + "/language/dist/" var languageMap = {} var languageKeyToValueMap = {} var keyMapPrefex = '_keyMap.json' var keyValueFilePrefex = '_keyValue.json' //判断是否是数字 // var canNumber = (str) => { // var reg = /^[0-9]+$/; // if (reg.test(str)) { // return true; // } // return false; // } 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", "tw" ] 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 + iKey + "/" if (!fs.existsSync(distPath)) { fs.mkdirSync(distPath); } var keyMap = {} var jsObk = JSON.parse(jsstr) for (const key in jsObk) { if (Object.prototype.hasOwnProperty.call(jsObk, key)) { const value = jsObk[key]; var __vNan = Number(value) // if (!canNumber(value) && isNaN(__vNan)) { // languageKeyToValueMap[value] = languageKeyToValueMap[value] || [] // languageKeyToValueMap[value].push(key) // if (!keyMap[value]) // keyMap[value] = key // } if (isChinese(value)) { languageKeyToValueMap[value] = languageKeyToValueMap[value] || [] languageKeyToValueMap[value].push(key) if (!keyMap[value]) keyMap[value] = key } } } var resultMap = {} for (const key in keyMap) { if (Object.prototype.hasOwnProperty.call(keyMap, key)) { const value = keyMap[key]; resultMap[value] = key } } let index = 0 let allCount = lg.length //产生剔除重复值的Json文件 var jsMapstr = JSON.stringify(resultMap) fs.writeFile(distPath + iKey + keyValueFilePrefex, beautifyJson(jsMapstr), function (err) { // 写入成功后err的值就是null,且在该文件夹下生成一个02文件 if (err) { return console.log('文件写入失败!' + err.message); } index = index + 1 if (index >= allCount) { cb && cb() } }) //提交给CP方的 let cpPath = distPath + "cp/" if (!fs.existsSync(cpPath)) { fs.mkdirSync(cpPath); } fs.writeFile(cpPath + languageMap[iKey], beautifyJson(jsMapstr), function (err) { // 写入成功后err的值就是null,且在该文件夹下生成一个02文件 if (err) { return console.log('文件写入失败!' + err.message); } index = index + 1 if (index >= allCount) { cb && cb() } }) // 产生Key值 var keyMapstr = JSON.stringify(languageKeyToValueMap) fs.writeFile(distPath + iKey + keyMapPrefex, beautifyJson(keyMapstr), function (err) { // 写入成功后err的值就是null,且在该文件夹下生成一个02文件 if (err) { return console.log('文件写入失败!' + err.message); } index = index + 1 if (index >= allCount) { cb && cb() } }) //用来替换更新的源文件 fs.writeFile(distPath + languageMap[iKey], beautifyJson(jsstr), function (err) { // 写入成功后err的值就是null,且在该文件夹下生成一个02文件 if (err) { return console.log('文件写入失败!' + err.message); } index = index + 1 if (index >= allCount) { cb && cb() } }) } 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();