我已经使用Thread.CurrentThread.CurrentUICulture与System.Threading和System.Globalization一起使用了一段时间,用于手动设置ASP.net页面所使用的语言,主要是使用Razor的WebForms和WebPages。
请参阅MSDN: Thread.CurrentThread.CurrentUICulture
我最近读了一个教程,它使用Page.UICulture (实际上,UICulture似乎是强类型的)。令我惊讶的是,我最终得到了完全相同的结果;它们都改变了我的网站的ui语言设置,并读取了正确的资源文件。
对我来说,Thread.CurrentUICulture更有意义(我直觉地说,因为它实际上是“改变当前线程的文化”)。
但是调用Page.Culture要容易得多,并且不需要调用另一对ASP.net using,所以我现在已经确定了这个解决方案。
这两者之间有根本的区别吗?还是它们完全可以互换?
我担心的原因是,我有一堆老网站是用第一种方法开发的,如果我草率地将它们更新到第二种方法,我恐怕会遇到互换性冲突。
备注:我通常在工作中专注于UICulture,而Culture是我所做的事情的附属品,但我想问他们两个的问题。
发布于 2015-05-07 17:17:25
Page.UICulture是围绕Thread.CurrentThread属性的包装器,用于内部.NET框架使用:
此属性是CurrentThread属性的快捷方式。区域性是正在执行的线程的属性。 此API支持.NET框架基础结构,不打算直接从代码中使用。
查看源代码,您可以清楚地看到:
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; }
}发布于 2015-05-07 17:13:12
https://stackoverflow.com/questions/30107420
复制相似问题