【问题标题】:Detecting the browser language of choice with PHP使用 PHP 检测选择的浏览器语言
【发布时间】:2010-12-18 07:24:24
【问题描述】:

我正在尝试实现此代码,以便为选择的德语、西班牙语或英语浏览器语言加载不同的文件。 情况是,我的西班牙语 IE 仍然可以得到英文文件。

<?php 
if (is_home()) {
  if (preg_match('/de-DE/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    include(TEMPLATEPATH . '/german-navbar.php' );
  }
  elseif (preg_match('/es-ES/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    include(TEMPLATEPATH . '/spanish-navbar.php' );
  }
  else {
    include(TEMPLATEPATH . '/english-navbar.php' );
  }
}

我同时使用了HTTP_ACCEPT_LANGUAGE 和HTTP_USER_AGENT。

这是对网站的测试,如果有人想检查它,在浏览器中选择德语或西班牙语:http://paragraphe.org/janette/

我有英文版的 Firefox,运行良好,但我不能确定代码是否适用于西班牙文和德文案例。

我找到了 sn-p in this SO thread,但此时我有点迷路了。

非常感谢您的任何意见,

编辑:代码在 Firefox(但不是 IE)中运行。

【问题讨论】:

  • 什么死了($_SERVER['HTTP_ACCEPT_LANGUAGE']);给你?
  • 页面只是像往常一样加载 - 但使用英文默认值,好像其他条件没有意义

标签: php http templates language-features


【解决方案1】:

首先,您可以使用 firefox 的 User Agent Switcher 扩展来伪造用户代理并对其进行测试,尽管您必须伪造 HTTP_ACCEPT_LANGUAGE 请求的标头,例如使用 Modify Headers 扩展(也允许您更改用户代理以及标题)

哦,它在德语中不起作用:

Warning: include(/home/paragrap/public_html/janette/wp-content/themes/Janette/german-home.php) [function.include]: failed to open stream: No such file or directory in /home/paragrap/public_html/janette/wp-content/themes/Janette/home.php on line 4

Warning: include() [function.include]: Failed opening '/home/paragrap/public_html/janette/wp-content/themes/Janette/german-home.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/paragrap/public_html/janette/wp-content/themes/Janette/home.php on line 4

【讨论】:

  • 哇,效果很好,我可以检查一下,代码现在可以运行了。谢谢!
【解决方案2】:

请尝试一下:

只需将 $availableLanguages 提供为数组('en', 'de', 'es')

函数 get_client_language($availableLanguages, $default='en'){

if (isset($_SERVER['HTTP_ACCEPT_language'])) {

    $langs=explode(',',$_SERVER['HTTP_ACCEPT_language']);

    //start going through each one
    foreach ($langs as $value){

        $choice=substr($value,0,2);
        if(in_array($choice, $availableLanguages)){
            return $choice;

        }

    }
} 
return $default;

}

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2012-02-10
    • 2011-10-30
    • 2010-10-11
    相关资源
    最近更新 更多