1

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

其中一个要求是用户可以选择将显示的语言覆盖为另一种语言。因此,香港用户可以用英文浏览网站,反之亦然。

我的 2 个资源文件是

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

该站点执行此逻辑

  1. 加载用户详细信息
  2. 检查用户是否覆盖了首选语言
  3. 如果有,请将 Thread.CurrentThread.CurrentUICulture 设置为此语言。
  4. 如果没有,请使用默认浏览器。

这在以下代码中实现:

//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!

任何人都可以就我是否正确编码或接近要求的替代方式提供指导。

提前致谢,

多米尼克

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

PPS 以下是实际问题的图片:

显示中文/英文问题的网页


2009 年 9 月 23 日更新:

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

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

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

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

2009 年 9 月 25 日更新:

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

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

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

2009 年 10 月 13 日更新:

问题又出现了:-(

2009 年 10 月 26 日更新:

似乎如果站点的其他用户更改了他们的首选语言,它会影响站点上的所有其他用户!尽管设置了他们的首选语言,但其他人的语言切换会以某种方式影响网站的其他用户!

4

2 回答 2

0

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

于 2009-08-25T10:47:09.520 回答
0

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

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

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

总之,frameset.asp 是用 frameset.aspx 重新编码的,它为所有框架生成一个 cookie / Session ID。

于 2010-05-12T09:34:52.700 回答