繁体   English   中英

如何检测浏览器是否支持某种语言?

[英]How to detect if the browser supports a language?

我正在建立一个多语言网站。 是否可以使用PHP或Javascript检查用户计算机上是否安装/支持特定语言? 如果不支持/未安装该语言,我想检测并向用户显示一条消息。

谢谢马克。

检测安装哪种语言可能不太可能...

...但是您可以检测到用户愿意从网站中获得哪些语言-即通常来说,他可以理解哪些语言。

大多数浏览器都会发送一个名为“ Accept-Language ”的HTTP标头,其值可以为“ fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3(这是我的当前浏览器发送到我正在访问的网站)

在PHP方面,您可以在$_SERVER数组中获得它:

var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);

将输出:

string 'fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3' (length=35)

在这里,它表示我希望网站以法语向我发送内容; 但是我也接受英语(最好是美国英语,但是我也可以使用普通的默认英语)


您可以找到很多有关如何在PHP中进行解析的示例; 例如: 解析Accept-Language以检测用户的语言

使用该文章中提供的代码,我得到了以下语言数组:

array
  'fr' => int 1
  'fr-fr' => string '0.8' (length=3)
  'en-us' => string '0.5' (length=3)
  'en' => string '0.3' (length=3)

即:

  • 我喜欢法语
  • 如果无法使用“ fr”,那么我喜欢“法国的法国”
  • 如果这也不可行,我接受“美国英语”
  • 如果那也是不可能的话,我对“英语”很满意

而且,如果该网站无法为这些网站提供任何服务...那么,我想我没有太多选择,它将得到想要发送给我的一切...

浏览器通常会发送一个Accept-Language标头,该标头可能会为您提供一些有关人们期望看到的语言的提示。 就我而言,我的浏览器将此标头发送到stackoverflow.com:

Accept-Language: en-us,en;q=0.5

假设您在服务器端使用PHP,则可以在$ _SERVER变量中查找以下信息:

$_SERVER["HTTP_ACCEPT_LANGUAGE"]

通过检查Accept标头可以了解用户的语言首选项。 <selfpromotion type =“ shameless”>几年前,我写了一篇有关该主题的论文 (2000年, phe! ),探讨了这一主题以及一些其他机制。</ selfpromotion>

此后,出现了很多有趣的资源。 特别是,我喜欢本文 ,它对PHP采用了务实的方法。

祝好运!

在过去的十年中,我一直在做多语种工作,而我的印象是您试图超越它:您以错误的方式看待它。 您不必在意用户计算机上安装了哪种语言(针对操作系统还是浏览器):操作系统语言无关紧要,现代浏览器几乎支持所有语言(自NN4淘汰以来,所有文字在Unicode标准中找到位置的系统/字母)。 您应该追求的是用户喜欢哪种语言。 用户是有关“受支持”语言数量的瓶颈。

如果可以,Accept-Language标头可能是一个很好的解决方案。 根据我的经验,它不是-经常出现。 如今,普通用户仍然必须了解URL进入地址栏而不是进入其主页搜索表单-我不希望超过1-2%的网络用户知道HTTP标头(是的,今晚心情乐观)。 用户将很高兴使用最初设置为要求使用其浏览器的任何语言来访问您的网站。 其中包括来自世界各地网吧的游客,为具有强大的“不要搞砸配置”政策而在国外工作的公司的外籍人士,怀有IT技术能力的孙子们的幽默感,共享机器等等。 您经常会猜错。

对于不支持的语言显示消息的概念也是可疑的。 如果说使用旁遮普语浏览器的用户能够导航到您的站点,则他可能会看到您自己没有提供旁遮普语-无需中断他的浏览消息。

综上所述,有时候最简单的解决方案是最好的:我建议您让用户选择。 列出可用语言列表,用户将很乐意将猜测从代码中删除。 而且他/她每次都会做对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM