const fs = require('fs'); var languageSrcPath = __dirname + "/language/src/" var languageDistPath = __dirname + "/language/dist/" var keyMapPrefex = '_keyMap.json' var languageMap = [] var pathInfor = [] var count = 0 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 initLaguage = () => { languageMap.push({name: 'en', file: 'en.json'}) languageMap.push({name: 'ja', file: 'ja.json'}) languageMap.push({name: 'kr', file: 'kr.json'}) languageMap.push({name: 'tw', file: 'tw.json'}) languageMap.push({name: 'zh', file: 'zh.json'}) } var replaceValue = (ikeyIndex) => { let languageJson = pathInfor[ikeyIndex] var scrJson = JSON.parse(languageJson[0].content) //被翻译的json var distJson = JSON.parse(languageJson[1].content) //需要更新替换json var keyValueJson = JSON.parse(languageJson[2].content) //key-map //多key-多value, 源文件 let srcMap = {} for (const key in scrJson) { if (Object.prototype.hasOwnProperty.call(scrJson, key)) { srcMap[key] = scrJson[key] } } //唯一key-value let distMap = {} for (const key in distJson) { if (Object.prototype.hasOwnProperty.call(distJson, key)) { distMap[key] = distJson[key] } } //key集合 let keyValueMap = {} for (const key in keyValueJson) { if (Object.prototype.hasOwnProperty.call(keyValueJson, key)) { keyValueMap[key] = keyValueJson[key] } } for (const key in srcMap) { let getMultKey = (keyV) => { for (const key in keyValueMap) { if (Object.prototype.hasOwnProperty.call(keyValueMap, key)) { let keysArrays = keyValueMap[key] if (keysArrays.indexOf(keyV) >= 0) { return keyValueMap[key] } } } return [] } let newValue = srcMap[key] let keysArray = getMultKey(key) for (let index = 0; index < keysArray.length; index++) { distMap[keysArray[index]] = newValue } } //产生要替换的Json文件 var jsMapstr = JSON.stringify(distMap) fs.writeFile(languageDistPath + languageMap[ikeyIndex].name, beautifyJson(jsMapstr), function (err) { // 写入成功后err的值就是null,且在该文件夹下生成一个02文件 if (err) { return console.log('文件写入失败!' + err.message); } console.log('文件写入成功!'); }) } var readLanguae = (name, cb) => { fs.readFile(name, 'utf8', function (err, dataStr) { if (err) { console.log(err); // 打印失败的结果 return } console.log(dataStr); // 打印成功的结果 cb && cb(dataStr) }) } var readJson = (icount, cb) => { let iKey = languageMap[count].name let path = __dirname + "/language/src/" + iKey + "/" readLanguae(path, (jsondatastr) => { pathInfor[count] = {} pathInfor[count].name = path pathInfor[count].content = jsondatastr if (icount >= 5) { cb && cb() } else { readJson(count + 1, cb) } }) } var main = () => { initLaguage() readJson(0, () => { replaceValue() }) } main();