将语言环境附加到请求接受语言

时间:2016-05-19 23:15:46

标签: javascript angularjs localization http-headers

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

所以简单来说逻辑是: - Accept-Language =“来自浏览器的接受语言”+“api call language”

让我们说brower有en,en-US作为其语言环境,我从api收到了es-MX,所以我需要发送的是en,en-US,es-MX用于所有下一个api呼叫。

我如何获取浏览器在每次请求时发送的接受语言。

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

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

前两个donot甚至可以在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';
});

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

请查看angular-translate如何实现它。它具有根据页面https://angular-translate.github.io/docs/#/guide/07_multi-language

的函数determinePreferredLanguage()
  

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

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

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

我觉得这个功能非常可靠,所以我想你可以在你的app中重新实现它。

答案 1 :(得分:0)

var language = window.navigator.userLanguage || window.navigator.language;
alert(language); //works IE/SAFARI/CHROME/FF

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

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

一些语言代码:'它' =意大利,' en-US' =英语美国等。

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