首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Page.Culture对Thread.CurrentThread.CurrentCulture

Page.Culture对Thread.CurrentThread.CurrentCulture
EN

Stack Overflow用户
提问于 2015-05-07 17:00:06
回答 2查看 1.7K关注 0票数 4

我已经使用Thread.CurrentThread.CurrentUICultureSystem.ThreadingSystem.Globalization一起使用了一段时间,用于手动设置ASP.net页面所使用的语言,主要是使用Razor的WebForms和WebPages。

请参阅MSDN: Thread.CurrentThread.CurrentUICulture

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

请参阅MSDN: Page.UICulture

对我来说,Thread.CurrentUICulture更有意义(我直觉地说,因为它实际上是“改变当前线程的文化”)。

但是调用Page.Culture要容易得多,并且不需要调用另一对ASP.net using,所以我现在已经确定了这个解决方案。

这两者之间有根本的区别吗?还是它们完全可以互换?

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

备注:我通常在工作中专注于UICulture,而Culture是我所做的事情的附属品,但我想问他们两个的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-07 17:17:25

Page.UICulture是围绕Thread.CurrentThread属性的包装器,用于内部.NET框架使用:

此属性是CurrentThread属性的快捷方式。区域性是正在执行的线程的属性。 此API支持.NET框架基础结构,不打算直接从代码中使用。

查看源代码,您可以清楚地看到:

代码语言:javascript
复制
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; }
}
票数 2
EN

Stack Overflow用户

发布于 2015-05-07 17:13:12

他们做的事情完全一样。

正如您在文件页上看到的那样

此属性是CurrentThread属性的快捷方式。区域性是正在执行的线程的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30107420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档