Aplicación web multilingüe: ¿cómo detecto el idioma del usuario en ASP.NET?
web-applications multilingual (6)
Estoy construyendo 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, e idealmente, me gustaría detectar automáticamente el idioma del navegador del usuario (o el idioma de Windows) y de forma predeterminada a eso, en lugar de hacer que elijan algo además del inglés. Actualmente, estoy manejando toda la población de recursos manualmente, por lo que agregar un segundo archivo de recursos e idioma es trivial desde mi punto de vista, si tuviera una manera fácil de descubrir automáticamente qué idioma mostrar.
¿Alguien ha hecho esto, o tiene alguna idea sobre cómo podría recuperar ese valor? Como ASP.NET está basado en el servidor, no parece tener acceso a configuraciones específicas del navegador.
RESOLUCIÓN : Esto es lo que terminé haciendo. Usé un "For Each" para pasar por "HttpContext.Current.Request.UserLanguages" y busco uno que admita. De hecho, solo estoy revisando los dos caracteres de la izquierda, ya que todavía no admitimos dialectos, solo inglés y español. ¡Gracias por toda la ayuda!
Request.UserLanguages en ASP.NET 4 lo analiza como una matriz de cadenas.
Buena información: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Este artículo (vinculado a archive.org como 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 articulo lo hace
Esta es una gran pregunta, ya que la localización en ASP.NET es ignorada por muchos desarrolladores.
ASP.NET debería retomar automáticamente la configuración del navegador del usuario y forzar 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.
Por lo general, el cliente establece Accept-Language en el encabezado de solicitud HTTP con una lista del lenguaje preferido cuantificada cuantitativamente, convencionalmente (pero no necesariamente) en orden de más favorecido a menos favorecido. Puede analizar eso, pero como señaló Maxam, ASP.NET tiene un mecanismo para hacerlo en su nombre.
Pruebe esto en la 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.
/// <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