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

时间:2009-08-25 10:40:51

标签: localization asp.net-2.0 multilingual currentuiculture

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

其中一个要求是用户可以选择覆盖显示为其他语言的语言。因此,香港的用户可以用英语查看网站,反之亦然。

我的2个资源文件是

  • Resources.resx(英文 - 默认翻译)
  • Resources.zh-HK.resx(中文)

网站执行此逻辑

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

    //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以使用

    自动获取uiCulture
    <globalization uiCulture="auto"/>
    

    由于一些非常奇怪的原因,一些用户(甚至是en-GB用户)发现该语言无缘无故地切换到zh-HK - 有时在页面之间!我已经为这些页面添加了一些调试代码,这些代码将在未来几天内显示更多信息。到目前为止,所有用户都不一定来自zh-HK,有些来自zh-CN或zh-TW。虽然这可能有所帮助,因为en-GB用户正在看zh-HK,我认为它只是一个红色的鲱鱼。

    我注意到,切换发生在页面内容上(从基页继承的那些,IntializeCulture()方法存在)。我编写的自定义用户控件没有遇到此问题,并以用户配置的正确语言显示。因此,页面将包含英文和中文内容的组合 - eek!

    任何人都可以指导我是否正确编码,或者是接近要求的替代方法。

    提前致谢,

    P.S。这是一个间歇性问题而不是永久性问题。似乎没有复制此问题的共同行动。它只是 - 发生。

    P.P.S以下是行动中问题的图像:

    Web page showing Chinese/English problem


    09年9月23日更新:

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

    我有几点想法可能会发生这种情况,但我无法证明我的“假设”:

    • 我们正在使用IIS 5.0隔离模式,这意味着只有aspnet_wp.exe正在运行,而不是每个IIS实例都有w3wp.exe。
    • Reporting Services也在服务器上运行,为香港生成报告。
    • 当网站负载很重时,故障更频繁发生 - 我假设由于生成了大量报告。

    除此之外,我不知道还有什么可能导致这个问题。我会显示另一个屏幕截图,但问题是相同的,并且确实出现在上一个屏幕截图所示的相同位置。

    09年9月25日更新:

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

    <globalization uiCulture="auto" culture="auto"/>
    

    删除后,在初步测试后,它还没有出现!

    09年10月13日更新:

    问题又出现了: - (

    09年10月26日更新:

    似乎如果该网站的其他用户更改了他们的首选语言,则会影响该网站上的所有其他用户!虽然设置了他们的首选语言,但其他人的语言切换会影响网站的其他用户!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

经过很长一段时间,我终于弄清楚了为什么会出现这个问题。

该网站以frameset.asp开始,托管3个.NET框架 - 顶部,中部,底部。我注意到的是,.NET生成了3个会话,因此任何更改只会影响一个帧。

在某种程度上,它并不能完全解释为什么只有部分页面正在工作,但它已经解决了一些关于我们正在进行的一些奇怪的Repsonse.Redirects的问题。

总之,frameset.asp重新使用了frameset.aspx,它为所有帧生成一个cookie / Session ID。