141 lines
4.2 KiB
JavaScript
141 lines
4.2 KiB
JavaScript
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, '<')
|
||
// .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(); |