* setLocale uses Object.assign so any new keys in Blockly.Msg are maintained after changing locale. I.e. if a translation doesn’t exist in the translation English default will be used. In theory, it could end up with something other than English if the key is in one translation, but not another.
However, it’s unlikely as we’re pulling the translations from transifex and either they will all have the key (if the key exists in the `en.json` source on transifex), or none of them will have the key.
* translate script only generates `en` sources.
* translate:update script generates new scratch_msgs.js file. It will fail if the keys in the downloaded files don’t match the ones in messages.
Dynamic menus are constructed in the VM. Add a function to ScratchMsgs that it can use to look up localized strings for jsonInit. Add missing strings for dynamic menus.
* 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.
* Added script to create combined locales `Blockly.ScratchMsgs.locales`
* Regenerated en.json after changing single quoted strings in messages.js to double quoted strings.
* Include `create_scratch_msgs.js` in `npm run translate`
locale=<locale-string>` to the URL.
* Added assertions so translate fails if `messages.js` has incorrect strings, or if any of the downloaded locale json files have errors in the translations.
* Playground will load different locales.