2013-10-08 114 views
0

這裏是我的查詢代碼jQuery的不工作

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 /郎/ trainer.lang ...文件看起來像:

var I18N = { 
    LANT_LANG_CONSTANT1: 'etc' 
} 

問題是我的函數translateTo只有一次工作,之前包含js文件。僅當我重新更新內容時,文字纔會更改。是否有可能製造一些東西?

+0

它是絕對有可能做出的東西:D:D ...和你多少次調用'翻譯爲了()'?你在哪裏打電話? –

+0

heh)之後包含js文件的這個功能,之前 – ovnia

+0

一次。和onClick一個 – ovnia

回答

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')]); 
    }); 
} 
+0

嘿)真棒)你完全正確)謝謝) – ovnia