add tools/locale (string extraction)
This commit is contained in:
parent
755d1d8a61
commit
0ee1caa7bb
1 changed files with 67 additions and 0 deletions
67
tools/locale/strings.js
Normal file
67
tools/locale/strings.js
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
var path = Ox.PATH.replace('/build/', '/dev/'),
|
||||||
|
files = [
|
||||||
|
path + 'Ox/json/Ox.json',
|
||||||
|
path + 'Ox.UI/json/Ox.UI.json'
|
||||||
|
],
|
||||||
|
strings = {
|
||||||
|
'inside Ox._()': {},
|
||||||
|
'outside Ox._()': {}
|
||||||
|
},
|
||||||
|
lines = ['\n'];
|
||||||
|
|
||||||
|
Ox.getJSON(files, function(data) {
|
||||||
|
files = [];
|
||||||
|
Ox.forEach(data, function(data, file) {
|
||||||
|
files = files.concat(Ox.flatten(data.files).filter(function(file) {
|
||||||
|
return Ox.endsWith(file, '.js');
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
Ox.getAsync(files.map(function(file) {
|
||||||
|
return Ox.PATH + file;
|
||||||
|
}), Ox.get, function(data) {
|
||||||
|
Ox.forEach(data, function(data, file) {
|
||||||
|
var inside = false,
|
||||||
|
level = 0,
|
||||||
|
tokens = Ox.tokenize(data);
|
||||||
|
tokens.forEach(function(token, i) {
|
||||||
|
var key, string;
|
||||||
|
if (i >= 3
|
||||||
|
&& tokens[i - 3].value + tokens[i - 2].value
|
||||||
|
+ tokens[i - 1].value + tokens[i].value == 'Ox._('
|
||||||
|
) {
|
||||||
|
inside = true;
|
||||||
|
level = 0;
|
||||||
|
} else if (inside) {
|
||||||
|
if (token.value == '(') {
|
||||||
|
level++;
|
||||||
|
} else if (token.value == ')') {
|
||||||
|
level--;
|
||||||
|
inside = level > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (token.type == 'string' && token.value.length > 2) {
|
||||||
|
key = inside ? 'inside Ox._()' : 'outside Ox._()';
|
||||||
|
string = token.value.slice(1, -1)
|
||||||
|
.replace(/\\'/g, '\'')
|
||||||
|
.replace(/([^\\]")/, '\\"')
|
||||||
|
if (!Ox.isArray(strings[key][string])) {
|
||||||
|
strings[key][string] = [];
|
||||||
|
}
|
||||||
|
strings[key][string].push(
|
||||||
|
file.replace(path, '') + ':' + token.line
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
Ox.forEach(strings, function(values, key) {
|
||||||
|
lines.push(key);
|
||||||
|
Ox.sort(Object.keys(values)).forEach(function(string) {
|
||||||
|
lines.push(Ox.repeat(' ', 4) + '"' + string + '"');
|
||||||
|
Ox.sort(strings[key][string]).forEach(function(file) {
|
||||||
|
lines.push(Ox.repeat(' ', 8) + file);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
Ox.print(lines.join('\n'));
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue