如何更改浏览器的接受语言

感觉美学

例如,如果用户将其浏览器设置为fr-CA,但我的网站可以选择以其他可用语言(例如英语)查看页面。如何覆盖accept-language标头,以便可以使用指定的语言重新加载?

我试图简单地更改Accept-Language标头,然后重新加载页面,但是我不确定如何执行此操作。有什么想法吗?

更新:好的,所以我要让人们向我解释什么是本地化,所以我一定不能正确地问这个问题。

我的网站目前在web.config中将全球化设置为auto,因此它将自动将线程区域性设置为应用启动时协商的语言。默认情况下,用户的浏览器将根据浏览器的语言设置发送接受语言标头,就像下面指出的那样,普通用户不知道它们是什么,在哪里或如何更改。无论如何,我们将此默认行为称为浏览器将首先处理语言标头。但是,作为一项功能,我希望允许用户从页面中更改此接受语言标头。例如,在应用程序中,语言设置通常由Cookie或用户首选项(通过配置文件设置)确定,但在着陆/登录页面上(特别是如果这是您首次登录某台计算机),我不知道您是谁,因此只有您的浏览器设置可用。但是,假设您是出差旅行并且正在使用美国计算机访问该网站,该页面以英语加载,您无法阅读,并且不知道如何更改浏览器语言。从下拉菜单或图标等中选择语言会不会很好?我想会的。

因此,为了做到这一点,我需要能够更改该accept-language标头并重新加载页面。这是我不确定如何进行的地方。

我已经尝试过了navigator.language = <selected language>xhr.setRequestHeader但是这些似乎没有用。

拉西尔·R。

我可能是错的,但是语言环境设置不是您在代码中更改的内容。这取决于浏览器的用户配置。如果您使用的是HttpClient,则肯定会将所需的Accept-Language标头的值发送到服务器,但是不要期望从代码中更改此值,并使它在浏览器中发出的所有请求中有效。

通常的做法是根据用户的语言偏好设置自定义Cookie。默认情况下,您应该使用Accept-Language标头上的值填充此Cookie。在ASP.NET MVC中有一个设置,因此Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture都根据用户的浏览器配置进行设置:

<system.web>
    <globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" />
</system.web>

然后,您可以创建一个ActionFilter来检查自定义语言cookie,并相应地设置Thread.CurrentThread.CurrentUICulture

Thread.CurrentThread.CurrentUICulture用于确定代码应使用哪些资源。而Thread.CurrentThread.CurrentCulture用于所有数字和日期处理。

该动作过滤器如下所示:

public class LanguageActionFilter : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var langCookie = GetOrSetLanguageCookie(filterContext.HttpContext);
        var culture = new CultureInfo(langCookie.Value);

        Thread.CurrentThread.CurrentUICulture = culture;
    }

    private HttpCookie GetOrSetLanguageCookie(HttpContextBase context)
    {
        var cookie = context.Request.Cookies[Constants.LanguageCookieName];
        if (cookie == null)
        {
            //set the cookie for first time
            cookie = new HttpCookie(Constants.LanguageCookieName, Thread.CurrentThread.CurrentUICulture.Name)
            {
                Expires = DateTime.Now.AddYears(1),
                Path = "/"
            };
            context.Response.Cookies.Add(cookie);
        }
        return cookie;
    }
}

请注意:

  • 即使您的用户选择了,例如,在界面中说“ es-Ar”,并为该用户相应地设置了UICulture,如果该用户的浏览器配置了为该用户发布的美国日期,则将使用英语惯例进行解析,所以浮点数会。

IE:如果美国用户的浏览器设置为en_US,则选择使用您应用的西班牙语界面,则该用户向服务器发布信息的日期如下:

1/5/2015将在服务器中解析为1月5日,而不是5月1日。

像1,900这样的数字在服务器中将被解析为1900,而不是1.900。

我经过惨痛的教训才学到这个。我有一个问题在这里这是从来没有回答。

请让我知道,如果你有任何问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何基于浏览器接受语言自动设置文化?

来自分类Dev

如何更改谷歌浏览器的接受标头?

来自分类Dev

如何根据浏览器语言更改翻译“浏览”或“选择文件”以用于表单输入类型=文件

来自分类Dev

如何设置PhantomJS的浏览器语言

来自分类Dev

以编程方式更改浏览器语言首选项

来自分类Dev

以编程方式更改浏览器语言首选项

来自分类Dev

更改或编辑浏览器的语言环境设置

来自分类Dev

如何更改浏览器标题?

来自分类Dev

如何更改项目浏览器的标题?

来自分类Dev

如何更改默认浏览器?

来自分类Dev

如何更改默认浏览器?

来自分类Dev

如何更改Skype默认浏览器

来自分类Dev

如何更改浏览器的测试日期?

来自分类Dev

如何更改默认浏览器?

来自分类Dev

浏览器语言检测

来自分类Dev

如何接受跨浏览器的* .csv格式输入文件?

来自分类Dev

如何使用RemoteWebDriver设置浏览器语言

来自分类Dev

AngularJS如何使用浏览器语言检测?

来自分类Dev

浏览器如何选择脚本的转译语言

来自分类Dev

如何更改此JS,以使其根据浏览器的语言环境返回不同的字符串?

来自分类Dev

如何将谷歌浏览器中的默认浏览器搜索更改为实际的谷歌浏览器?

来自分类Dev

更改浏览器宽度时如何更改宽度...?

来自分类Dev

如何更改Cordova浏览器平台的默认浏览器?

来自分类Dev

更改浏览器的时区

来自分类Dev

CSS文件ist不再更新。.浏览器没有接受我的更改

来自分类Dev

如何设置拼写检查语言浏览器而不显示那些语言的菜单

来自分类Dev

检测浏览器显示语言

来自分类Dev

jQuery浏览器语言检测

来自分类Dev

获取浏览器的语言环境

Related 相关文章

热门标签

归档