scratch-blocks/i18n/js_to_json.js
chrisgarrity 5cb1651e56 Clarifications and consistency
*  removed all the generated files (<locale>.json, <locale>.js) except for ‘en’ versions and added them to git ignore.
* updated cleanup.sh to use our messages.
* added validation check to fail if any translations include newlines
* skip generating js files other than ‘en’ as we don’t use them
* Revised messages.js to use _single_ quoted strings instead of double (consistent with Blockly - if we need to import more strings), and switch the validations to check for single not double quotes.
* additional small changes for simplicity and ergonomics

Not handling category menu at this time as it’s managed differently in scratch-gui.
2018-06-13 10:50:20 -04:00

46 lines
1.4 KiB
JavaScript

const es = require('event-stream');
const fs = require('fs');
const path = require('path');
const assert = require('assert');
// Storage object
const storage = {};
// File paths
const PATH_INPUT = path.resolve(__dirname, '../msg/messages.js');
const PATH_OUTPUT = path.resolve(__dirname, '../msg/json/en.json');
// Match function
const match = function (str) {
if (str.indexOf('Blockly.Msg.') !== 0) return false;
assert.notStrictEqual(str.indexOf('";'), str.length - 2, `[${str}] uses double quoted string, should use single quotes.`);
if (str.indexOf("';") !== str.length - 2) return false;
return true;
}
// Extract key and value from message definition
const extract = function (str) {
str = str.split('Blockly.Msg.')[1].split(' ');
return {
key: str[0],
value: str
.splice(2, str.length)
.join(' ')
.slice(1, -2) // strip off initial ', and ending ';
.replace(/\\'/g, "'")
};
};
// Stream input and push each match to the storage object
const stream = fs.createReadStream(PATH_INPUT);
stream
.pipe(es.split('\n'))
.pipe(es.mapSync(function (str) {
if (!match(str)) return;
const result = extract(str);
storage[result.key] = result.value;
}))
.pipe(es.wait(function (err) {
if (err) throw new Error(err);
fs.writeFileSync(PATH_OUTPUT, JSON.stringify(storage, null, 4));
}));