我正在建立一个多语言网站。是否可以使用 PHP 或 Javascript 检查用户机器上是否安装/支持特定语言?如果不支持/安装该语言,我想检测到这一点并向用户显示一条消息。
谢谢,马克。
我正在建立一个多语言网站。是否可以使用 PHP 或 Javascript 检查用户机器上是否安装/支持特定语言?如果不支持/安装该语言,我想检测到这一点并向用户显示一条消息。
谢谢,马克。
检测安装了哪些语言可能不太可能......
...但是您可以检测到用户愿意从网站获得哪些语言——即,一般来说,他可以理解哪些语言。
大多数浏览器发送一个名为“”的 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 :
如果网站不能提供这些服务……好吧,我想我别无选择,我会得到它想发给我的任何东西……
浏览器通常会发送一个 Accept-Language 标头,它可能会为您提供有关该人希望看到的语言的一些提示。就我而言,我的浏览器将此标头发送到 stackoverflow.com:
Accept-Language: en-us,en;q=0.5
假设您在服务器端使用 PHP,您可以在 $_SERVER 变量中查找此信息:
$_SERVER["HTTP_ACCEPT_LANGUAGE"]
在过去的十年里,我一直在做多语言的工作,我的印象是你试图做得过火:你看错了。你不应该关心用户机器上安装了哪种语言(操作系统或浏览器):操作系统语言无关紧要,现代浏览器几乎支持所有语言(而且,自从 NN4 消亡以来,所有的写作在 Unicode 标准中占有一席之地的系统/字母表)。你应该追求的是用户喜欢什么语言。用户是“支持”语言数量的瓶颈。
Accept-Language 标头可能是一个很好的解决方案——如果它有效的话。根据我的经验,它不会 - 太频繁了。今天的普通用户仍然需要知道 URL 进入地址栏而不是他的主页搜索表单 - 我不希望超过 1-2% 的网络人口知道 HTTP 标头(是的,我'我今晚心情很乐观)。用户会很高兴地以他们的浏览器最初设置的任何语言访问您的网站。这包括来自世界各地网吧的游客、在国外为“不要乱用配置”政策的公司工作的外籍人士、拥有 IT 能力的孙子具有奇异幽默感的老人、共享机器等等。你会经常猜错。
为不受支持的语言显示消息的概念也很可疑。如果使用旁遮普语浏览器的用户能够导航到您的网站,他可能会看到您自己不提供旁遮普语 - 无需通过消息中断他的浏览。
话虽如此,有时最简单的解决方案是最好的:我建议您让用户选择。列出可用语言列表,用户将非常乐意从您的代码中排除猜测。他/她每次都会做对。
通过检查 Accept 标头可以了解用户的语言偏好。<selfpromotion type="shameless">几年前(2000 年,呸! )我写了一篇关于这个主题的论文,探索了这个和几个替代机制。</selfpromotion>
从那以后,出现了很多有趣的资源;特别是我喜欢这篇文章,它对 PHP 采取了一种务实的方法。
祝你好运!