0

これが私のクエリコードです

function translateTo(lang) {
    if (TRAINER_MULTILANG > 0) {
        $.getScript("js/lang/trainer.lang."+lang+".js")
            .done(function(script,textStatus) {
                pushLang(I18N);
                TRAINER_CURRENT_LANG = lang;
            })
            .fail(function( jqxhr, settings, exception ) {
                console.log("[i18n] Failed to load langfile. Loading default () instead...");
                $.getScript("js/lang/trainer.lang."+TRAINER_DEFAULT_LANG+".js")
                    .done(function(script,textStatus) {
                        pushLang(I18N);
                        TRAINER_CURRENT_LANG = TRAINER_DEFAULT_LANG;
                    });
            });
    } else {
        $.getScript("js/lang/trainer.lang."+TRAINER_DEFAULT_LANG+".js")
            .done(function(script,textStatus) {
                pushLang(I18N);
            });
    }
}
function pushLang(data) {
    $('[data-i18n="true"]').each(function (e) {
        $(this).html(data[$(this).html()]);
    });
}

私のhtmlは次のようになります:

<span data-i18n="true">LANT_LANG_CONSTANT1</span>
<span data-i18n="true">LANT_LANG_CONSTANT2</span>

js/lang/trainer.lang... ファイルは次のようになります。

var I18N = {
    LANT_LANG_CONSTANT1:  'etc'
}

問題は、関数 translateTo が、この関数で js ファイルを含めた直後の . また、コンテンツを再更新した場合にのみテキストが変更されます。何かを作ることは可能ですか?

4

1 に答える 1

2

問題は、lang 定数の html 文字列が翻訳されたテキストに置き換えられることです。データ属性内に定数を保存すると、この問題を回避できます。そう:

<span data-i18n="true" data-constant="LANT_LANG_CONSTANT1"></span>
<span data-i18n="true" data-constant="LANT_LANG_CONSTANT2"></span>

次に、あなたのpushLangで:

function pushLang(data) {
    $('[data-i18n="true"]').each(function (e) {
        $(this).html(data[$(this).data('constant')]);
    });
}

編集:

すべての html 定数を変更したくない場合は、最初に pushLang を呼び出したときに定数をデータ オブジェクトに保存できます。

function pushLang(data) {
    $('[data-i18n="true"]').each(function (e) {
        if(!$(this).data('constant')){
             $(this).data('constant', $(this).html());
        }

        $(this).html(data[$(this).data('constant')]);
    });
}
于 2013-10-08T16:05:47.930 に答える