2013-07-23 17 views
14

Ich mache meine eigene Website und ich habe es geschafft, einen Code zu schreiben, der Benutzer auf die Sprachversion entsprechend der Sprache des Browsers verweist. Hier ist das Skript:Sprache automatisch erkennen und Benutzer umleiten

<?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"); 
?> 

Ich habe dies in der index.php vor der. Es scheint zu funktionieren, weil ich nicht in einem englischsprachigen Land bin, aber mein Browser ist auf Englisch und ich werde auf die englische Version umgeleitet.

Ist das korrekt? Gibt es einen besseren/saubereren Weg, dies zu tun?

+2

Duplizieren: http://stackoverflow.com/questions/6038236/http-accept-language – Sherlock

+0

Danke, es nicht finden konnte! – viriato

Antwort

10

Nun, ich stieß auf einige Probleme mit meinem Code, die keine Überraschung ist, weil ich kein PHP-Experte bin. Ich hielt daher für eine mögliche Lösung auf die Suche und fand ich den folgenden Code auf einer anderen Website:

<?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(); 
} 
?> 

Dies hat den Job perfekt! Ich hatte nur ein Problem übrig. Es gab keine Möglichkeit, die Sprache zu ändern, auch nicht mit direkten Links in eine andere Sprache, denn sobald die Seite geladen wurde, würde der PHP-Block mich zur Sprache des Browsers umleiten. Dies kann ein Problem sein, wenn Sie in einem anderen Land leben und zum Beispiel Schwedisch als Muttersprache haben, aber Sie haben Ihren Browser auf Englisch, weil Sie Ihren Computer in Großbritannien gekauft haben.

Also meine Lösung für dieses Problem war, Ordner mit einer doppelten Version für jede Sprache (auch die für die Hauptsprache) ohne diesen PHP-Code auf der index.html (und daher nicht index.php) zu erstellen. Jetzt erkennt meine Website automatisch die Sprache und der Benutzer hat auch die Möglichkeit, sie manuell zu ändern, falls sie das wollen!

Hoffe, es wird jemand anderen mit dem gleichen Problem helfen!

+0

** sonst wenn ** nicht die richtige Methode ist, ** elseif ** ist die richtige. Ich denke, das ist nur ein Tippfehler, aber nur für den Fall: http://php.net/manual/en/control-structures.elseif.php –

4

Ich denke, deine Idee ist großartig. Kann Ihnen helfen, kürzester Code:

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

PHP 5.3.0+ kommt mit locale_accept_from_http(), die die bevorzugte Sprache aus dem Header Accept-Language erhält.

Sie sollten diese Methode immer einer selbstgeschriebenen Methode vorziehen, da das Header-Feld komplizierter ist als man denkt. (Es ist eine Liste von gewichteten Präferenzen.)

Sie sollten die Sprache wie folgt abrufen:

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

Aber selbst dann werden Sie nicht nur en haben für jeden englischen Benutzer und es für Spanisch diejenigen . Es kann much more difficult als das werden, und Sachen wie es-ES und sind Standard.

Dies bedeutet, dass Sie über eine Liste von regulären Ausdrücken, die Sie versuchen, die Seitensprache auf diese Weise ermitteln möchten. Ein Beispiel finden Sie in PHP-I18N.

+0

Die beste Lösung da draußen, danke. – lewsid

-1

Am nützlichsten dieser Code

$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 
    } 
+0

Leider ist dies ziemlich faul Code und unterstützt keine Prioritäten oder Sprachen mit mehr als 2 Buchstaben in der Kennung. –