diff --git a/HISTORY.md b/HISTORY.md index 9fe406a1..8996d4f6 100755 --- a/HISTORY.md +++ b/HISTORY.md @@ -11,6 +11,7 @@ * new MOUSE POSITION primitive reporter in the SENSING category * new "position" choice in OF reporter's attribute dropdown, reports a list of XY coordinates * new "categories" choice in MY reporter's dropdown, reports an ordered list of all category names whose indices match the "category" reported elsewhere + * new localization extension primitives (prefixed "loc_") * new "Tad" costume series, thanks, Meghan and Brian! * **Notable Changes:** * exporting a library includes dependencies (auto-select all referenced blocks) @@ -36,7 +37,8 @@ * extensions: added new extension primitive "loc_translate(text)" * extensions: added more extension translation primitives, under construction * objects: tweaked ASK menu display distinction for FALSE Booleans -* extensions: tweaked localization extension prims, under construction +* extensions: tweaked localization extension prims, under construction +* extensions, gui: added new extension prims (done) ### 2022-04-03 * objects: added shortcut support for ASK menu items diff --git a/snap.html b/snap.html index a7aa671c..28b31a61 100755 --- a/snap.html +++ b/snap.html @@ -20,7 +20,7 @@ - + diff --git a/src/extensions.js b/src/extensions.js index 55b1efe8..b9afd05c 100644 --- a/src/extensions.js +++ b/src/extensions.js @@ -29,7 +29,7 @@ /*global modules, List, StageMorph, Costume, SpeechSynthesisUtterance, Sound, IDE_Morph, CamSnapshotDialogMorph, SoundRecorderDialogMorph, isSnapObject, nop, -Color, Process, contains, localize, SnapTranslator*/ +Color, Process, contains, localize, SnapTranslator, isString*/ /*jshint esversion: 11, bitwise: false*/ @@ -806,16 +806,19 @@ SnapExtensions.primitives.set( } ); -/* SnapExtensions.primitives.set( 'loc_set(language, [msg])', function (lang, msg, proc) { - if (arguments.length === 1) { - return SnapTranslator.language; + var ide = this.parentThatIsA(IDE_Morph), + disabled = ['receiveGo', 'receiveCondition', 'receiveMessage'], + callback = null; + ide.loadNewProject = false; + if (isString(msg) && !contains(disabled, proc.topBlock.selector)) { + callback = () => ide.broadcast(msg); } + ide.setLanguage(lang, callback, true, true); // don't save, delay } ); -*/ SnapExtensions.primitives.set( 'loc_translations()', diff --git a/src/gui.js b/src/gui.js index 0d311c49..63550a12 100644 --- a/src/gui.js +++ b/src/gui.js @@ -86,7 +86,7 @@ BlockVisibilityDialogMorph, ThreadManager*/ // Global stuff //////////////////////////////////////////////////////// -modules.gui = '2022-March-18'; +modules.gui = '2022-April-04'; // Declarations @@ -6611,7 +6611,7 @@ IDE_Morph.prototype.languageMenu = function () { menu.popup(world, pos); }; -IDE_Morph.prototype.setLanguage = function (lang, callback, noSave) { +IDE_Morph.prototype.setLanguage = function (lang, callback, noSave, delay) { var translation = document.getElementById('language'), src = this.resourceURL('locale', 'lang-' + lang + '.js'); SnapTranslator.unload(); @@ -6619,16 +6619,17 @@ IDE_Morph.prototype.setLanguage = function (lang, callback, noSave) { document.head.removeChild(translation); } if (lang === 'en') { - return this.reflectLanguage('en', callback, noSave); + return this.reflectLanguage('en', callback, noSave, delay); } translation = document.createElement('script'); translation.id = 'language'; - translation.onload = () => this.reflectLanguage(lang, callback, noSave); + translation.onload = () => + this.reflectLanguage(lang, callback, noSave, delay); document.head.appendChild(translation); translation.src = src; }; -IDE_Morph.prototype.reflectLanguage = function (lang, callback, noSave) { +IDE_Morph.prototype.reflectLanguage = function (lang, callback, noSave, delay) { var projectData, urlBar = location.hash; SnapTranslator.language = lang; @@ -6658,12 +6659,12 @@ IDE_Morph.prototype.reflectLanguage = function (lang, callback, noSave) { this.newProject(); location.hash = urlBar; } else { - this.openProjectString(projectData); + this.openProjectString(projectData, delay ? callback : null); } if (!noSave) { this.saveSetting('language', lang); } - if (callback) {callback.call(this); } + if (callback && !delay) {callback.call(this); } }; // IDE_Morph blocks scaling