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