【问题标题】:Append a locale to the request accept-language将语言环境附加到请求接受语言
【发布时间】:2016-05-19 23:15:45
【问题描述】:

我有一个 Angular 应用程序,我需要在其中将接受语言标头设置为所有 ajax 调用。目前浏览器发送它自己的接受语言,但我们有一个 api,它也给了我一个语言环境,所以要求是将我从 api 获得的语言环境附加到现有的浏览器语言环境。

所以简单来说逻辑是:- Accept-Language="从浏览器接受语言"+"api调用语言"

假设浏览器将 en,en-US 作为其语言环境,并且我从 api 收到 es-MX,所以我需要发送 en,en-US,es-MX 以用于所有下一个 api 调用。

我将如何获取浏览器随每个请求发送的接受语言。

到目前为止,根据我所阅读的内容,我需要使用其中之一或全部三个

window.navigator.userLanguage; 
window.navigator.systemLanguage;
window.navigator.language;

前两个甚至不适用于 chrome/firefox/edge。

navigator.language 在 Firefox 中完美运行,但在 chrome 中,我不知道它从哪里选择语言环境,即使我的浏览器设置为西班牙语,我得到 en-US,但 Accept-header 是 es,在 EDGE 中我认为它选择不确定系统区域设置,因为我没有更改浏览器区域设置的选项。

有什么方法可以将我的语言环境附加到浏览器设置的接受语言中。

我知道我可以像这样设置一个新的,但我需要将它附加到浏览器发送的那个。

angular.module('myApp', [])
   .config(function($httpProvider) {
      $httpProvider.defaults.headers
        .common['Accept-Language'] = 'es-MX';
});

感谢任何帮助。

【问题讨论】:

    标签: javascript angularjs localization http-headers


    【解决方案1】:

    请看angular-translate 是如何实现的。它具有功能determinePreferredLanguage(),根据页面https://angular-translate.github.io/docs/#/guide/07_multi-language

    尝试自行确定首选语言。它在以下属性中搜索 window.navigator 对象中的值(也按此顺序):

    navigator.languages[0]
    navigator.language
    navigator.browserLanguage
    navigator.systemLanguage
    navigator.userLanguage
    

    请自行承担使用此方法的风险!请注意,每个浏览器都可以在这些属性上返回不同的值。

    我发现该功能非常可靠,因此我想您可以在您的应用中重新实现它。

    【讨论】:

    • 我试过了,但它有同样的东西,这不能帮助我获得浏览器发送的接受语言区域设置,使用它在 chrome 中存在同样的问题我没有得到它在接受标头中设置的内容.
    • @Grinish 恐怕循环遍历这些属性是你最好的选择。没有办法获得浏览器发送的这个确切的接受语言标头 - 不使用 javascript(从客户端)。你就是做不到。对不起。
    【解决方案2】:
    var language = window.navigator.userLanguage || window.navigator.language;
    alert(language); //works IE/SAFARI/CHROME/FF
    

    window.navigator.userLanguage 仅适用于 IE,它是在 Windows 控制面板 - 区域选项中设置的语言,而不是浏览器语言,但您可以假设使用将 Window 区域设置设置为法国的机器的用户可能是法国用户.

    navigator.language 是 FireFox 和其他所有浏览器。

    一些语言代码:'it' = italy,'en-US' = English US,等等。

    window.navigator.language (Chrome/FF/Safari) 总是返回浏览器语言而不是浏览器的首选语言,但是:“说英语的人(gb、au、nz 等)拥有 en-us 版本是很常见的的 Firefox/Chrome/Safari。”因此,即使用户首选语言是 en-GB,window.navigator.language 仍将返回 en-US

    【讨论】:

    • 我已经有了这个逻辑,但我需要获取接受语言中的语言环境,但这并不适用,我也有这个问题。
    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 2019-06-25
    • 1970-01-01
    • 2016-07-13
    • 2018-02-23
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多