PHP ile tarayıcının dilini kontrol etme?

4 Cevap php

Ben kullanıcının tarayıcı dilini nasıl PHP ile kontrol edebilirsiniz?

Ben ABD ve İngiltere'de insanlar için farklı bir sayfa göstermek gerekir.

Ben başarısız aşağıdaki kodu çalıştı

<?php
if(ereg("us", $_SERVER["HTTP_ACCEPT_LANGUAGE"]))
   include('http://page.com/us.txt');
else
   include('http://page.com/uk.txt');
?>

Ben İngiltere'de ABD'de insanlar için ve onlar için özel bir kod çalıştırabilir.

4 Cevap

Büyük olasılıkla sadece bir harf duyarlılığı sorun; eregi ('en-us') veya preg_match ('/ en-us / i') onu almış olmalıdır.

Ancak, sadece arıyor 'en-us' başlığında ABD ve İngiltere hem de dil listelenir zaman özellikle, bazen yanlış alabilirsiniz. "Accept-Language" aslında gerçekten sizin için uygun bir ayrıştırıcı isterdim oldukça karmaşık bir başlık vardır.

Eğer PECL'de varsa bütün işi zaten sizin için yapılır: http://www.php.net/manual/en/function.http-negotiate-language.php

Ben başka bir cevap User-Agent başlığının için gidiyor neden bilmiyorum; Bu tamamen sahte olduğunu. User-Agent herhangi bir yerde bir dil değerini tutmak için zorunlu değildir, ve bazı tarayıcılar için (örn. Opera ve bazı küçük tarayıcı Ben 'Internet Explorer' denilen duymadım) o değil de hepsi olacak. O does bir dil içermesi halinde, bu tarayıcı yapı kuruldu dil, size bakıyor ne olması gerektiğini değil, kullanıcının tercih ettiği dili olacak. (Bu ayar inşa diline varsayılan olacaktır, ancak tercihler UI kullanıcı tarafından özelleştirilebilir.)

Bu deneyin:

<?
if(preg_match('/en-us/i', $_SERVER['HTTP_USER_AGENT']))
    include('http://page.com/us.txt');
else
    include('http://page.com/uk.txt');
?>

Bunu yapmanın bir probably daha güvenilir bir yol $_SERVER['HTTP_USER_AGENT'] dize bir regex yapmaktır.

<?php
  if(preg_match('/en-US/', $_SERVER['HTTP_USER_AGENT']))
    include('http://page.com/us.txt');
  else
    include('http://page.com/uk.txt');
?>

Sen bir geçerli ve yararlı bir kullanıcı aracısı dizesini almak için garanti, yani else makul bir alternatif içerdiğinden emin olun değildir.

Bu bir zend tabanlı bir çözümdür. Eğer başka bir dil eklemek zaman da çalışacaktır.

<?php

include_once "Zend/Locale.php";

$zend_locale = new Zend_Locale(Zend_Locale::BROWSER);

// returns en for English, de for German etc.
echo $browser_language = $zend_locale->getLanguage();
echo "<br />\n";
// returns en_US for American English, en_GB for British English etc.
echo $browser_locale = $zend_locale->toString();
echo "<br />\n";

Görülen Çözüm:

http://www.mpopp.net/2010/07/how-to-detect-the-users-preferred-language-smarter-than-google/