我正在开发一个支持多种语言的web应用程序,我问自己哪一层应该是检查浏览器语言的最佳层(如果我可以这样命名的话)
我应该检查PHP使用$_SERVER["HTTP_ACCEPT_LANGUAGE"]
或将更好,如果我检查Javascript使用navigator.language
?
哪一个和为什么,堆栈?
实际上它们都将捕获浏览器中的语言集。主要的区别是$_SERVER
支持多种语言,而navigator.language
只能选择浏览器喜欢的第一种语言。
另一个区别是一个在客户端使用JavaScript捕获,而另一个在服务器端使用HTTP标头捕获。公平地说(即使报头可以被欺骗),在服务器端捕获值更稳定。
在Firefox中使用tools->options->content->language
。如果我将语言设置为Chinese
然后当我发出请求并检查HTTP报头时,它会说:
Accept-Language: zh,en-us;q=0.7,en;q=0.3
//zh是两个字母的中文表示
和$_SERVER["HTTP_ACCEPT_LANGUAGE"]
将得到zh,en-us;q=0.7,en;q=0.3
导航器。语言只会给我zh
在header中你可以看到你可以按顺序支持多种语言选项。因此,如果由于某些原因无法翻译中文,您可以检查首选的第二语言。
如果你使用navigator.language
,你不能这样做…
您应该使用$_SERVER["HTTP_ACCEPT_LANGUAGE"]
。请注意,这是一个首选语言的加权列表,您应该相应地使用它(即。不要只把第一门语言从列表中去掉)
navigator.language
并没有告诉您浏览器中的首选语言集,而是浏览器应用程序本身的实际语言。
navigator.language
在Firefox中返回首选语言,在Opera和Chrome中返回浏览器语言,而在IE中没有返回。