Localization 为什么我的语言会在ASP.NET 2.0中自动切换?

Localization 为什么我的语言会在ASP.NET 2.0中自动切换?,localization,asp.net-2.0,multilingual,currentuiculture,Localization,Asp.net 2.0,Multilingual,Currentuiculture,我正在开发一个ASP.NET 2.0 web解决方案,该解决方案目前运行en GB和zh HK语言作为网站的两种当前语言。其他将在以后添加 其中一个要求是用户可以选择将显示的语言改写为另一种语言。因此,香港的用户可以用英语查看网站,反之亦然。p> 我的2个资源文件是 Resources.resx用于英语-默认翻译 Resources.zh-HK.resx中文版 站点执行此逻辑 加载用户详细信息 检查用户是否已覆盖首选语言 如果有,请将Thread.CurrentThread.CurrentUIC

我正在开发一个ASP.NET 2.0 web解决方案,该解决方案目前运行en GB和zh HK语言作为网站的两种当前语言。其他将在以后添加

其中一个要求是用户可以选择将显示的语言改写为另一种语言。因此,香港的用户可以用英语查看网站,反之亦然。p> 我的2个资源文件是

Resources.resx用于英语-默认翻译 Resources.zh-HK.resx中文版 站点执行此逻辑

加载用户详细信息 检查用户是否已覆盖首选语言 如果有,请将Thread.CurrentThread.CurrentUICulture设置为此语言。 如果没有,则使用默认浏览器。 这在以下代码中实现:

//This method is written in a base page, which all pages in the site derive from
protected override void InitializeCulture()
{ 
    User user = /*Load custom user object...*/;
    string threadLanguage = Thread.CurrentThread.CurrentUICulture.IetfLanguageTag;

    //If the browser is using a different language, 
    //but the has chosen a preferred language, 
    //change the CurrentUICulture over.
    if (!threadLanguage.Equals(user.Language, StringComparison.OrdinalIgnoreCase))
    {
        CultureInfo userLanguageCulture = CultureInfo.CreateSpecificCulture(user.Language);
        Thread.CurrentThread.CurrentUICulture = userLanguageCulture;
    }

    base.InitializeCulture();
}
我还将web.config配置为使用

<globalization uiCulture="auto"/>
出于一些非常奇怪的原因,一些用户甚至是en-GB用户发现这种语言无缘无故地在zh-HK之间切换——有时在页面之间切换!我在这些页面中添加了一些调试代码,这些代码将在未来几天中显示更多信息。到目前为止,它所揭示的只是,用户不一定来自中弘香港,有些来自中弘中国或中弘台湾。虽然这可能会有所帮助,因为en-GB用户看到的是zh-HK,我认为这只是一种转移视线的做法

我注意到,切换发生在从基本页面继承的页面内容上,InitializeCulture方法存在。我编写的自定义用户控件没有遇到此问题,而是以用户配置的正确语言显示。因此,一个页面将有英文和中文内容的组合-eek

任何人都可以提供指导,以确定我是否正确地编写了代码,或者是否有其他方法来满足需求

提前感谢,

多米尼克

注意:这是一个间歇性问题,不是永久性问题。似乎没有任何共同行动可以复制这一问题。这只是碰巧

p.p.S这是一幅关于实际问题的图像:

2009年9月23日更新:

在尝试将其更改为Page.Culture之后,我仍然有更多的间歇性问题

我对为什么会发生这种情况有一些想法,但无法证明我的“假设”是正确的:

我们使用的是IIS 5.0隔离模式,这意味着对于每个IIS实例,只有aspnet_wp.exe正在运行,而不是w3wp.exe。 RealServices也在服务器上运行,为香港生成报告。 当站点负载较重时,故障会更频繁地发生-我假设是因为生成了大量报告。 除此之外,我不知道还有什么会导致这个问题。我会显示另一个屏幕截图,但问题是相同的,并出现在同一个地方,作为前一个屏幕截图显示

2009年9月25日更新:

我想我们可能已经解决了。在我们的Web.config中,有一个标记配置如下:

<globalization uiCulture="auto" culture="auto"/>
在移除之后,在初始测试之后,它还没有出现

2009年10月13日更新:

问题再次出现:-

2009年10月26日更新:


如果站点的另一个用户更改了他们的首选语言,它似乎会影响站点上的所有其他用户!虽然他们的首选语言已设置,但不知何故,其他人的语言切换会影响网站的其他用户

它不应该使用Page.Culture而不是Thread吗?

经过很长很长的时间,我终于弄明白了为什么会出现这个问题

该网站最初是一个frameset.asp,承载3个.NET框架-顶部、中部和底部。我注意到,.NET生成了3个会话,因此任何更改只影响一个帧

在某种程度上,它并不能完全解释为什么只有部分页面可以正常工作,但它解决了很多关于一些奇怪的Repsonse.Redirects的问题


总之,frameset.asp与frameset.aspx一起被重放,它为所有帧生成一个cookie/会话ID。

我认为它是线程,因为资源使用线程来区分不同的语言。Page.Culture和Page.UICulture确实只包装线程的属性。他们将字符串转换为CultureInfo,并处理将自动转换为浏览器指定的区域性的操作。好的,在进行更改后,我将重新部署到live。不幸的是,我们无法在开发阶段复制这一点。如果我没有收到任何投诉,我会给你答案:-