我在应用程序中实现了一个简单的本地化切换。我通过从组合(或其他任何内容)中选择laguage,然后再切换另一个JS语言文件来实现。

function setLang(lang) {
    setCookie('vegindex_lang', lang, 365);

    // Find language 'script' element and replace according to lang
    var elements = document.getElementsByTagName('script');
    for (var i = 0; i < elements.length; i++) {
        if (elements[i].id && elements[i].id == 'lang') {
            var src = 'JavaScript/Localisation/strings_' + lang + '.js';
            document.head.replaceChild(newElement(src), elements[i]);
            loadStrings();
            break;
        }
    }
}

function newElement(src) {
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.src = src;
    s.id = 'lang';

    return s;
}

function loadStrings() {
    // Wizard wrapper window
    wizardWrapper.setTitle(wizard_title);

    // Wizard panel
    wizardButtonDisclaimer.setText(wizard_button_disclaimer);
    wizardButtonBack.setText(wizard_button_back);
    wizardButtonNext.setText(wizard_button_next);

    // Reload wizard
    wizardWrapper.doLayout();
}


语言文件的典型内容:

var wizard_title = 'This is english';
var wizard_button_disclaimer = 'Disclaimer';
var wizard_button_back = 'Back';
var wizard_button_next = 'Next';


它工作正常,但始终加载以前的语言。这意味着:


第一次切换语言-什么也没发生
第二次语言切换-我第一次选择了语言切换


看起来新注入的脚本文件在添加后就无法使用。有人知道为什么会发生这种情况吗?

最佳答案

那可能是因为您注入了脚本标签,并在此之后立即调用loadStrings()。语言文件可能仍在(下载)中。

这称为竞争条件。发生这种情况取决于Internet的速度以及其他一些依赖性,因此您应始终避免这种情况。

您可以通过使用脚本加载器(例如labJS(http://labjs.com/),RequireJS(http://requirejs.org/)或其他任何脚本加载器)来避免这种情况。
这将允许您加载脚本并等待它,然后在成功加载脚本后,执行loadStrings()方法。

关于javascript - 替换JS语言文件会加载旧值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26335163/

10-11 22:50
查看更多