2011-01-09 5 views

Antwort

5

Gibt es Gründe, $_SERVER["HTTP_ACCEPT_LANGUAGE"] wird nicht funktionieren detemine?

Inhalt der Accept-Language: Header aus der aktuellen Anfrage, falls es eine gibt. Beispiel: 'en'.

http://php.net/manual/en/reserved.variables.server.php

+3

Hinweis zu finden, die Accept-Language * * eine Liste von gewichteten Werten ist.Es ist also nicht unbedingt nur ein Wert und der erste Wert ist nicht unbedingt der am meisten bevorzugte Wert. – Gumbo

+0

wird es als die Google-Bots erscheinen –

+0

@moustafa: Der Google Bot sendet keine * Accept-Language * Header-Feld überhaupt, wenn das ist, was Sie verlangen. Das heißt, es akzeptiert jede Sprache. In diesem Fall sollten Sie eine Seite mit Links zu allen verfügbaren Sprachvarianten zurückgeben. – Gumbo

2

Es gibt mehrere Ansätze. Ich würde jedoch empfehlen, zuerst Accept-Language zu betrachten.

Nur wenn das abwesend ist, sollten Sie in Betracht ziehen, auf den Ansatz zurückzugreifen, den Sie gegeben haben. Das ist im Grunde mit Geolocation, um das Land oder die Region zu bekommen, dann die Sprache zu erraten.

Letzteres ist ziemlich fehlerhaft, weil viele Länder und sogar Regionen sehr vielsprachig sind.

1

Die meisten Browser senden ihr Standardgebietsschema mit der Anfrage. können Sie diese Informationen durch
$userLang = $_SERVER['HTTP_ACCEPT_LANGUAGE']

1

prüfen Abrufen dieses aus

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); 

Auch

Kontrolle dieses link

2

Zunächst einmal: Es gibt einen Unterschied zwischen dem geografischen Standort und der bevorzugten Sprache eines Benutzers, und Sie können nicht eine Information basierend auf dem Wissen des anderen implizieren.

Der geografische Standort eines Benutzers kann durch Geolokalisierung der IP-Adresse bestimmt werden. Und die beste Lösung ist, den Benutzer einfach nach seiner bevorzugten Sprache zu fragen.

Obwohl der Browser in der Regel einige Spracheinstellungen zusammen mit der Anfrage sendet (siehe Accept-Language header field und my answer on Detect Browser Language in PHP), sind dies nicht die aktuellen Spracheinstellungen des aktuellen Benutzers, der den Browser verwendet.

+1

Natürlich können Sie die beste Auswahl (falls vorhanden) von "Accept-Language" als Standard verwenden und es dem Benutzer dann leicht machen, eine Alternative auszuwählen. –

+0

@Matthew Flaschen: Ja, Sie können diese Information als Anfangswert verwenden. Aber es ist immer besser, den Benutzer zu fragen. – Gumbo

+2

Was ist der Grund für die Down-Abstimmung? Stimmt etwas nicht mit meiner Antwort? – Gumbo

0

Im Fall, dass Sie die vollständigen Sprachnamen anstelle der Abkürzungen (en, fr, etc.) versuchen, diese Grundfunktion:

function parse_language($languages = '') { 
    $translation = array('en' => 'English', 'fr' => 'French', 'es' => 'Spanish', 'de' => 'German', 'ja' => 'Japanese'); 
    if($languages == '') { //Default to HTTP accept language header 
     $languages = $_SERVER['HTTP_ACCEPT_LANGUAGE']; 
    } 
    $languages = explode(',', strtolower($languages)); //Separate individual languages 
    foreach($languages as &$language) { //Filter out any county codes like -US 
     if(strpos($language, '-') !== false) { 
      list($language,) = explode('-', $language, 2); 
     } 
    } 
    //Find the intersections between the translation keys and the language values 
    return(array_values(array_intersect_key($translation, array_combine($languages, array_fill(0, count($languages), ''))))); 
} 

//Sample usage 
print_r(parse_language('en-US,de-GR,fr,es')); 

Wenn Sie mehr Sprachunterstützung benötigen, einfach mehr Schlüssel/Wert-Paare hinzufügen zum Übersetzungs-Array.

Verwandte Themen