2009-11-19 173 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; 

}