我一直在使用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,所以我现在已经解决了这个问题.
这两者之间是否存在根本区别,还是完全可以互换?
我担心的原因是我有一堆用第一种方法开发的旧网站,如果我轻率地将它们更新到第二种方法,我担心会遇到互换性冲突.
注意:在我的工作中,我通常关注UICulture,而文化对我的工作非常重要,但我问的是这两个问题.
最佳答案 Page.UICulture是Thread.CurrentThread属性的包装器,用于内部.NET框架使用:
This property is a shortcut for the CurrentThread property. The culture is a property of the executing thread
This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.
看一下source code,你可以清楚地看到:
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; }
}