diff -r 8388e6d4aa61 -r 2af6afaccaf2 svghmi/svghmi.js --- a/svghmi/svghmi.js Mon Feb 15 15:46:47 2021 +0100 +++ b/svghmi/svghmi.js Tue Feb 16 09:38:28 2021 +0100 @@ -211,37 +211,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 = [];