2009-11-19 171 views
3

我试图实现此代码,以便为德语,西班牙语或英语浏览器语言选择不同的文件。 这种情况是,我的西班牙语IE仍然可以获得英文文件。使用PHP检测浏览器语言的选择

<?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的英语和工作不错,但我无法确定该代码适用于西班牙语和德语情况。

我找到了代码段in this SO thread,但我在这一点上有点失落。

感谢这么多的任何输入,

编辑:代码确实在Firefox(而不是IE)的工作。

+1

什么是死亡( $ _SERVER [ 'HTTP_ACCEPT_LANGUAGE']);给你? – dfilkovi 2009-11-19 13:26:10

+0

页面像平常一样加载 - 但使用英文默认,好像其他条件没有意义 – Peanuts 2009-11-19 13:33:36

回答

3

首先,你可以使用User Agent Switcher Firefox扩展伪造useragents并对其进行测试,但你不得不假冒热曲的标题无害环境技术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 
+0

哇,这很好,我可以检查它,代码现在工作。谢谢 ! – Peanuts 2009-11-19 14:25:32

+0

很高兴我能帮忙:) – Zenon 2009-11-19 14:29:45

2

尝试了这一点请:

只需提供$ availableLanguages作为数组( '恩', '德', '上课')

功能get_client_language($ availableLanguages,$默认= '恩') {

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; 

}