Frage

Ich Baue ein ASP.NET web-Anwendung, und alle meine Saiten sind gespeichert in eine resource-Datei.Ich möchte noch hinzufügen, eine zweite Sprache in meiner Anwendung, und im Idealfall würde ich gerne die automatische Erkennung der browser-Sprache (oder die windows-Sprache) und standardmäßig auf, dass, statt dass Sie wählen Sie etwas, das neben Englisch.Derzeit bin ich mit all den Ressourcen-Bevölkerung manuell, also das hinzufügen einer zweiten Ressource-Datei und die Sprache ist trivial, aus meiner Sicht, wenn ich hatte ein einfacher Weg, um automatisch herauszufinden, welche Sprache angezeigt werden.

Hat jemand dies getan oder haben Sie irgendwelche Gedanken darüber, wie ich könnte abzurufen Wert?Da ASP.NET ist server-basiert ist, ich weiß nicht scheinen, um Zugang zu bestimmten browser-Einstellungen.

AUFLÖSUNG:Hier ist, was ich am Ende machen.Ich benutzte eine "Für Jedes" gehen durch "HttpContext.Aktuelle.Anfrage.UserLanguages" und Suche ich Unterstützung.Ich bin eigentlich nur überprüfen ob die linken zwei Zeichen, da wir nicht unterstützen keine Dialekte noch - nur in Englisch und Spanisch.Vielen Dank für alle Hilfe!

War es hilfreich?

Lösung

Das Artikel (als Original-Link zu archive.org verknüpft ist jetzt tot) mit auto könnte hilfreich sein, die Browser-Spracheinstellung.

[EDIT] Ja. Der zitierte Artikel nicht ASP.NET verwenden. Diese Artikel der Fall ist.

Andere Tipps

Versuchen Sie dies in der web.config:

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

Dies führt dazu, dass ASP.NET auf die Kultur der Client automatisch erkennt aus den Request-Header. Sie können dies auch festgelegt auf einer Pro-Seite-Basis über die Seite Attribut.

Anfrage.UserLanguages in ASP.NET 4 analysiert dieses als string-array.

Gute info: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Dies ist eine große Frage, wie die Lokalisierung in ASP.NET von übersehen wird, viele Entwickler.

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

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

Wie können Sie dies testen? Geben Sie den Sprachen-Panel auf dem Browser und die Einstellungen ändern.

Der Kunde im Allgemeinen setzt Accept-Language in den HTTP-Request-Header mit einem quantitativ erzielter Liste der bevorzugten Sprache, die üblicherweise (aber nicht notwendigerweise) in der Reihenfolge der beliebtesten zu dest begünstigt. Sie können das analysieren, aber wie Maxam bemerkt hat, ASP.NET einen Mechanismus hat dafür, dass in Ihrem Namen.

    /// <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: Wie Browsersprache erkennen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top