asp.net mvc - net - Obtenga CultureInfo del visitante actual y establezca recursos basados en eso?
istringlocalizer (4)
Puede usar un código similar al siguiente para obtener diversos detalles de su usuario (incluidos los idiomas):
MembershipUser user = Membership.GetUser(model.UserName);
string browser = HttpContext.Request.Browser.Browser;
string version = HttpContext.Request.Browser.Version;
string type = HttpContext.Request.Browser.Type;
string platform = HttpContext.Request.Browser.Platform;
string userAgent = HttpContext.Request.UserAgent;
string[] userLang = HttpContext.Request.UserLanguages
¿Cómo puedo (en ASP .NET MVC) obtener el CultureInfo del visitante actual (basado en los idiomas de su navegador)?
No tengo idea de por dónde empezar. Intenté buscar en el encabezado "Aceptar idiomas" enviado por el navegador. ¿Pero es esa la mejor manera de hacerlo?
Estoy marcando esta pregunta para mí con una estrella y compartiendo aquí un código que esencialmente convierte Request.UserLanguages
en una matriz de instancias CultureInfo para su uso posterior en su aplicación. También es más flexible trabajar con CultureInfo que solo con los códigos ISO, porque con CultureInfo puede acceder a todas las propiedades de una cultura (como Nombre, Nombre de idioma de dos caracteres, Nombre nativo, ...):
// Create array of CultureInfo objects
string locale = string.Empty;
CultureInfo[] cultures = new CultureInfo[Request.UserLanguages.Length + 1];
for (int ctr = Request.UserLanguages.GetLowerBound(0); ctr <= Request.UserLanguages.GetUpperBound(0);
ctr++)
{
locale = Request.UserLanguages[ctr];
if (!string.IsNullOrEmpty(locale))
{
// Remove quality specifier, if present.
if (locale.Contains(";"))
locale = locale.Substring(0, locale.IndexOf('';''));
try
{
cultures[ctr] = new CultureInfo(locale, false);
}
catch (Exception) { continue; }
}
else
{
cultures[ctr] = CultureInfo.CurrentCulture;
}
}
cultures[Request.UserLanguages.Length] = CultureInfo.InvariantCulture;
HTH
Request.UserLanguages es la propiedad que está buscando. Solo tenga en cuenta que esta matriz puede contener idiomas arbitrarios (incluso no exsitentes) configurados por encabezados de solicitud.
ACTUALIZAR
Ejemplo:
// Get Browser languages.
var userLanguages = Request.UserLanguages;
CultureInfo ci;
if (userLanguages.Count() > 0)
{
try
{
ci = new CultureInfo(userLanguages[0]);
}
catch(CultureNotFoundException)
{
ci = CultureInfo.InvariantCulture;
}
}
else
{
ci = CultureInfo.InvariantCulture;
}
// Here CultureInfo should already be set to either user''s prefereable language
// or to InvariantCulture if user transmitted invalid culture ID
var userLanguage = CultureInfo.CurrentUICulture;