簡體   English   中英

自動檢測語言並重定向用戶

[英]Auto detect language and redirect user

我正在做我自己的網站,我設法編寫了一些代碼,根據瀏覽器的語言指導用戶使用語言版本。 這是腳本:

<?php
  if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "sv")
    header("location: index.php");
  if ($_SERVER["HTTP_ACCEPT_LANGUAGE"] == "pt")
    header("location: pt/index.php");
  else 
    header("location: en/index.html");
?>

我把它放在index.php之前。 這似乎有效,因為我不在英語國家,但我的瀏覽器是英文,我被重定向到英文版。

它是否正確? 有沒有更好/更清潔的方法來做到這一點?

好吧,我遇到了一些代碼問題,這並不奇怪,因為我不是PHP專家。 因此,我一直在尋找可能的解決方案,我在另一個網站上找到了以下代碼:

<?php
    // Initialize the language code variable
$lc = ""; 
    // Check to see that the global language server variable isset()
    // If it is set, we cut the first two characters from that string
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
    $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

    // Now we simply evaluate that variable to detect specific languages
if($lc == "fr"){
    header("location: index_french.php");
    exit();
} else if($lc == "de"){
    header("location: index_german.php");
    exit();
}
else{ // don't forget the default case if $lc is empty
    header("location: index_english.php");
    exit();
}
?>

這完美地完成了這項工作! 我只剩下一個問題。 沒有辦法改變語言,即使是直接鏈接到另一種語言,因為只要頁面加載,php塊就會將我重定向到borwser的語言。 如果您居住在另一個國家並且例如瑞典語作為母語,但是您的英語瀏覽器是因為您在英國購買了計算機,這可能會成為一個問題。

所以我對這個問題的解決方案是在index.html上沒有這個php代碼(因此不是index.php),為每種語言(甚至是主語言的一種語言)創建具有重復版本的文件夾。 所以現在我的網站自動檢測語言,用戶也可以選擇手動更改它,以備不時之需!

希望它能幫助其他人解決同樣的問題!

PHP 5.3.0+附帶locale_accept_from_http() ,它從Accept-Language標頭中獲取首選語言。

您應該總是更喜歡這種方法,因為標題字段比人們想象的要復雜得多。 (這是一個加權偏好列表。)

你應該檢索這樣的語言:

$lang = locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);

但即便如此,你不會只是有en的每一個英語用戶和es西班牙語的。 它可能變得更加困難es-ESes-US等標准也是如此。

這意味着您應該遍歷您嘗試的正則表達式列表,並以此方式確定頁面語言。 有關示例,請參閱PHP-I18N

我認為你的想法很棒。 可能會幫你最短的代碼:

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
header("location: ".$lang."/index.php");

這應該工作正常。 你也可以使用http_negotiate_language並在這里討論

最有用的代碼

    $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
if(file_exists('system/lang/'.$lang.'.php'))
{
    include('system/lang/'.$lang.'.php');
}else{
    include('system/lang/en.php'); //set default lang here if not exists translated language in ur system
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM