1

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

谢谢,马克。

4

4 回答 4

6

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

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

大多数浏览器发送一个名为“”的 HTTP 标头Accept-Language,它可以具有诸如“ 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)

IE :

  • 我更喜欢法语
  • 如果 "fr" 是不可能的,我喜欢 "french from France"
  • 如果这也不可能,我接受“来自美国的英语”
  • 如果那也不可能,我对“英语”很满意

如果网站不能提供这些服务……好吧,我想我别无选择,我会得到它想发给我的任何东西……

于 2009-10-07T11:03:50.150 回答
2

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

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

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

$_SERVER["HTTP_ACCEPT_LANGUAGE"]
于 2009-10-07T11:02:43.487 回答
0

在过去的十年里,我一直在做多语言的工作,我的印象是你试图做得过火:你看错了。你不应该关心用户机器上安装了哪种语言(操作系统或浏览器):操作系统语言无关紧要,现代浏览器几乎支持所有语言(而且,自从 NN4 消亡以来,所有的写作在 Unicode 标准中占有一席之地的系统/字母表)。你应该追求的是用户喜欢什么语言。用户是“支持”语言数量的瓶颈。

Accept-Language 标头可能是一个很好的解决方案——如果它有效的话。根据我的经验,它不会 - 太频繁了。今天的普通用户仍然需要知道 URL 进入地址栏而不是他的主页搜索表单 - 我不希望超过 1-2% 的网络人口知道 HTTP 标头(是的,我'我今晚心情很乐观)。用户会很高兴地以他们的浏览器最初设置的任何语言访问您的网站。这包括来自世界各地网吧的游客、在国外为“不要乱用配置”政策的公司工作的外籍人士、拥有 IT 能力的孙子具有奇异幽默感的老人、共享机器等等。你会经常猜错。

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

话虽如此,有时最简单的解决方案是最好的:我建议您让用户选择。列出可用语言列表,用户将非常乐意从您的代码中排除猜测。他/她每次都会做对。

于 2009-10-07T21:49:57.633 回答
0

通过检查 Accept 标头可以了解用户的语言偏好。<selfpromotion type="shameless">几年前(2000 年,呸! )我写了一篇关于这个主题的论文,探索了这个和几个替代机制。</selfpromotion>

从那以后,出现了很多有趣的资源;特别是我喜欢这篇文章,它对 PHP 采取了一种务实的方法。

祝你好运!

于 2009-10-07T11:05:22.760 回答