ASP.NET MVC:当设置Thread.CurrentThread.CurrentUICultu

2019-09-01 18:46发布

我刚刚开始本地化的ASP.NET MVC应用程序。 大部分的字符串将在资源文件中定义,并通过检索马特的本地化助手 。 其他字符串必须存储在数据库中。

我的问题:我应该设置CurrentUICulture在请求管道早期和使用,在整个申请,或直接使用Request.UserLanguages[0]每当需要的?

现在, 我想我应该设置CurrentUICulture中的Application_BeginRequest。 实施将是这个样子:

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

这是设置的最佳场所CurrentUICultureRequest.UserLanguages[0]来获取信息的最佳地点?


更新:

Ariel的帖子显示这可以在没有代码来定义,使用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"/>

Answer 1:

这里是使用HTTP模块的样品:

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

其他选项,创建一个基控制器类,并实现定位逻辑存在。 或使用行为过滤器属性,但你必须记得加上它的每一个控制器上或合并与基Controller类这种方法。



Answer 2:

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

还有一点:不要确保Request.UserLanguages [0]是一个有效的语言。 它甚至可以为null。 (不知道什么机器人有有)

通常你的页面上的语言选择。 一旦用户选择的语言在那里,它被存储在cookie中,会话或URL。 我喜欢使用的网址,因为我认为它看起来很漂亮。

如果用户看到你的网页,而不必设置你的页面上的语言,你应该检查一下Request.UserLanguages [0]是你支持一种语言并设定Thread.CurrentThread.CurrentUICulture。

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

我也用马茨助手和它的工作非常好为止。



文章来源: ASP.NET MVC: When to set Thread.CurrentThread.CurrentUICulture?