将语言环境附加到请求 accept-language

Append a locale to the request accept-language

我有一个 angular 应用程序,我需要将 accept-language header 设置为所有 ajax 调用。目前浏览器发送它自己的 accept-language 但我们有一个 api 这也给了我一个语言环境所以要求是附加我从 api 获得的语言环境到现有的浏览器语言环境。

所以简单来说,逻辑是:- Accept-Language= "accept-language from browser"+"api call language"

假设浏览器的语言环境是 en,en-US,我从 api 收到了 es-MX,所以我需要发送的是 en,en-US,es-MX 用于接下来的所有 api 个调用。

我如何获取浏览器随每个请求发送的 accept-language。

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

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

前两个甚至在 chrome/firefox/edge 上都不起作用。

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

有什么方法可以将我的语言环境附加到浏览器设置的accept-language。

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

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

感谢任何帮助。

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

tries to determine by itself what the preferred language would be. It searches for values in the window.navigator object in the following properties (also in this order):

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

Please use this method on your own risk! Be aware that each browser can return different values on these properties.

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

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' = 意大利,'en-US' = 英语美国等

window.navigator.language (Chrome/FF/Safari) returns 始终是浏览器语言而不是浏览器的首选语言,但是:"it's pretty common for English speakers (gb, au, nz, etc) to have an en-us version of Firefox/Chrome/Safari." 因此 window.navigator.language 仍然 return en-US 即使用户首选语言是 en-GB