共用方式為


HOW TO:設定 ASP.NET Web 網頁全球化的文化特性和 UI 文化特性

更新:2007 年 11 月

在 ASP.NET Web 網頁中,您可以設定兩個文化特性值,即 CultureUICulture 屬性。Culture 值判定與文化特性相關功能的結果 (例如,日期、數字和貨幣格式等)。UICulture 值判定為網頁載入的資源。

注意事項:

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

這兩個文化特性設定的值不一定要相同。根據您的應用程式分別設定它們是相當重要的。範例之一就是 Web 拍賣站台。UICulture 屬性可能會針對每個 Web 瀏覽器變更,而 Culture 保持不變。因此,價格總是會以相同的貨幣和格式顯示。

Culture 值只可以設為特定的文化特性 (例如,en-US 或 en-GB)。這樣就無需識別用於 en 的正確貨幣符號,而 en-US 和 en-GB 使用的貨幣符號是不同的。

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

以獨佔方式視瀏覽器設定來判定網頁的 UI 文化特性並不是最佳作法。使用者經常會使用沒有設為其偏好設定的瀏覽器 (例如,在網咖中)。您應當提供一種方法,讓使用者能夠明確選擇網頁的語言或語言和文化特性 (CultureInfo 名稱)。

若要以宣告方式設定 ASP.NET Web 網頁的文化特性和 UI 文化特性

  • 若要設定所有網頁的 UI 文化特性和文化特性,請將 globalization 區段加入 Web.config 檔,然後設定 uiculture 和 culture 屬性,如下列範例所示:

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

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

若要以程式設計方式設定 ASP.NET Web 網頁的文化特性和 UI 文化特性

  1. 覆寫網頁的 InitializeCulture 方法。

  2. 在覆寫的方法中,判定為網頁設定的語言和文化特性。

    注意事項:

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

  3. 使用下列其中一種方式設定 UI 文化特性和文化特性:

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

    <%@ 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 >
        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" >
        <div>
            <asp:ListBox ID="ListBox1" >
                <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"  
                Text="Set Language" 
                meta:resourcekey="Button1" />
            <br />
            <asp:Label ID="Label1"  
                Text="" 
                meta:resourcekey="Label1" />
            </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" uiculture="auto" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Globalization" %>
    <script >
    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" >
        <div>
            <asp:ListBox ID="ListBox1" >
                <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"  
                Text="Set Language" 
                meta:resourcekey="Button1" />
            <br />
            <asp:Label ID="Label1"  
                Text="" 
                meta:resourcekey="Label1" />
            </div>
        </form>
    </body>
    </html>
    

請參閱

其他資源

ASP.NET 全球化和當地語系化