21

Ich baue eine ASP.NET-Webanwendung, und alle meine Zeichenfolgen werden in einer Ressourcendatei gespeichert. Ich möchte meiner Anwendung eine zweite Sprache hinzufügen, und idealerweise möchte ich die Browsersprache des Benutzers (oder die Windows-Sprache) automatisch erkennen und diese standardmäßig festlegen, anstatt sie dazu zu bringen, etwas anderes als Englisch zu wählen. Momentan bearbeite ich die gesamte Ressourcenpopulation manuell, daher ist das Hinzufügen einer zweiten Ressourcendatei und Sprache aus meiner Sicht trivial, wenn ich eine einfache Möglichkeit hätte, automatisch herauszufinden, welche Sprache angezeigt werden soll.Mehrsprachige Webanwendung - Wie erkenne ich die Sprache des Benutzers in ASP.NET?

Hat jemand dies getan, oder haben Sie irgendwelche Gedanken darüber, wie ich diesen Wert abrufen könnte? Da ASP.NET serverbasiert ist, habe ich anscheinend keinen Zugriff auf bestimmte Browsereinstellungen.

AUFLÖSUNG: Hier ist, was ich getan habe. Ich habe ein "For Each" verwendet, um "HttpContext.Current.Request.UserLanguages" durchzugehen und nach einem zu suchen, den ich unterstütze. Ich überprüfe gerade die zwei linken Zeichen, da wir noch keine Dialekte unterstützen - nur Englisch und Spanisch. Danke für die Hilfe!

Antwort

6

Diese article (linked to archive.org as original link is now dead) kann hilfreich sein, um die Spracheinstellung des Browsers automatisch zu erkennen.

[EDIT] Ja. Der zitierte Artikel verwendet nicht ASP.NET. Dies tut article.

+0

dies ist eine ASP-Lösung, kein ASP.NET ein, nicht wahr? –

+0

Obwohl es nicht .NET ist, fand ich den ersten Artikel viel aufschlussreicher als den zweiten, und er hat mich in die richtige Richtung bewegt. – SqlRyan

2

Das ist eine gute Frage, da die Lokalisierung in ASP.NET von vielen Entwicklern übersehen wird.

ASP.NET sollte automatisch auf den Browser-Einstellungen des Benutzers aufzunehmen und zwingen die CultureInfo.CurrentCulture an die Browsersprache des Benutzers. Sie können mit einer Linie die Frage zwingen in Page_OnInit() wie:

Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]); 

Wie können Sie dies testen? Rufen Sie das Sprachenbedienfeld in unserem Browser auf und ändern Sie die Einstellungen.

21

Versuchen Sie dies in der web.config:

<globalization culture="auto" uiCulture="auto" /> 

Diese ASP.NET verursachen auf die Kultur aus dem Request-Header des Clients automatisch erkennen. Sie können dies auch pro Seite über das Seitenattribut festlegen.

+0

maxam: Ich habe Ihren Code in einen formatierten Codeblock gepackt, um die <> s anzuzeigen. Bearbeiten Sie die Antwort, um zu sehen, wie das aussieht, wenn Sie interessiert sind. –

+0

Danke, sehr geschätzt! – Maxam

+1

Dies funktionierte für mich (ps: Ich brauchte nicht die 'enableClientBasedCulture' Einstellung) – wdanda

2

Der Client setzt allgemein Accept-Language im Header der HTTP-Anfrage mit einer quantitativ gewerteten Liste der bevorzugten Sprache, konventionell (aber nicht notwendigerweise) in der Reihenfolge von am meisten bevorzugt zu am wenigsten bevorzugt. Sie können das analysieren, aber wie Maxam bemerkt hat, hat ASP.NET einen Mechanismus, um das in Ihrem Namen zu tun.

1
/// <summary> 
    /// Sets a user's Locale based on the browser's Locale setting. If no setting 
    /// is provided the default Locale is used. 
    /// </summary> 

public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture) 
{ 
    HttpRequest Request = HttpContext.Current.Request; 
    if (Request.UserLanguages == null) 
     return; 

    string Lang = Request.UserLanguages[0]; 
    if (Lang != null) 
    { 
     // *** Problems with Turkish Locale and upper/lower case 
     // *** DataRow/DataTable indexes 
     if (Lang.StartsWith("tr")) 
      return; 

     if (Lang.Length < 3) 
      Lang = Lang + "-" + Lang.ToUpper(); 
     try 
     { 
      System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang); 
      if (CurrencySymbol != null && CurrencySymbol != "") 
       Culture.NumberFormat.CurrencySymbol = CurrencySymbol; 

      System.Threading.Thread.CurrentThread.CurrentCulture = Culture; 

      if (SetUiCulture) 
       System.Threading.Thread.CurrentThread.CurrentUICulture = Culture; 
     } 
     catch 
     { ;} 
    } 
} 

Die Quelle dieses Artikels ist es hier: How to detect browser language