共用方式為


如何:為 ASP.NET 網頁全球化設定文化特性和 UI 文化特性

 

在 ASP.NET 網頁中,您可以設為兩個文化特性值:CultureUICulture 屬性。Culture 值決定文化特性相依函數的結果,例如日期、數字及貨幣格式等。UICulture 值則決定要載入頁面中的資源。

注意

設定 CultureUICulture 屬性時使用的是網際網路標準字串,以識別語言 (例如 en 為英文、es 為西班牙文、de 為德文) 及文化特性 (例如 US 為美國、GB 為英國、MX 為墨西哥、DE 為德國)。 範例包括 en-US 為英文/美國、en-GB 為英文/英國及 es-MX 為西班牙文/墨西哥。 如需詳細資訊,請參閱CultureInfo

兩項文化特性設定不必有相同的值。 取決於您的應用程式,可能需要分別加以設定。 其中一個例子是競價網站。UICulture 屬性可能會依各網頁瀏覽器而變更,而 Culture 則維持不變。 因此,價格會一律以相同的貨幣與格式顯示。

Culture 值只能設為特定文化特性,例如 en-US 或 en-GB。 如此就不需要識別用於 en 的貨幣符號是否正確,en-US 和 en-GB 在當中有不同的貨幣符號。

使用者可以在自己的瀏覽器中設定 UI 文化特性與文化特性。 例如,在 Microsoft Internet Explorer 中,使用者可以在 [工具] 功能表上按一下 [網際網路選項],在 [一般] 索引標籤按一下 [語言],然後設定他們的語言喜好設定。 如果 Web.config 檔案中 globalization 元素的 enableClientBasedCulture 屬性設為 true,ASP.NET 可以依據瀏覽器傳送的值,自動為網頁設定 UI 文化特性與文化特性。

完全依賴瀏覽器設定來決定頁面的 UI 文化特性並不是最佳做法。 使用者經常使用未設為其喜好設定的瀏覽器 (例如在網咖中)。 您應為使用者提供方法,以明確選擇網頁的語言或語言與文化特性 (CultureInfo 名稱)。

如何以宣告方式為 ASP.NET 網頁設定文化特性和 UI 文化特性

  • 若要為所有網頁設定 UI 文化特性與文化特性,請在 Web.config 檔案中新增 globalization 區段,然後設定 uicultureculture 屬性,如下列範例所示:

    <globalization uiCulture="es" culture="es-MX" />
    
  • 若要為個別網頁設定 UI 文化特性與文化特性,請設定 @ Page 指示詞的 CultureUICulture 屬性,如下列範例所示:

    <%@ Page UICulture="es" Culture="es-MX" %>
    
  • 若要讓 ASP.NET 將 UI 文化特性與文化特性設為目前瀏覽器設定中指定的第一個語言,請將 UICultureCulture 設為 auto。 您也可以將這個值設為 **auto:**culture_info_name,其中 culture_info_name 為文化特性名稱。 如需文化特性名稱的清單,請參閱 CultureInfo。 您可以在 @ Page 指示詞或 Web.config 檔案中進行這項設定。

如何以程式設計方式為 ASP.NET 網頁設定文化特性和 UI 文化特性

  1. 覆寫網頁的 InitializeCulture 方法。

  2. 在覆寫的方法中,判斷要將網頁設為哪個語言及文化特性。

    注意

    InitializeCulture 方法會在網頁生命週期的極早期呼叫,在建立控制項或為網頁設定屬性前。 因此,若要讀取從控制項傳遞至網頁的值,您必須使用 Form 集合直接從要求加以取得。

  3. 請以下列其中一種方式設定 UI 文化特性與文化特性:

    下列程式碼範例顯示了一個 ASP.NET 網頁,其可讓使用者從下拉式清單中選取其偏好的語言。 網頁匯入兩個命名空間,讓執行緒和全球化類別更方便使用。

    具有原始程式碼的 Visual Studio 網站專案可搭配這個主題:下載

    <%@ Page Language="VB" uiculture="auto" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Globalization" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
      1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <script runat="server">
        Protected Overrides Sub InitializeCulture()
            If Request.Form("ListBox1") IsNot Nothing Then
                Dim selectedLanguage As String = _
                    Request.Form("ListBox1")
                UICulture = Request.Form("ListBox1")
                Culture = Request.Form("ListBox1")
                Thread.CurrentThread.CurrentCulture = _
                    CultureInfo.CreateSpecificCulture(selectedLanguage)
                Thread.CurrentThread.CurrentUICulture = New _
                    CultureInfo(selectedLanguage)
            End If
            MyBase.InitializeCulture()
        End Sub
    </script>
    <html>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListBox ID="ListBox1" runat="server">
                <asp:ListItem Value="en-US" 
                    Selected="True">English</asp:ListItem>
                <asp:ListItem Value="es-MX">Español</asp:ListItem>
                <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
            </asp:ListBox><br />
            <asp:Button ID="Button1" runat="server" 
                Text="Set Language" 
                meta:resourcekey="Button1" />
            <br />
            <asp:Label ID="Label1" runat="server" 
                Text="" 
                meta:resourcekey="Label1" />
            </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" uiculture="auto" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Globalization" %>
    <script runat="server">
    protected override void InitializeCulture()
    {
        if (Request.Form["ListBox1"] != null)
        {
            String selectedLanguage = Request.Form["ListBox1"];
            UICulture = selectedLanguage ;
            Culture = selectedLanguage ;
    
            Thread.CurrentThread.CurrentCulture = 
                CultureInfo.CreateSpecificCulture(selectedLanguage);
            Thread.CurrentThread.CurrentUICulture = new 
                CultureInfo(selectedLanguage);
        }
        base.InitializeCulture();
    }
    </script>
    <html>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListBox ID="ListBox1" runat="server">
                <asp:ListItem Value="en-US" 
                    Selected="True">English</asp:ListItem>
                <asp:ListItem Value="es-MX">Español</asp:ListItem>
                <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
            </asp:ListBox><br />
            <asp:Button ID="Button1" runat="server" 
                Text="Set Language" 
                meta:resourcekey="Button1" />
            <br />
            <asp:Label ID="Label1" runat="server" 
                Text="" 
                meta:resourcekey="Label1" />
            </div>
        </form>
    </body>
    </html>
    

另請參閱

ASP.NET Globalization and Localization