tag net mvc istringlocalizer examen exam developing asp applications and asp.net-mvc

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;