我正在构建一个ASP.NET Web应用程序,我的所有字符串都存储在一个资源文件中。我想在我的应用程序中添加第二种语言,理想情况下,我想自动检测用户的浏览器语言(或Windows语言)并默认使用,而不是让他们选择除英语之外的其他语言。目前,我正在手动处理所有资源填充,因此从我的角度来看,添加第二个资源文件和语言是微不足道的,如果我有一种简单的方法可以自动找出要显示的语言。

有没有人这样做过,或者你对我如何找回这个价值有什么想法?由于ASP.NET是基于服务器的,因此我似乎无法访问特定的浏览器设置。

解决方案:这就是我最终要做的事情。我使用了“For Each”和“For Each”。通过“HttpContext.Current.Request.UserLanguages”并搜索我支持的一个。我实际上只是检查左边两个字符,因为我们还不支持任何方言 - 只有英语和西班牙语。谢谢你的帮助!

有帮助吗?

解决方案

文章(链接到archive.org,因为原始链接现已死)可能有助于自动检测浏览器的语言设置。

[编辑]是的。引用的文章不使用ASP.NET。这个文章确实如此。

其他提示

在web.config中尝试:

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

这将导致ASP.NET从请求标头中自动检测客户端的文化。您也可以通过Page属性在每页基础上设置它。

ASP.NET 4中的Request.UserLanguages将其解析为字符串数组。

好消息: http://www.w3.org/Protocols/rfc2616 /rfc2616-sec14.html

这是一个很好的问题,因为 ASP.NET 中的本地化被忽略了许多开发人员。

ASP.NET 自动选择用户的浏览器设置,并强制 CultureInfo.CurrentCulture 使用用户的浏览器语言。您可以使用 Page_OnInit()中的一行来强制解决问题:

Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);

你怎么测试这个?在我们的浏览器中输入语言面板并更改设置。

客户端通常会在HTTP请求标头中定量设置 Accept-Language 得分的首选语言列表,通常(但不一定)按照最受青睐的顺序排列。你可以解析它,但正如Maxam所说, ASP.NET 确实有一个机制代表你这样做。

    /// <summary>
    /// Sets a user's Locale based on the browser's Locale setting. If no setting
    /// is provided the default Locale is used.
    /// </summary>

public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture)
{
    HttpRequest Request = HttpContext.Current.Request;
    if (Request.UserLanguages == null)
        return;

    string Lang = Request.UserLanguages[0];
    if (Lang != null)
    {
        // *** Problems with Turkish Locale and upper/lower case
        // *** DataRow/DataTable indexes
        if (Lang.StartsWith("tr"))
            return;

        if (Lang.Length < 3)
            Lang = Lang + "-" + Lang.ToUpper();
        try
        {
            System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang);
            if (CurrencySymbol != null && CurrencySymbol != "")
                Culture.NumberFormat.CurrencySymbol = CurrencySymbol;

            System.Threading.Thread.CurrentThread.CurrentCulture = Culture;

            if (SetUiCulture)
                System.Threading.Thread.CurrentThread.CurrentUICulture = Culture;
        }
        catch
        { ;}
    }
}

这篇文章的来源是: 如何检测浏览器语言

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top