设置会话文化

Posted

技术标签:

【中文标题】设置会话文化【英文标题】:Setting culture for session 【发布时间】:2011-12-13 10:47:00 【问题描述】:

我的应用程序的每个用户都将选择他们的国家/地区,然后将其存储在 cookie 中并存储以供以后的请求使用。一切正常,但我需要在会话开始时设置文化。我目前正在尝试将 web.config 中的文化设置为 en-GB,然后使用 Global.asax 将会话的文化覆盖为 en-US。代码如下

protected void Session_Start(object sender, EventArgs e)
    
        if (Globals.CountryID == 8)
        
            Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
        
    

countryID 为 8,文化在以下代码中设置为 en-US。但是,当我导航到设置了 ToString("C") 的页面时,它仍然以 GBP 显示,并且文化仍然是 en-GB。

有什么建议吗?

【问题讨论】:

【参考方案1】:

您假设将为页面请求提供服务的线程与在您的代码中启动会话的线程相同 - 这不能保证。

您可能希望将区域性保存在 Session 变量中并在您的页面中使用覆盖 InitializeCulture,如下所述:How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization。

【讨论】:

所以我需要在每个页面上都这样做,或者为每个其他页面创建一个基本页面来继承?该死,我的应用程序中有 700 多个页面。 @Paul - 是的,这些是您的选择。基本页面可能是最好的选择。 不幸的是,您仍然需要为 WebMethods 做一些事情。 Ajax 调用不经过 Page 初始化。【参考方案2】:

您必须在每次调用时设置文化,Session_Start 仅在创建会话时触发。因此,只有在第一次通话或重新创建会话时,您的文化才是正确的。

【讨论】:

以上是关于设置会话文化的主要内容,如果未能解决你的问题,请参考以下文章

更改 Powershell 会话的当前文化,特定于 v3.0+

《娱乐至死》读书笔记(part1)--深入一种文化的最有效途径是了解这种文化中用于会话的工具

8 Xshell 会话设置

使用会话 ID 取消设置特定会话

即使将其类别设置为播放(Swift),音频会话也会与其他会话混合?

Impala JDBC 连接:错误设置/关闭会话:打开会话错误