tutorial pages net mvc asp c# asp.net razor webforms asp.net-webpages

c# - pages - razor mvc



Page.Culture vs. Thread.CurrentThread.CurrentCulture (2)

He estado usando Thread.CurrentThread.CurrentUICulture con System.Threading y System.Globalization , por un tiempo ahora para configurar manualmente el lenguaje utilizado por mis páginas ASP.net, principalmente WebForms y páginas web con Razor.

Ver MSDN: Thread.CurrentThread.CurrentUICulture

Recientemente leí un tutorial que estaba usando Page.UICulture (en realidad, UICulture que parece estar fuertemente tipado). Para mi sorpresa, terminé exactamente con el mismo resultado; ambos cambiaron la configuración de idioma de mi sitio web y leyeron el archivo de recursos correcto.

Vea MSDN: Page.UICulture

Para mí, el Thread.CurrentUICulture tiene más sentido (lo digo intuitivamente, ya que literalmente "cambia la cultura del hilo actual").

Pero llamar a Page.Culture es mucho más fácil y no requiere llamar a otro par de ASP.net, así que me he conformado con esa solución por ahora.

¿Hay una diferencia fundamental entre los dos o son perfectamente intercambiables?

La razón por la que me preocupa es porque tengo un montón de sitios web antiguos desarrollados con el primer método y me temo que tendré conflictos de intercambiabilidad si los actualizo a la segunda con imprudencia.

Nota : generalmente me concentro en UICulture en mi línea de trabajo y Culture es muy accesorio a lo que hago, pero les hago la pregunta a los dos.


Ellos hacen exactamente lo mismo.

Como puede ver en la página de documentación :

Esta propiedad es un atajo para la propiedad CurrentThread. La cultura es una propiedad del hilo de ejecución


Page.UICulture es un envoltorio alrededor de la propiedad Thread.CurrentThread y está destinado al uso interno de .NET framework:

Esta propiedad es un atajo para la propiedad CurrentThread. La cultura es una propiedad del hilo de ejecución

Esta API admite la infraestructura de .NET Framework y no está destinada a ser utilizada directamente desde su código.

Al mirar el código fuente , puedes ver claramente que:

public string UICulture { set { CultureInfo newUICulture = null; if(StringUtil.EqualsIgnoreCase(value, HttpApplication.AutoCulture)) { CultureInfo browserCulture = CultureFromUserLanguages(false); if(browserCulture != null) { newUICulture = browserCulture; } } else if(StringUtil.StringStartsWithIgnoreCase(value, HttpApplication.AutoCulture)) { CultureInfo browserCulture = CultureFromUserLanguages(false); if(browserCulture != null) { newUICulture = browserCulture; } else { try { newUICulture = HttpServerUtility.CreateReadOnlyCultureInfo(value.Substring(5)); } catch {} } } else { newUICulture = HttpServerUtility.CreateReadOnlyCultureInfo(value); } if (newUICulture != null) { Thread.CurrentThread.CurrentUICulture = newUICulture; _dynamicUICulture = newUICulture; } } get { return Thread.CurrentThread.CurrentUICulture.DisplayName; } }