2014-01-17 77 views
1

我是一位設計師,其HTML/CSS以外的編碼知識很少。閱讀'網絡我發現許多使用http_accept_language一些PHP的參考,但無法找到一步一步「做到這一點,做那個」的解釋,因此我不知道該怎麼做/在哪裏把代碼目前的工作。檢測瀏覽器的首選語言以提供html頁面

我正在開發一個英文主頁的網站。在那裏,用戶可以選擇兩個分支。一個分支將只有英文,另一個分支以英文加3個斯堪的納維亞語言。非英文頁面是預翻譯的,不是由Google即時創建的。

我希望在到達主家後,選擇進入4語言部分的用戶將首先以其瀏覽器的語言提供頁面(在所有頁面上將始終有一個菜單手動選擇另一種語言,如果喜歡的話)。

這是一個PHP的工作?如果是這樣,我會感激一些代碼,並幫助如何使用它。

+0

@NickR,問題要求PHP的方式。此外,你*不能*做它的客戶端,因爲被引用問題的接受答案說。 –

+0

「瀏覽器語言」是一個模糊的概念,不需要根據「Accept-Language」標題匹配最喜歡的語言。您可能需要考慮您希望用作選擇初始頁面語言的基礎。 –

+0

謝謝Jukka。如果我的原始問題中沒有包含更好的方法,我會很高興聽到它。 – peterh

回答

2

您可以使用HTTP_ACCEPT_LANGUAGE標題。將支持的語言保存到數組,然後使用foreach循環標題。

$languages = array('en', 'fi', 'sv', 'no'); 
$header = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); 
foreach($header as $lang) { 
    if(in_array($lang, $languages)) { 
     header("Location: $lang.php"); // i.e. fi.php or se.php 
      break; 
    } 
} 

HTTP_ACCEPT_LANGUAGE包含這樣的事情:

接受語言:EN-GB,EN; Q = 0.5

正如你所看到的,是多國語言,en-gben。這就是爲什麼循環標頭是很聰明的。如果你喜歡的功能,這裏有一個:

function get_user_lang() { 
    $languages = array('en', 'fi', 'sv', 'no'); 
    $header = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); 
    foreach($header as $lang) { 
     if(in_array($lang, $languages)) { 
      return $lang; // i.e. fi.php or se.php 
       break; 
     } 
    } 
} 
echo 'Your language is ' . get_user_lang(); 

步驟一步的指導:

  1. 爲每種語言創建新的文件。將它們命名爲:「fi.php」或「se.php」。

  2. 將第一個代碼部分放在主頁的頂部。該文件必須包含.php結尾,所以它必須是php文件。如果您不明白,那應該放在何處:

    <?php 
    $languages = array('en', 'fi', 'sv', 'no'); 
    $header = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); 
    foreach($header as $lang) { 
        if(in_array($lang, $languages)) { 
        header("Location: $lang.php"); // i.e. fi.php or se.php 
         break; 
        } 
    } 
    ?> 
    <!DOCTYPE html> 
    <html> 
        <head> 
        <title>title</title> 
        </head> 
        <body> 
        contents 
        </body> 
    </html> 
    
  3. 導航到您的主頁您的瀏覽器。如果您的瀏覽器的語言是英語,如果瑞典語,它將重定向到「en.php」; 「se.php」等。

  4. 你可以從this link看到所有的語言代碼,swedish是「sv」。

+0

感謝您的代碼。我想嘗試一下,但是,正如我上面提到的,不知道如何/在哪裏使用它。 – peterh

+0

@peterh將代碼放在''標籤的首頁上。如果將其中一種受支持的語言分區,它將重定向。 – aksu

+0

謝謝@aksu,但我真的不知道如何應用PHP。上面的代碼分爲幾個部分 - 它們是如何關聯的?我應該如何命名語言頁面,以便它們與php返回的內容相關?順便說一句,瑞典人應該是'se'還是'sv'? – peterh

0

如果您有INTL擴展名,則可以使用Locale::acceptFromHttp()

下面是來自PHP documentation的示例。

$locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']); 
echo $locale; 

$locale將類似於「en_US」。如果你只想要的語言,而不是國家,使用這樣的事情:

$locale = explode('_', Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE'])); 
echo $locale[0]; 
+0

謝謝@mcrumley,但我擔心在我的mamp環境中安裝INTL擴展,然後在登臺服務器和最終服務器上安裝INTL擴展將超出我 – peterh