【问题标题】:ASP.NET MVC: When to set Thread.CurrentThread.CurrentUICulture?ASP.NET MVC:何时设置 Thread.CurrentThread.CurrentUICulture?
【发布时间】:2010-12-10 16:15:06
【问题描述】:

我刚刚开始本地化 ASP.NET MVC 应用程序。大多数字符串将在资源文件中定义并通过Matt's Localization Helpers 检索。其他字符串必须存储在数据库中。

我的问题: 我应该在请求管道的早期设置CurrentUICulture 并在整个应用程序中使用它,还是在需要时直接使用Request.UserLanguages[0]

现在我想我应该在 Application_BeginRequest 中设置CurrentUICulture。实现看起来像这样:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var cultureName = HttpContext.Current.Request.UserLanguages[0];
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
}

这是设置CurrentUICulture 的最佳位置吗?是Request.UserLanguages[0] 获取该信息的最佳位置吗?


更新:

Ariel's 帖子显示这可以在没有代码的情况下使用web.config 进行定义

<system.web>
  <!--If enableClientBasedCulture is true, ASP.NET can set the UI culture and culture for a Web page automatically, based on the values that are sent by a browser.-->
  <globalization enableClientBasedCulture="true" culture="auto:en-US" uiCulture="auto:en"/>

【问题讨论】:

    标签: asp.net-mvc localization globalization


    【解决方案1】:

    这是一个使用 HttpModule 的示例:

    http://weblogs.manas.com.ar/smedina/2008/12/17/internationalization-in-aspnet-mvc/

    其他选项,创建一个基本 Controller 类并在那里实现本地化逻辑。 或者使用动作过滤器属性,但您必须记住将它添加到每个控制器上,或者将此方法与基本 Controller 类结合使用。

    【讨论】:

    【解决方案2】:

    Request.UserLanguages[0] 只能提示用户希望看到的语言。大多数用户不知道在哪里更改浏览器语言。

    另一点:不要确定 Request.UserLanguages[0] 是有效的语言。它甚至可以为空。 (不确定那里有什么机器人)

    您通常在页面上有一个语言选择器。一旦用户在那里选择了一种语言,它就会存储在 cookie、会话或 url 中。我喜欢使用 url,因为我觉得它看起来很漂亮。

    如果用户在未在页面上设置语言的情况下看到您的页面,则应检查 Request.UserLanguages[0] 是否是您支持的语言并设置 Thread.CurrentThread.CurrentUICulture。

    我使用过滤器来设置 Thread.CurrentThread.CurrentUICulture。只要没有其他过滤器使用 Thread.CurrentThread.CurrentUICulture 就可以。否则,您需要为过滤器设置正确的执行顺序。

    我也使用了 Matts 助手,到目前为止效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 2011-02-05
      • 2010-10-18
      • 2017-05-28
      相关资源
      最近更新 更多