Make the "Running on.." string translatable and copy the extraction and conversion of JSX and PO files from Cockpit.
127 lines
3.3 KiB
JavaScript
Executable file
127 lines
3.3 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
function fatal(message, code) {
|
|
console.log((filename || "html2po") + ": " + message);
|
|
process.exit(code || 1);
|
|
}
|
|
|
|
function usage() {
|
|
console.log("usage: po2json [--module=template.js] input output");
|
|
process.exit(2);
|
|
}
|
|
|
|
var fs, po2json, Jed, stdio;
|
|
|
|
try {
|
|
fs = require('fs');
|
|
po2json = require('po2json');
|
|
Jed = require('jed');
|
|
stdio = require('stdio');
|
|
} catch(ex) {
|
|
fatal(ex.message, 127); /* missing looks for this */
|
|
}
|
|
|
|
var argi = 2;
|
|
var filename = null;
|
|
|
|
var opts = stdio.getopt({
|
|
module: { key: "m", args: 1, description: "Module template to include" },
|
|
output: { key: "o", args: 1, description: "Output file" },
|
|
});
|
|
|
|
if (opts.args.length != 1) {
|
|
usage();
|
|
}
|
|
|
|
parse();
|
|
|
|
function prepareHeader(header) {
|
|
var body, statement, plurals = header["plural-forms"], ret = null;
|
|
if (plurals) {
|
|
try {
|
|
/* Check that the plural forms isn't being sneaky since we build a function here */
|
|
Jed.PF.parse(plurals);
|
|
} catch(ex) {
|
|
fatal("bad plural forms: " + ex.message, 1);
|
|
}
|
|
|
|
/* A function for the front end */
|
|
statement = header["plural-forms"];
|
|
if (statement[statement.length - 1] != ';')
|
|
statement += ';';
|
|
ret = 'function(n) {\nvar nplurals, plural;\n' + statement + '\nreturn plural;\n}';
|
|
|
|
/* Added back in later */
|
|
delete header["plural-forms"];
|
|
}
|
|
|
|
/* We don't need to be transferring this */
|
|
delete header["project-id-version"];
|
|
delete header["report-msgid-bugs-to"];
|
|
delete header["pot-creation-date"];
|
|
delete header["po-revision-date"];
|
|
delete header["last-translator"];
|
|
delete header["language-team"];
|
|
delete header["mime-version"];
|
|
delete header["content-type"];
|
|
delete header["content-transfer-encoding"];
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* Parse and process the po data */
|
|
function parse() {
|
|
filename = opts.args[0];
|
|
po2json.parseFile(opts.args[0], { "fuzzy": true }, function(err, jsonData) {
|
|
var plurals, pos;
|
|
|
|
if (err)
|
|
fatal(err.message);
|
|
|
|
var header = jsonData[""];
|
|
if (header)
|
|
plurals = prepareHeader(header);
|
|
|
|
var data = JSON.stringify(jsonData, null, 1);
|
|
|
|
/* We know the brace in is the location to insert our function */
|
|
if (plurals) {
|
|
pos = data.indexOf('{', 1);
|
|
data = data.substr(0, pos + 1) + "'plural-forms':" + String(plurals) + "," + data.substr(pos + 1);
|
|
}
|
|
|
|
if (data == JSON.stringify({}))
|
|
finish("");
|
|
else
|
|
wrap(data);
|
|
});
|
|
}
|
|
|
|
/* Wrap the data if desired */
|
|
function wrap(data) {
|
|
if (opts.module) {
|
|
filename = opts.module;
|
|
fs.readFile(opts.module, { encoding: "utf-8" }, function(err, template) {
|
|
if (err)
|
|
fatal(err.message);
|
|
data = template.replace('{"":{"language":"en"}}', data);
|
|
finish(data);
|
|
});
|
|
} else {
|
|
finish(data);
|
|
}
|
|
}
|
|
|
|
/* Write it out */
|
|
function finish(data) {
|
|
if (opts.output) {
|
|
fs.writeFile(opts.output, data, function(err) {
|
|
if (err)
|
|
fatal(err.message);
|
|
process.exit(0);
|
|
});
|
|
} else {
|
|
process.stdout.write(data);
|
|
process.exit(0);
|
|
}
|
|
}
|