Domanda

Sto creando un'applicazione Web ASP.NET e tutte le mie stringhe sono archiviate in un file di risorse. Vorrei aggiungere una seconda lingua alla mia applicazione e, idealmente, vorrei rilevare automaticamente la lingua del browser dell'utente (o la lingua di Windows) e quella predefinita, invece di far loro scegliere qualcosa oltre all'inglese. Attualmente sto gestendo manualmente tutta la popolazione di risorse, quindi aggiungere un secondo file di risorse e lingua è banale dal mio punto di vista, se avessi un modo semplice per capire automaticamente quale lingua visualizzare.

Qualcuno ha fatto questo o hai qualche idea su come potrei recuperare quel valore? Poiché ASP.NET è basato su server, sembra che non abbia alcun accesso a impostazioni specifiche del browser.

RISOLUZIONE : ecco cosa ho finito per fare. Ho usato un " Per ciascuno " per passare attraverso " HttpContext.Current.Request.UserLanguages ??" e cercare quello che supporto. In realtà sto solo controllando i due caratteri a sinistra, poiché non supportiamo ancora nessun dialetto - solo inglese e spagnolo. Grazie per tutto l'aiuto!

È stato utile?

Soluzione

Questo articolo (collegato a archive.org poiché il collegamento originale ora è morto) potrebbe essere utile per rilevare automaticamente l'impostazione della lingua del browser.

[EDIT] Sì. L'articolo citato non utilizza ASP.NET. Questo articolo fa.

Altri suggerimenti

Prova questo nel web.config:

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

Questo farà sì che ASP.NET rilevi automaticamente la cultura del client dall'intestazione della richiesta. Puoi anche impostarlo su una base per pagina tramite l'attributo Pagina.

Request.UserLanguages ??in ASP.NET 4 analizza questo come un array di stringhe.

Buone informazioni: http://www.w3.org/Protocols/rfc2616 /rfc2616-sec14.html

Questa è un'ottima domanda, poiché la localizzazione in ASP.NET è trascurata da molti sviluppatori.

ASP.NET dovrebbe acquisire automaticamente le impostazioni del browser dell'utente e forzare CultureInfo.CurrentCulture nella lingua del browser dell'utente. Puoi forzare il problema con una riga in Page_OnInit () come:

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

Come puoi provarlo? Accedi al pannello delle lingue sul nostro browser e modifica le impostazioni.

Il client generalmente imposta Accept-Language nell'intestazione della richiesta HTTP con un valore quantitativo elenco dei punteggi della lingua preferita, convenzionalmente (ma non necessariamente) nell'ordine del più favorito al meno favorito. Puoi analizzarlo, ma come ha notato Maxam, ASP.NET ha un meccanismo per averlo fatto per tuo conto.

    /// <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
        { ;}
    }
}

La fonte di questo articolo è qui: Come rilevare la lingua del browser

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top