逐步解說:將已當地語系化的資源加入至 JavaScript 檔
更新:2007 年 11 月
本逐步解說示範如何將當地語系化資源包含在 ECMAScript (JavaScript) 檔案中。本逐步解說中的資源為字串。當您建立了獨立的 JavaScript 檔案,以及應用程式必須提供不同語言和文化特性的不同值時,需要將當地語系化的資源包含在 JavaScript 檔案中。
獨立的 JavaScript 不會嵌入成組件中的資源,因此無法存取資源檔中的值。您應該將當地語系化的字串值直接加入至指令碼檔案中才對。當指令碼在瀏覽器中執行時,會擷取當地語系化的值。
您要為每一個支援的語言和文化特性,建立一個獨立的指令碼檔案。在每一個指令碼檔案中,您要以 JSON 格式包含物件,此物件內含該語言和文化特性的當地語系化的資源值。
必要條件
若要實作本教學課程中的程序,您需要:
Microsoft Visual Studio 2005 或 Microsoft Visual Web Developer Express 版。
具備 AJAX 能力的 ASP.NET 網站。
建立包含當地語系化資源值的 JavaScript 檔案
若要將資源值加入至 JavaScript 檔案
在網站的根目錄中,新增名為 Scripts 的資料夾。
在 Scripts 資料夾中,新增名為 CheckAnswer.js 的 JScript 檔案,然後將下列程式碼加入至檔案中。
Sys.Application.add_load(SetButton); function SetButton() { $get('Button1').value = Answer.Verify; } function CheckAnswer() { var firstInt = $get('firstNumber').innerText; var secondInt = $get('secondNumber').innerText; var userAnswer = $get('userAnswer'); if ((Number.parseLocale(firstInt) + Number.parseLocale(secondInt)) == userAnswer.value) { alert(Answer.Correct); return true; } else { alert(Answer.Incorrect); return false; } } Answer={ "Verify":"Verify Answer", "Correct":"Yes, your answer is correct.", "Incorrect":"No, your answer is incorrect." };
Sys.Application.add_load(SetButton); function SetButton() { $get('Button1').value = Answer.Verify; } function CheckAnswer() { var firstInt = $get('firstNumber').innerText; var secondInt = $get('secondNumber').innerText; var userAnswer = $get('userAnswer'); if ((Number.parseLocale(firstInt) + Number.parseLocale(secondInt)) == userAnswer.value) { alert(Answer.Correct); return true; } else { alert(Answer.Incorrect); return false; } } Answer={ "Verify":"Verify Answer", "Correct":"Yes, your answer is correct.", "Incorrect":"No, your answer is incorrect." };
指令碼程式碼會為 Sys.Application 類別的 load 事件加入處理常式。處理常式會設定按鈕文字。此處理常式不會將文字設定為字串,而是將文字設定為名為 Answer.Verify 的類別中所定義的值。這麼做可讓程式碼使用當地語系化的值。
指令碼也包含一個函式,會檢查使用者加入兩個數字的結果。它會使用 alert 函式讓使用者知道答案是否正確。至於按鈕文字,alert 對話方塊中所顯示的訊息會設定為當地語系化的字串值,而不會回傳給伺服器。
名為 Answer 的型別會使用於指令碼中,用以定義要用在檔案中之當地語系化的值集合。Answer 型別在 CheckAnswer.js 檔案的結尾定義為 JSON 格式。
在 Scripts 資料夾中,新增名為 CheckAnswer.it-IT.js 的 JScript 檔案。將下列程式碼加入至該檔案中。
Sys.Application.add_load(SetButton); function SetButton() { $get('Button1').value = Answer.Verify; } function CheckAnswer() { var firstInt = $get('firstNumber').innerText; var secondInt = $get('secondNumber').innerText; var userAnswer = $get('userAnswer'); if ((Number.parseLocale(firstInt) + Number.parseLocale(secondInt)) == userAnswer.value) { alert(Answer.Correct); return true; } else { alert(Answer.Incorrect); return false; } } Answer={ "Verify":"Verificare la risposta", "Correct":"Si, la risposta e’ corretta.", "Incorrect":"No, la risposta e’ sbagliata." };
Sys.Application.add_load(SetButton); function SetButton() { $get('Button1').value = Answer.Verify; } function CheckAnswer() { var firstInt = $get('firstNumber').innerText; var secondInt = $get('secondNumber').innerText; var userAnswer = $get('userAnswer'); if ((Number.parseLocale(firstInt) + Number.parseLocale(secondInt)) == userAnswer.value) { alert(Answer.Correct); return true; } else { alert(Answer.Incorrect); return false; } } Answer={ "Verify":"Verificare la risposta", "Correct":"Si, la risposta e’ corretta.", "Incorrect":"No, la risposta e’ sbagliata." };
這個檔案與 CheckAnswer.js 檔案完全相同,不過此檔案內含 Answer 型別,其值為義大利文。
若要提供其他語言的當地語系化文字,您可以建立多個 JavaScript 檔案。JavaScript 程式碼永遠都一樣,但 Answer 型別中所定義之值的語言則不同。每一個 JavaScript 檔案的名稱都必須包括適當的語言和地區設定。
在 ASP.NET 頁面中使用 JavaScript 資源值
您現在可以建立 ASP.NET 網頁,此網頁會使用您剛才建立的指令碼程式碼。此頁面可讓您測試變更語言的效果。
若要在 ASP.NET 網頁中使用 JavaScript 資源值
建立 ASP.NET 網頁。
以下列標記和程式碼取代網頁的內容:
<%@ Page Language="VB" AutoEventWireup="true" UICulture="auto" Culture="auto" %> <script > Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Dim _firstInt As Int32 Dim _secondInt As Int32 Dim _random As New Random() _firstInt = _random.Next(0, 20) _secondInt = _random.Next(0, 20) firstNumber.Text = _firstInt.ToString() secondNumber.Text = _secondInt.ToString() If (IsPostBack) Then userAnswer.Text = "" System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture(selectLanguage.SelectedValue) Else selectLanguage.Items.FindByValue(System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName).Selected = True End If End Sub Protected Sub selectLanguage_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture(selectLanguage.SelectedValue) End Sub </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" > <title>Client Localization Example</title> </head> <body> <form id="form1" > <asp:DropDownList AutoPostBack="true" ID="selectLanguage" OnSelectedIndexChanged="selectLanguage_SelectedIndexChanged"> <asp:ListItem Text="English" Value="en"></asp:ListItem> <asp:ListItem Text="Italian" Value="it"></asp:ListItem> </asp:DropDownList> <br /><br /> <asp:ScriptManager ID="ScriptManager1" EnableScriptLocalization="true" > <Scripts> <asp:ScriptReference Path="scripts/CheckAnswer.js" ResourceUICultures="it-IT" /> </Scripts> </asp:ScriptManager> <div> <asp:Label ID="firstNumber" ></asp:Label> + <asp:Label ID="secondNumber" ></asp:Label> = <asp:TextBox ID="userAnswer" ></asp:TextBox> <asp:Button ID="Button1" OnClientClick="return CheckAnswer()" /> <br /> <asp:Label ID="labeltest" ></asp:Label> </div> </form> </body> </html>
<%@ Page Language="C#" AutoEventWireup="true" UICulture="auto" Culture="auto" %> <script > protected void Page_Load(object sender, EventArgs e) { int _firstInt; int _secondInt; Random random = new Random(); _firstInt = random.Next(0, 20); _secondInt = random.Next(0, 20); firstNumber.Text = _firstInt.ToString(); secondNumber.Text = _secondInt.ToString(); if (IsPostBack) { userAnswer.Text = ""; System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture(selectLanguage.SelectedValue); } else { selectLanguage.Items.FindByValue(System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName).Selected = true; } } protected void selectLanguage_SelectedIndexChanged(object sender, EventArgs e) { System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture(selectLanguage.SelectedValue); } </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" > <title>Client Localization Example</title> </head> <body> <form id="form1" > <asp:DropDownList AutoPostBack="true" ID="selectLanguage" OnSelectedIndexChanged="selectLanguage_SelectedIndexChanged"> <asp:ListItem Text="English" Value="en"></asp:ListItem> <asp:ListItem Text="Italian" Value="it"></asp:ListItem> </asp:DropDownList> <br /><br /> <asp:ScriptManager ID="ScriptManager1" EnableScriptLocalization="true" > <Scripts> <asp:ScriptReference Path="scripts/CheckAnswer.js" ResourceUICultures="it-IT" /> </Scripts> </asp:ScriptManager> <div> <asp:Label ID="firstNumber" ></asp:Label> + <asp:Label ID="secondNumber" ></asp:Label> = <asp:TextBox ID="userAnswer" ></asp:TextBox> <asp:Button ID="Button1" OnClientClick="return CheckAnswer()" /> <br /> <asp:Label ID="labeltest" ></asp:Label> </div> </form> </body> </html>
標記會建立一個 DropDownList 控制項、兩個 Label 控制項、一個 TextBox 控制項和一個 Button 控制項。此頁面會顯示兩個隨機產生的整數,並詢問使用者是否要加入它們,並提供解答的文字方塊。按一下按鈕時,會呼叫 JavaScript CheckAnswer 函式。
DropDownList 控制項可讓您在不需變更瀏覽器設定的情況下變更語言設定。當 DropDownList 控制項的 SelectedIndex 屬性變更時,CurrentThread 執行個體的 CurrentUICulture 屬性會設定為您所選取的值。
注意事項: 如需設定執行緒之文化特性資訊的詳細資訊,請參閱 HOW TO:設定 ASP.NET Web 網頁全球化的文化特性和 UI 文化特性。
ScriptManager 控制項包含 CheckAnswer.js 指令碼檔案的參考。因此,當頁面執行時就會擷取 CheckAnswer.js 檔案。
參考的 ResourceUICultures 屬性設定為 "it-IT",指出網站內含義大利文版的指令碼。因此,當您從 DropDownList 控制項中選取「義大利文」,或將「義大利文」設定為瀏覽器的預設語言時,ScriptManager 物件會擷取義大利文版本。
執行網頁。
您會看到一個加法問題 (含兩個隨機產生的號碼),以及一個可用於輸入解答的 TextBox 控制項。當您輸入答案並按一下 [Verify Answer] 按鈕時,會看到訊息視窗中的回應,告訴您答案是否正確。
根據預設,回應顯示為英文。
選取下拉式清單中的「義大利文」,將語言變更為義大利文。
再次執行問答。
這次答案顯示為義大利文。
檢閱
本逐步解說示範如何將當地語系化的資源值加入至獨立的 JavaScript 檔案。當地語系化的值會建立成 JSON 格式的物件,這些物件是個別當地語系化 JavaScript 檔案的一部分。參考 JSON 物件 (而不是使用硬式編碼的字串) 就會顯示當地語系化的值。當地語系化字串的顯示,會根據瀏覽器中的語言設定,或使用者所提供的語言設定。