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.
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; }
}