Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
浏览器语言来自PHP还是来自Javascript?_Php_Javascript_Internationalization - Fatal编程技术网

浏览器语言来自PHP还是来自Javascript?

浏览器语言来自PHP还是来自Javascript?,php,javascript,internationalization,Php,Javascript,Internationalization,我正在开发一个支持多种语言的web应用程序,我在问自己,如果我能这样命名来检查浏览器的语言,哪一层应该是最好的 我应该使用$\u SERVER[HTTP\u ACCEPT\u LANGUAGE]在PHP上检查它,还是使用navigator.LANGUAGE在Javascript中检查它会更好 stackers,这是什么原因?您应该使用$\u服务器[HTTP\u ACCEPT\u语言]。请注意,这是首选语言的加权列表,您应该相应地使用它,即不要只从列表中删除第一种语言 navigator.lang

我正在开发一个支持多种语言的web应用程序,我在问自己,如果我能这样命名来检查浏览器的语言,哪一层应该是最好的

我应该使用$\u SERVER[HTTP\u ACCEPT\u LANGUAGE]在PHP上检查它,还是使用navigator.LANGUAGE在Javascript中检查它会更好

stackers,这是什么原因?

您应该使用$\u服务器[HTTP\u ACCEPT\u语言]。请注意,这是首选语言的加权列表,您应该相应地使用它,即不要只从列表中删除第一种语言

navigator.language不会告诉您浏览器中设置的首选语言,而是告诉您浏览器应用程序本身的实际语言

编辑:通过快速测试,navigator.language在Firefox中返回首选语言,在Opera和Chrome中返回浏览器语言,在IE中不返回任何内容。

您应该使用$\u服务器[HTTP\u ACCEPT\u language]。请注意,这是首选语言的加权列表,您应该相应地使用它,即不要只从列表中删除第一种语言

navigator.language不会告诉您浏览器中设置的首选语言,而是告诉您浏览器应用程序本身的实际语言


编辑:通过快速测试,navigator.language在Firefox中返回首选语言,在Opera和Chrome中返回浏览器语言,在IE中不返回任何内容。

实际上,它们都将捕获浏览器中设置的语言。主要区别在于$_服务器支持按首选顺序排列的多种语言,而navigator.language只能选择浏览器首选的第一种语言

另一个区别是,一个在客户端使用JavaScript捕获,另一个在服务器端使用HTTP头捕获。公平地说,即使可以伪造头,在服务器端捕获值也更稳定

在Firefox中使用工具->选项->内容->语言。如果我把语言设定成中文

然后,当我发出请求并检查HTTP头时,它会说:

接受语言:zh,en-us;q=0.7,en;q=0.3//zh是两个字母的中文表示形式

美元服务器[HTTP\u ACCEPT\u LANGUAGE]会给我zh,en-us;q=0.7,en;q=0.3

navigator.language将只给我zh

因此,在标题中,您可以看到您可以依次支持多个语言选项。因此,如果由于某种原因无法呈现中文,您可以检查首选的第二语言


如果使用navigator.language,则无法执行此操作。

实际上,它们都将捕获浏览器中设置的语言。主要区别在于$_服务器支持按首选顺序排列的多种语言,而navigator.language只能选择浏览器首选的第一种语言

另一个区别是,一个在客户端使用JavaScript捕获,另一个在服务器端使用HTTP头捕获。公平地说,即使可以伪造头,在服务器端捕获值也更稳定

在Firefox中使用工具->选项->内容->语言。如果我把语言设定成中文

然后,当我发出请求并检查HTTP头时,它会说:

接受语言:zh,en-us;q=0.7,en;q=0.3//zh是两个字母的中文表示形式

美元服务器[HTTP\u ACCEPT\u LANGUAGE]会给我zh,en-us;q=0.7,en;q=0.3

navigator.language将只给我zh

因此,在标题中,您可以看到您可以依次支持多个语言选项。因此,如果由于某种原因无法呈现中文,您可以检查首选的第二语言


如果您使用navigator.language,则无法执行此操作。

无论您选择什么,我都会将其设置为默认语言,我会始终让用户在事后更改语言。当然,我正在这样做,但我只需要设置一种语言来开始查看页面,我认为如果我从用户的浏览器中选择它,这将非常接近。无论你选择什么,我都会将其设置为默认语言,我会让用户在事后更改语言。当然我正在这样做,但我只需要设置一种语言来开始查看页面,我想如果我从用户的浏览器中选择它,这会非常接近。我在发布我的答案之前就这么做了:我有一个美国英语安装。如果不做任何更改,alertnavigator.language将显示en。现在,如果我在浏览器中使用我提到的步骤将中文设置为我的语言,并将其移动到语言顺序的顶部,那么alertnavigator.language将显示zh。你也可以试试,因为很明显你也不相信我:我刚刚删除了我的尴尬评论。我被一个糟糕的测试误导了。我的借口!澄清一下:从Gecko 5.0 Firefox 5.0/Thunderbird 5.0/SeaMonkey 2.2开始,此属性的值基于Accept Language HTTP头的值
这是英国的装置。如果不做任何更改,alertnavigator.language将显示en。现在,如果我在浏览器中使用我提到的步骤将中文设置为我的语言,并将其移动到语言顺序的顶部,那么alertnavigator.language将显示zh。你也可以试试,因为很明显你也不相信我:我刚刚删除了我的尴尬评论。我被一个糟糕的测试误导了。我的借口!澄清一下:从Gecko 5.0 Firefox 5.0/Thunderbird 5.0/SeaMonkey 2.2开始,此属性的值基于Accept Language HTTP头的值。关于navigator.Language,显然不是这样。在大多数现代浏览器中,它从Accept Language HTTP头中获取值。即使你的浏览器是英文的,它也可以返回fr。@阿尔瓦罗G.维卡里奥:你心目中最现代的浏览器是什么?实际上,它在大多数浏览器中的工作方式似乎有所不同——FF中的用户语言,Chrome和Opera中的浏览器语言,IE中的任何语言。。。但无论如何,重要的是HTTP_ACCEPT_语言是首选语言列表,而navigator.LANGUAGE最多只能返回其中一种;IE不支持它,也没有关于Opera和Safari中具体行为的详细信息。当然,正确解析HTTP_ACCEPT_语言是正确的方法,正如您已经声明的那样。关于navigator.LANGUAGE,显然不是这样。在大多数现代浏览器中,它从Accept Language HTTP头中获取值。即使你的浏览器是英文的,它也可以返回fr。@阿尔瓦罗G.维卡里奥:你心目中最现代的浏览器是什么?实际上,它在大多数浏览器中的工作方式似乎有所不同——FF中的用户语言,Chrome和Opera中的浏览器语言,IE中的任何语言。。。但无论如何,重要的是HTTP_ACCEPT_语言是首选语言列表,而navigator.LANGUAGE最多只能返回其中一种;IE不支持它,也没有关于Opera和Safari中具体行为的详细信息。当然,正确解析HTTP_ACCEPT_语言是正确的方法,正如您已经声明的那样。