Page.Culture与Thread.CurrentThread.CurrentCulture

时间:2015-05-07 17:00:06

标签: c# asp.net razor webforms asp.net-webpages

我一直在使用Thread.CurrentThread.CurrentUICultureSystem.ThreadingSystem.Globalization一段时间来手动设置我的ASP.net页面使用的语言,主要是使用Razor的WebForms和WebPages。 / p>

请参阅MSDN: Thread.CurrentThread.CurrentUICulture

我最近阅读了一个使用Page.UICulture的教程(实际上,UICulture似乎是强类型的)。令我惊讶的是,我得到了完全相同的结果;他们都改变了我的网站' ui语言设置并读取正确的资源文件。

请参阅MSDN: Page.UICulture

对我来说,Thread.CurrentUICulture更有意义(我直截了当地说,因为它实际上是#34;改变当前线索的文化")。

但是调用Page.Culture更容易,并且不需要再调用另一对ASP.net using,所以我现在已经解决了这个问题。

这两者之间是否有根本区别,或者它们是否完全可以互换?

我担心的原因是我有一堆用第一种方法开发的旧网站,如果我轻率地将它们更新到第二种方法,我担心会遇到互换性冲突。

注意:我的工作重点通常是UICulture,而Culture对我的工作非常重要,但我问两个问题。它们。

2 个答案:

答案 0 :(得分:2)

Page.UICultureThread.CurrentThread属性的包装器,用于内部.NET框架使用:

  

此属性是CurrentThread属性的快捷方式。文化是执行线程的属性

     

此API支持.NET Framework基础结构,不能直接在您的代码中使用。

查看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; }
}

答案 1 :(得分:0)

他们完全同样的事情。

正如您在documentation page上看到的那样:

  

此属性是CurrentThread属性的快捷方式。文化是执行线程的属性