svghmi/svghmi.js
branchsvghmi
changeset 3148 b8c0dfdf364b
parent 3145 80ebb88cf7b7
parent 3144 2af6afaccaf2
child 3152 c80a5a7198ea
--- a/svghmi/svghmi.js	Tue Feb 16 11:35:56 2021 +0100
+++ b/svghmi/svghmi.js	Tue Feb 16 11:47:52 2021 +0100
@@ -212,37 +212,48 @@
 }
 
 function switch_langnum(langnum) {
-    if(langnum == current_lang) {
-        return;
-    }
+    langnum = Math.max(0, Math.min(langs.length - 1, langnum));
 
     for (let translation of translations) {
-        let [objs, msgs, orig] = translation;
-        let msg = langnum == 0 ? orig : msgs[langnum - 1];
+        let [objs, msgs] = translation;
+        let msg = msgs[langnum];
         for (let obj of objs) {
             multiline_to_svg_text(obj, msg);
             obj.setAttribute("lang",langnum);
         }
     }
-    current_lang = langnum;
+    return langnum;
 }
 
 // backup original texts
 for (let translation of translations) {
-    let [objs] = translation;
-    translation.push(svg_text_to_multiline(objs[0])); 
+    let [objs, msgs] = translation;
+    msgs.unshift(svg_text_to_multiline(objs[0])); 
 }
 
 var lang_local_index = hmi_local_index("lang");
+var langcode_local_index = hmi_local_index("lang_code");
+var langname_local_index = hmi_local_index("lang_name");
 subscribers(lang_local_index).add({
     indexes: [lang_local_index],
     new_hmi_value: function(index, value, oldval) {
-        switch_langnum(value);
+        let current_lang =  switch_langnum(value);
+        let [langname,langcode] = langs[current_lang];
+        apply_hmi_value(langcode_local_index, langcode);
+        apply_hmi_value(langname_local_index, langname);
         switch_page();
     }
 });
-var current_lang = 0;
-switch_langnum(cache[lang_local_index]);
+
+function setup_lang(){
+    let current_lang = cache[lang_local_index];
+    let new_lang = switch_langnum(current_lang);
+    if(current_lang != new_lang){
+        apply_hmi_value(lang_local_index, new_lang);
+    }
+}
+
+setup_lang();
 
 function update_subscriptions() {
     let delta = [];