【问题标题】:How can I change the System.Globalization.CultureInfo.CurrentUICulture in my .NET 4.0 web application?如何更改 .NET 4.0 Web 应用程序中的 System.Globalization.CultureInfo.CurrentUICulture?
【发布时间】:2011-05-07 06:00:29
【问题描述】:

我似乎无法根据用户偏好(.NET 4.0 Web 应用程序)更改 System.Globalization.CultureInfo.CurrentUICulture 值。

在我的 Web 应用程序中,我有两个按钮。一种用于希腊语,一种用于英语。单击按钮时,会向服务器发送一个请求,要求更改用户首选语言。对于希腊语,我发送“el-GR”,对于英语,我发送“en-US”。

在服务器端,我使用下面这段代码来更改当前的CultureInfo

 Dim languageChosen As String = Me.Context.Request.Params("langId")

 ' Code for CultureInfo
 Dim cultureInfo As System.Globalization.CultureInfo
 cultureInfo = New System.Globalization.CultureInfo(languageChosen)

 ' Code for Setting the CurrentCulture
 Thread.CurrentThread.CurrentCulture = cultureInfo
 Thread.CurrentThread.CurrentUICulture = cultureInfo

 Response.Redirect("Default.aspx", True)

现在,在对服务器的下一个请求中,我通过从 CultureInfo.CurrentUICulture.TwoLetterISOLanguageName 获取值来检查当前文化,即使我用户选择了“el-GR”,它也始终显示“en”。

问题可能出在哪里?

我是否必须在请求之间(例如在会话中)保存用户首选语言?然后在每一页的开头设置为System.Thread.CurrentThread.CurrentCulture

【问题讨论】:

    标签: vb.net .net-4.0 internationalization globalization


    【解决方案1】:

    我已经找到了问题的解决方案。

    1) 我必须在 Session 中保存用户偏好。 2) 每次加载页面时,我现在根据用户保存的会话语言首选项构建cultureInfo 后设置Thread.CurrentThread.CurrentCulture。我这样做的代码点是在 InitializeCulture 覆盖中。换句话说,我的页面会覆盖 InitializeCulture,如下所示:

    Protected Overrides Sub InitializeCulture()
        Dim l_languageChosen As String = Session("language")
    
        ' Code for CultureInfo
        Dim cultureInfo As System.Globalization.CultureInfo
        cultureInfo = New System.Globalization.CultureInfo(l_languageChosen)
    
        ' Code for Setting the CurrentCulture
        Thread.CurrentThread.CurrentCulture = cultureInfo
        Thread.CurrentThread.CurrentUICulture = cultureInfo
    
        MyBase.InitializeCulture()
    
    End Sub
    

    3) 为了避免让我的所有页面覆盖此方法并避免重复代码,我创建了一个超类“MyWebPage”,它执行覆盖(并且继承自System.Web.UI.Page),然后我将所有我的页面继承自 MyWebPage。 4) 当然,在设置了 Thread.CurrentThread.CurrentCulture 和 CurrentUICulture 之后,响应用户更改语言请求的服务器代码相应地更改以保存会话中的语言首选项 5) 我还在web.config 中设置了globalization 标签,如下所示:

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

    这使我能够检测用户在他/她的浏览器中设置的语言偏好,以便我可以初步设置首选语言。

    6) 在我的global.asax 中,我保存从浏览器检测到的语言首选项,如下所示:

    Session.Add("language", System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)
    

    现在一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2011-03-21
      相关资源
      最近更新 更多