-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathandroid.js
120 lines (106 loc) · 2.97 KB
/
android.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env node
var fs = require("fs");
var path = require("path");
var xml2js = require("xml2js");
var common = require("./common.js");
var specialChars = {
"&": "&",
">": ">",
"<": "<",
"\\\'": "\'",
"\\n": "\n"
};
function removeFormat(value) {
for (var key in specialChars) {
if (specialChars.hasOwnProperty(key)) {
value = common.replaceAll(value, key, specialChars[key]);
}
}
return value;
}
function addFormat(value) {
for (var key in specialChars) {
if (specialChars.hasOwnProperty(key)) {
value = common.replaceAll(value, specialChars[key], key);
}
}
return value;
}
function getFiles(dir, lang) {
var files = common.getFiles(dir, []);
files = files.filter(function(item) {
var matchpath;
if (lang === "") {
matchpath = "/values/strings.xml";
} else {
matchpath = "/values-" + lang + "/strings.xml";
}
return path.extname(item) === ".xml" && item.indexOf(matchpath) !== -1;
});
return files;
}
function parse(data) {
var obj = {};
for (var i = 0; i < data.length; i++) {
var item = data[i];
//no need to translate
if (item["$"]["translatable"] === "false") {
continue;
}
var value = item["_"];
if (value) {
value = removeFormat(value);
obj[item["$"]["name"]] = value;
}
}
return obj;
}
function getData(dir, lang) {
var files = getFiles(dir, lang);
var obj = {};
files.map(function(name) {
var raw = fs.readFileSync(name);
var parser = new xml2js.Parser();
parser.parseString(raw, function(err, result) {
if (err) {
console.error(name + " file has syntax error");
return;
}
var data = result["resources"]["string"];
if (data) {
obj = parse(data);
}
});
});
return obj;
}
function setData(newdata, dir, fromLang, toLang) {
var files = getFiles(dir, fromLang);
var olddata = getData(dir, fromLang);
files.map(function(name) {
var newname;
if (fromLang === "") {
newname = name.replace("/values", "/values-" + toLang);
} else {
newname = name.replace("/values-" + fromLang, "/values-" + toLang);
}
common.createParentFolder(newname);
var string = "<resources>\n";
for (var key in olddata) {
if (olddata.hasOwnProperty(key)) {
var oldvalue = olddata[key];
var value = newdata[oldvalue];
if (value) {
value = addFormat(value);
string += "\t<string name=\"" + key + "\">" + value + "</string>\n";
}
}
}
string += "</resources>\n";
fs.writeFileSync(newname, string);
});
}
module.exports = {
getData,
setData
};