0

我尝试以这种方式使用 jQuery 检索“接受语言”HTTP 标头值:

$(document).ready(function () {
    //Ask ASP.NET what culture we prefer, because we stuck it in a meta tag
    var data = $("meta[name='accept-language']").attr("content")
});

从这里提取。

存在 HTTP 标头是因为我可以通过 Chrome 网络控制台选项卡看到它"Accept-Language:en-US,en;q=0.8,de;q=0.6,es;q=0.4",但我总是获得undefined价值。

任何想法?

4

3 回答 3

2

您稍微误解了代码片段。在 Scott Hanselman 的文章中,他向 HTML 文档添加了一个自定义meta元素。headjQuery 选择器$("meta[name='accept-language']")只是找到那个元元素,这样你就可以获得它的值。

在返回页面的请求中,无法直接查看客户端发送的值。这不是 DOM 公开的信息。您可以获得的最接近的是navigator.language,但这只是浏览器中设置的语言,与标题不同。

这就是meta添加自定义标签以公开此信息的原因。

于 2013-01-22T10:15:11.890 回答
2

您需要注意,此代码不是检索实际的标头,而是已放入META标记的值(JavaScript 无法访问原始请求的标头)。在您链接的文章中,您有这个助手:

namespace System.Web.Mvc
{
    public static class LocalizationHelpers
    {
        public static IHtmlString MetaAcceptLanguage<T>(this HtmlHelper<T> html)
        {
            var acceptLanguage = HttpUtility.HtmlAttributeEncode(Threading.Thread.CurrentThread.CurrentUICulture.ToString());
            return new HtmlString(String.Format("<META name=\ content=\ {0}\?? accept-language\??>",acceptLanguage));
        }
    }
} 

您需要将其添加到项目中,然后在视图中使用,如下所示:

<HTML>
    <HEAD>
        ...
        @Html.MetaAcceptLanguage()
    </HEAD>
    ...
</HTML> 
于 2013-01-22T10:13:20.563 回答
0

你可以用javascript做。

  1. 可以在客户端更改接受标头。服务器端检查也是如此。(尽管您只关心语言标题)

//navigator.userLanguage for ie

//navigator.language 其他

var language = window.navigator.userLanguage || window.navigator.language;
alert(language);
于 2013-01-22T10:08:53.277 回答