2009-08-01 72 views
12

我不知道如何使用JQuery處理本地化。我想用德文文本設置innerHTML,但是如果瀏覽器配置爲使用英文,那麼我想設置英文文本。使用JQuery進行本地化?

在PHP中,我使用gettext這樣的東西,但如何在JavaScript/jQuery中做到這一點?

回答

15

有沒有簡單的解決方案。我可能會做的是爲每種語言創建幾種帶有語言文本的腳本,並在PHP中包含適當的腳本。所以,如果有人使用您的網站的英文版本,你會只包括英文文件,如果有人使用德語版本,將包括德國語言文件等

例子:

// your script logic 
myscript.js 

// language texts 
myscript.en.js 
myscript.de.js 
myscript.it.js 
... 

您可以定義所有語言文件這樣的:

LANG = { 
    txt1: 'English text1', 
    txt2: 'English text2' 
    ... 
}; 

確保你只包括那些在HTML中的一個,並確保包括語言文件第一即

<script type="text/javascript" src="myscript.de.js"></script> 
<script type="text/javascript" src="myscript.js"></script> 

然後你就可以使用這些本地化的文本在主腳本,例如:

$(document).ready(function() { 
    alert(LANG.txt1); 
}); 

什麼是最好的它是你的邏輯(myscript.js在這個例子中)不擔心本地化和你贏了」如果你想添加一個新的語言文件,你不得不改變它。

3

實際上你根本不需要JQuery。

javascript中的導航器對象(http://www.comptechdoc.org/independent/web/cgi/javamanual/javanavigator.html)包含由瀏覽器的當前語言環境設置的用戶語言(IE)和語言(Netscape/Firefox)屬性。

爲了解決你的例子,你可以使用類似的東西;

 
    
    var textToSet = null; 
    var userLang = null; 

    /* 
    -if userLanguage exists they're in IE, else firefox 
    -get the first two letters in lowercase to guarantee 
    an easily evaluated base language 
    */ 
    if(navigator.userLanguage) baseLang = substring(navigator.userLanguage,0,2).toLowerCase(); 
    else baseLang = substring(navigator.language,0,2).toLowerCase(); 

    //check languages 
    switch(baseLang) 
    { 
    case "de": 
     //German 
     textToSet = "german text"; 
     break; 
    default: 
     textToSet = "english text"; 
    } 
    document.getElementById('elementToSetTextInto').innerHTML = textToSet; 


請記住,您可能要基於關閉基地的語言和區域設置不同的文本。在這種情況下,尋找「EN-US」,「去德」。文化代碼網站很容易搜索到(僅在第一篇文章中有1個鏈接;))

希望能爲你工作。

0

試試這個。 TranslateThis Button是一個輕量級的Javascript翻譯部件。它使用AJAX和Google Language API快速翻譯任何頁面。

Here...

7

我沒有使用它,但我想使用jquery-localize的一個項目。如果您不介意將翻譯基於定義在您的元素上的'rel'屬性,那麼它看起來是一個不錯的選擇。從自述

實施例:

HTML

<p rel="localize[title]">Tracker Pro XT Deluxe</p> 
<p rel="localize[search.placeholder]">Search...</p> 
<p rel="localize[search.button]">Go!</p> 
<p rel="localize[footer.disclaimer]">Use at your own risk.</p> 
<p rel="localize[menu.dashboard]">Dashboard</p> 
<p rel="localize[menu.list]">Bug List</p> 
<p rel="localize[menu.logout]">Logout</p> 

應用-ES。JSON

{ 
    title: "Tracker Pro XT Deluxo", 
    search: { 
    placeholder: "Searcho...", 
    button: "Vamos!" 
    }, 
    footer: { 
    disclaimer: "Bewaro." 
    }, 
    menu: { 
    dashboard: "Dashboardo", 
    list: "Bug Listo", 
    logout: "Exito" 
    } 
} 

本地化吧!

$("rel*=localize").localize("application", { language: "es" }) 
1

既然你已經和你的PHP應用程序中使用gettext的,你應該考慮使用這種javascript implementation of gettext

它不使用編譯的.mo文件,但它會使用你已經擁有你的.po文件。

此方法的優點是可以在一個位置管理所有翻譯。