Vorgehensweise: Festlegen der Kultur und Benutzeroberflächenkultur für die Globalisierung von ASP.NET-Webseiten

 

Veröffentlicht: Oktober 2016

Auf einer ASP.NET-Webseite können Sie zwei Werte für die Kultur festlegen, die Eigenschaften Culture und UICulture. Der Culture-Wert bestimmt die Ergebnisse von kulturabhängigen Funktionen, wie etwa das Format von Datumswerten, Zahlen, Währungen usw. Der UICulture-Wert bestimmt, welche Ressourcen für die Seite geladen werden.

Hinweis

Die Eigenschaften Culture und UICulture werden mithilfe von Zeichenfolgen nach dem Internetstandard festgelegt, die die Sprache (z.B. en für Englisch, es für Spanisch und de für Deutsch) und die Kultur bezeichnen (beispielsweise US für die USA, GB für Großbritannien, MX für Mexico und DE für Deutschland). Beispiele hierfür wären en-US für Englisch/USA, en-GB für Englisch/Großbritannien und es-MX für Spanisch/Mexico. Weitere Informationen finden Sie unter CultureInfo.

Die beiden Kultureinstellungen müssen nicht den gleichen Wert aufweisen. Je nach Anwendung kann es wichtig sein, sie separat festzulegen. Ein Beispiel hierfür wäre eine Auktionswebsite. Die UICulture-Eigenschaft kann für jeden Webbrowser geändert werden, während die Culture-Eigenschaft konstant bleibt. Daher werden Preise immer in der gleichen Währung und Formatierung angezeigt.

Der Culture-Wert von kann nur auf bestimmte Kulturen festgelegt werden, wie etwa en-US oder en-GB. Dadurch muss nicht mehr das richtige Währungssymbol für en bestimmt werden, da en-US und en-GB verschiedene Währungssymbole aufweisen.

Benutzer können die Benutzeroberflächenkultur und die Kultur in ihren Browsern festlegen. Beispielsweise können die Benutzer in Microsoft Internet Explorer im Menü Extras > Internetoptionen auf der Registerkarte Allgemein auf Sprache klicken und anschließend ihre Spracheinstellungen festlegen. Wenn das enableClientBasedCulture-Attribut des Elements globalization in der Web.config-Datei auf true festgelegt wird, kann ASP.NET die Benutzeroberflächenkultur und die Kultur einer Webseite automatisch auf Grundlage der von einem Browser gesendeten Werte festlegen.

Es ist nicht empfehlenswert, sich beim Bestimmen der Benutzeroberflächenkultur für eine Seite nur auf die Browsereinstellungen zu verlassen. Benutzer verwenden häufig Browser, die nicht auf ihre Vorlieben eingestellt sind (beispielsweise in einem Internetcafé). Sie sollten eine Methode bereitstellen, mit der Benutzer explizit eine Sprache oder eine Sprache und eine Kultur (CultureInfo-Name) für die Seite auswählen können.

So legen Sie die Kultur und Benutzeroberflächenkultur für eine ASP.NET-Webseite deklarativ fest

  • Um die Benutzeroberflächenkultur und die Kultur für alle Seiten festzulegen, fügen Sie der Web.config-Datei einen Abschnitt globalization hinzu, und legen Sie dann die Attribute uiculture und culture wie im folgenden Beispiel gezeigt fest:

    <globalization uiCulture="es" culture="es-MX" />
    
  • Um die Benutzeroberflächenkultur und die Kultur für eine einzelne Seite festzulegen, legen Sie die Attribute Culture und UICulture der @ Page-Anweisung wie im folgenden Beispiel zu sehen fest:

    <%@ Page UICulture="es" Culture="es-MX" %>
    
  • Um die Benutzeroberflächenkultur und Kultur von ASP.NET auf die erste Sprache festlegen zu lassen, die in den aktuellen Browsereinstellungen angegeben ist, legen Sie UICulture und Culture auf auto fest. Alternativ können Sie diesen Wert auf **auto:**culture_info_name festlegen, wobei culture_info_name der Name einer Kultur ist. Eine Liste der Kulturnamen finden Sie unter CultureInfo. Sie können diese Einstellung entweder in der @ Page-Anweisung oder in der Web.config-Datei vornehmen.

So legen Sie die Kultur und Benutzeroberflächenkultur für eine ASP.NET-Webseite programmgesteuert fest

  1. Überschreiben Sie die InitializeCulture-Methode für die Seite.

  2. Bestimmen Sie in der überschriebenen Methode, welche Sprache und Kultur für die Seite festgelegt werden sollen.

    Hinweis

    Die InitializeCulture-Methode wird sehr früh im Lebenszyklus einer Seite aufgerufen, bevor Steuerelemente erstellt oder Eigenschaften für die Seite festgelegt werden. Um Werte zu lesen, die von Steuerelementen an die Seite übergeben werden, müssen Sie sie daher mithilfe der Form-Sammlung direkt aus der Anforderung abrufen.

  3. Legen Sie die Benutzeroberflächenkultur und die Kultur in einer der folgenden Weisen fest:

    • Legen Sie die Eigenschaften Culture und UICulture der Seite auf die Sprach- und Kulturzeichenfolge fest (z.B. en-US). Diese Eigenschaften sind interne Eigenschaften der Seite und können nur auf einer Seite verwendet werden.

    • Legen Sie die Eigenschaften CurrentUICulture und CurrentCulture des aktuellen Threads für die Benutzeroberflächenkultur bzw. die Kultur fest. Die CurrentUICulture-Eigenschaft akzeptiert eine Sprach- und eine Kulturinformationszeichenfolge. Um die CurrentCulture-Eigenschaft festzulegen, erstellen Sie eine Instanz der CultureInfo-Klasse und rufen ihre CreateSpecificCulture-Methode auf.

    Das folgende Codebeispiel zeigt eine ASP.NET-Webseite, die Benutzern die Auswahl der bevorzugten Sprache in einer Dropdownliste ermöglicht. Die Seite importiert zwei Namespaces, um das Arbeiten mit Threading- und Globalisierungsklassen zu erleichtern.

    Für diesen Artikel steht ein begleitendes Visual Studio-Websiteprojekt mit Quellcode zur Verfügung: Herunterladen.

    <%@ 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>
    

Siehe auch

ASP.NET Globalization and Localization