From a03cd29b6868887c9b524ff23e46a896f0d9ee5d Mon Sep 17 00:00:00 2001 From: Christopher Allen Date: Fri, 18 Jun 2021 22:08:33 +0100 Subject: [PATCH] Separate script to rebuild msg/json/en.json, qqq.json etc. There are some files in msg/json/ (currently en.json, qqq.json, constants.json and synonyms.json) that are generated by scripts/i18n/js_to_json.py as part of the language file build process - but this only needs to be done when messages.js is updated and and usually requires some manual cleanup, so remove this step from the existing buildLangfiles gulp script and create a separate command ('npm run generate:langfiles') to do this when required. --- gulpfile.js | 1 + msg/messages.js | 12 +++++---- package.json | 1 + scripts/gulpfiles/build_tasks.js | 42 +++++++++++++++++++++++++------- 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 496211472..887e18855 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -23,6 +23,7 @@ var cleanupTasks = require('./scripts/gulpfiles/cleanup_tasks'); module.exports = { deployDemos: appengineTasks.deployDemos, default: buildTasks.build, + generateLangfiles: buildTasks.generateLangfiles, build: buildTasks.build, buildCore: buildTasks.core, buildBlocks: buildTasks.blocks, diff --git a/msg/messages.js b/msg/messages.js index 884c97245..636de4bd5 100644 --- a/msg/messages.js +++ b/msg/messages.js @@ -8,13 +8,15 @@ * @fileoverview English strings. * @author fraser@google.com (Neil Fraser) * - * After modifying this file, either run "build.py" from the parent directory, - * or run (from this directory): - * ../scripts/i18n/js_to_json.py - * to regenerate json/{en,qqq,synonyms}.json. + * After modifying this file, run: + * + * npm run generate:langfiles + * + * to regenerate json/{en,qqq,constants,synonyms}.json. * * To convert all of the json files to .js files, run: - * ../scripts/i18n/create_messages.py json/*.json + * + * npm run build:langfiles */ 'use strict'; diff --git a/package.json b/package.json index 6adb5f0a1..341b118ce 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "deployDemos": "gulp deployDemos", "format": "git-clang-format", "format:sortrequires": "gulp sortRequires", + "generate:langfiles": "gulp generateLangfiles", "license": "gulp checkLicenses", "lint": "eslint .", "package": "gulp package", diff --git a/scripts/gulpfiles/build_tasks.js b/scripts/gulpfiles/build_tasks.js index 5b196d7ac..f57e0d178 100644 --- a/scripts/gulpfiles/build_tasks.js +++ b/scripts/gulpfiles/build_tasks.js @@ -408,22 +408,45 @@ goog.require('Blockly.requires'); }); }; +/** + * This task regenrates msg/json/en.js and msg/json/qqq.js from + * msg/messages.js. + */ +function generateLangfiles(done) { + // Run js_to_json.py + const jsToJsonCmd = `python scripts/i18n/js_to_json.py \ + --input_file ${path.join('msg', 'messages.js')} \ + --output_dir ${path.join('msg', 'json')} \ + --quiet`; + execSync(jsToJsonCmd, { stdio: 'inherit' }); + + console.log(` +Regenerated several flies in msg/json/. Now run + + git diff msg/json/*.json + +and check that operation has not overwritten any modifications made to +hints, etc. by the TranslateWiki volunteers. If it has, backport +their changes to msg/messages.js and re-run 'npm run generate:langfiles'. + +Once you are satisfied that any new hints have been backported you may +go ahead and commit the changes, but note that the generate script +will have removed the translator credits - be careful not to commit +this removal! +`); + + done(); +}; + /** * This task builds Blockly's lang files. * msg/*.js */ function buildLangfiles(done) { - // Run js_to_json.py - const jsToJsonCmd = `python ./scripts/i18n/js_to_json.py \ ---input_file ${path.join('msg', 'messages.js')} \ ---output_dir ${path.join('msg', 'json')} \ ---quiet`; - execSync(jsToJsonCmd, { stdio: 'inherit' }); - // Run create_messages.py let json_files = fs.readdirSync(path.join('msg', 'json')); json_files = json_files.filter(file => file.endsWith('json') && - !(new RegExp(/(keys|synonyms|qqq|constants)\.json$/).test(file))); + !(new RegExp(/(keys|synonyms|qqq|constants)\.json$/).test(file))); json_files = json_files.map(file => path.join('msg', 'json', file)); const createMessagesCmd = `python ./scripts/i18n/create_messages.py \ --source_lang_file ${path.join('msg', 'json', 'en.json')} \ @@ -432,7 +455,7 @@ function buildLangfiles(done) { --key_file ${path.join('msg', 'json', 'keys.json')} \ --output_dir ${path.join('msg', 'js')} \ --quiet ${json_files.join(' ')}`; - execSync(createMessagesCmd, { stdio: 'inherit' }); + execSync(createMessagesCmd, { stdio: 'inherit' }); done(); }; @@ -514,6 +537,7 @@ module.exports = { build: build, core: buildCore, blocks: buildBlocks, + generateLangfiles: generateLangfiles, langfiles: buildLangfiles, uncompressed: buildUncompressed, compressed: buildCompressed,