我如何获得用户文化在HtmlHelper扩展MVC 3 . net应用程序

本文关键字:MVC 扩展 net 应用程序 HtmlHelper 何获得 用户 文化 | 更新日期: 2023-09-27 18:10:37

我正在为我的MVC 3应用程序创建一个新的HtmlHelper扩展。我需要在我的新助手中获取查看页面的用户的文化信息。

我怎样才能得到它??

public static class HtmlExtension
{
    public static string StringFor(this HtmlHelper html, string key)
    {
        ...
        //I need to get CultureInfo in here!
        ...
    }
}

我如何获得用户文化在HtmlHelper扩展MVC 3 . net应用程序

直接的答案是"通过CultureInfo.CurrentCulture获取它",但它本身不会帮助你。

考虑你的应用程序没有"用户文化"的概念——用户通过他们的浏览器与你交谈,你不在他们的系统上。

现在浏览器给你一个Accept-Language头,你可以使用(谷歌会给你很多点击),但不建议使用这个设置来确定用户的区域设置,因为在实践中几乎没有用户知道这个设置,并自定义它来反映他们的偏好。最好的方法可能是单方面决定用户的文化是什么(例如将en作为默认值,并给他们一种通过UI更改它的方法),将其存储在某处(在会话状态中或作为路由变量)并将其推入HttpApplication.AcquireRequestState中的CultureInfo.CurrentCulture。您可以在Global.asax中这样做(示例取自MSDN):

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    CultureInfo ci = (CultureInfo)this.Session["culture"];
    if (ci != null) {
        CurrentThread.CurrentUICulture = ci;
        CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
    }
}

在这一点上,这个答案变成了一个自我实现的预言,您可以从任何地方通过CultureInfo.CurrentCulture访问文化。