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

时间:2009-10-07 10:56:45

标签: php javascript multilingual

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

谢谢, 标记

4 个答案:

答案 0 :(得分:6)

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

...但您可以检测用户愿意从网站获取哪些语言 - 通常是哪种语言可以理解。

大多数浏览器都会发送一个名为“Accept-Language”的HTTP标头,该标头可以包含“fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3等值(这是我当前浏览器发送给我正在访问的网站的内容)< / em>的

在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中解析它的例子;例如:Parse Accept-Language to detect a user's 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”不可能,我喜欢“来自法国的法国人”
  • 如果不可能,我接受“来自美国的英语”
  • 如果那也不可能,我可以用“英语”

如果网站无法提供任何服务......嗯,我想我没有多少选择,并且会得到任何想要发送给我的东西......

答案 1 :(得分:2)

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

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

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

$_SERVER["HTTP_ACCEPT_LANGUAGE"]

答案 2 :(得分:0)

通过检查Accept标头可以了解用户的语言首选项。 &lt; selfpromotion type =“shameless”&gt;几年前我写了a paper on the subject(2000年, phew!),探讨了这个和其他几种机制。&lt; / selfpromotion&gt;

此后出现了一些有趣的资源;特别是,我喜欢this article,它采用实用的PHP方法。

祝你好运!

答案 3 :(得分:0)

在过去的十年里,我一直在做多语言的事情。我的印象是你试图过度:你正在以错误的方式看待它。您不应该关心用户机器上安装了哪种语言(操作系统或浏览器):操作系统语言无关紧要,现代浏览器几乎支持所有语言(并且,自NN4消亡以来,所有写作都是如此)在Unicode标准中找到位置的系统/字母表。您应该追求的是用户更喜欢的语言。用户是“支持”语言数量的瓶颈。

Accept-Language标头可能是一个很好的解决方案 - 如果有效的话。根据我的经验,它并非经常发生。今天的普通用户仍然必须知道URL进入地址栏而不是他的主页搜索表单 - 我不希望超过1-2%的网络用户知道HTTP标头(是的,我'我今晚乐观情绪)。用户很乐意使用他们的浏览器最初设置的任何语言来访问您的网站。这包括来自世界各地的网吧游客,在国外工作的外籍人士,对于那些有强烈“不要搞乱配置”政策的公司,老人们,有能力的孙子有幽默感,共享机器等等。你会经常猜错。

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

所有这一切,有时最简单的解决方案是最好的:我建议你让用户选择。列出可用语言列表,用户将非常乐意从您的代码中剔除猜测。他/她每次都会把它弄好。