Pregunta

Estoy creando una aplicación web ASP.NET y todas mis cadenas se almacenan en un archivo de recursos. Me gustaría agregar un segundo idioma a mi aplicación y, idealmente, me gustaría detectar automáticamente el idioma del navegador del usuario (o el idioma de Windows) y, en lugar de hacer que elijan algo más que el inglés. Actualmente, estoy manejando toda la población de recursos de forma manual, por lo que agregar un segundo archivo de recursos y el idioma es trivial desde mi punto de vista, si tuviera una forma fácil de averiguar automáticamente qué idioma mostrar.

¿Alguien ha hecho esto o tienes alguna idea sobre cómo puedo recuperar ese valor? Dado que ASP.NET está basado en el servidor, parece que no tengo acceso a la configuración específica del navegador.

RESOLUCIÓN : Esto es lo que terminé haciendo. Usé un " para cada uno " para pasar por " HttpContext.Current.Request.UserLanguages ??" y busco uno que yo soporte. En realidad, solo estoy marcando los dos caracteres de la izquierda, ya que todavía no admitimos dialectos, solo inglés y español. ¡Gracias por toda la ayuda!

¿Fue útil?

Solución

Esto el artículo (vinculado a archive.org porque el enlace original ahora está muerto) podría ser útil para detectar automáticamente la configuración de idioma del navegador.

[EDITAR] Sí. El artículo citado no usa ASP.NET. Este artículo sí lo hace.

Otros consejos

Prueba esto en el web.config:

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

Esto hará que ASP.NET detecte automáticamente la cultura del cliente desde el encabezado de la solicitud. También puede configurar esto por página a través del atributo Página.

Request.UserLanguages ??en ASP.NET 4 analiza esto como una matriz de cadenas.

Buena información: http://www.w3.org/Protocols/rfc2616 /rfc2616-sec14.html

Esta es una gran pregunta, ya que la localización en ASP.NET se pasa por alto por muchos desarrolladores.

ASP.NET debería recoger automáticamente la configuración del navegador del usuario y forzar el CultureInfo.CurrentCulture al idioma del navegador del usuario. Puede forzar el problema con una línea en Page_OnInit () como:

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

¿Cómo puedes probar esto? Ingrese al panel de idiomas en nuestro navegador y cambie la configuración.

El cliente generalmente establece Accept-Language en el encabezado de solicitud HTTP con cuantitativamente lista puntuada del idioma preferido, convencionalmente (pero no necesariamente) en el orden de más favorecido a menos favorecido. Puedes analizar eso, pero como Maxam ha notado, ASP.NET tiene un mecanismo por hacer eso en su nombre.

    /// <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 fuente de este artículo está aquí: Cómo detectar el idioma del navegador

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top