Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie języka użytkownika
Forum PHP.pl > Forum > PHP
Kuba707
Witam, jaki jest najlepszy sposób aby ustalić język gościa odwiedzającego moją stronę? Chyba baza danych z ip to trochę zbyt skomplikowany pomysł. Znalazłem tu takie coś $_SERVER['HTTP_ACCEPT_LANGUAGE'], sprawdziłem co to zwraca u mnie:
Kod
    [HTTP_ACCEPT_LANGUAGE] => pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4

W manualu PHP opis jest taki
Cytat
Contents of the Accept-Language: header from the current request, if there is one. Example: 'en'.
No ale jak widać nie do końca, zwraca to dłuższy string z różnymi opcjami porozdzielanymi średnikiem. Jak uniwersalnie pobrać za pomocą tej predefiniowanej zmiennej? Po prostu pobierać ten pierwszy parametr (do pierwszego średnika), nie? Tylko że jeszcze jeden problem. Powiedzmy stronę chcę mieć w języku polskim, angielskim, niemieckim, finlandzkim, norweskim (przykładowo), a w dokumentacji nie jest napisane co ta predefiniowana zmienna będzie w sobie trzymać w przypadku gdy wejdzie taki norweg na stronie. Dla polaka już wiem bo sprawdziłem "pl-PL", dla anglika też wiem, ale co z innymi językami?
Noidea
http://www.w3.org/Protocols/rfc2616/rfc261...14.html#sec14.4

Im wyższa wartość przy "q", tym większy priorytet ma dany język. Największa (a zarazem domyślna) wartość "q" to 1.
Kod języka to zwykle będzie xx lub xx-YY, gdzie:
xx oznacza język: http://www.loc.gov/standards/iso639-2/php/code_list.php
YY oznacza państwo: http://en.wikipedia.org/wiki/ISO_3166-2#Current_codes


Gdy użytkownik wejdzie na twoją stronę po raz pierwszy ustaw mu język na podstawie nagłówka Accept-Language i zapisz wybór w ciasteczku. Przy każdym kolejnym wyświetleniu strony pobieraj język z ciasteczka.
Dodatkowo gdzieś w rogu strony dodaj możliwość zmiany języka strony (gdyby domyślny wybór nie odpowiadał użytkownikowi).
Kuba707
Predefiniowana zmienna ma u mnie na Chrome wartość
Kod
pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4

na Mozilli
Kod
pl,en-us;q=0.7,en;q=0.3,x-ns1fB339cVfNx0,x-ns28470Nnym7b5

na IE
Kod
pl-PL

Opera
Kod
pl-PL,pl;q=0.9,en;q=0.8
to u góry jest kolegi bo akurat nie mam opery.

Jak pobrać z tego język? Ja to sobie zrobiłem prostą metodą explode ',':
Kod
function getUserLang()
{
    $jezyk = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    if(strstr($jezyk[0], '-') === FALSE)
    {
        switch($jezyk[0])
        {
            case 'pl': $jezyk[0] = 'pl-PL'; break;
            case 'en': $jezyk[0] = 'en-US'; break;
        }
    }
    return $jezyk[0];
}

Testowałem to na kilku przeglądarkach, nie tylko na swoim komputerze i działa. Tylko czy to dobry sposób? Może jest lepszy sposób?
greycoffey
Jest prostszy sposób.
  1. <?php echo substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); ?>

Zamiast się bawić w explode.

Twój skrypt ma też wadę. Załóżmy, że załączasz potem plik z językiem w taki sposób:

  1. <?php include getUserLang().'.php'; ?>

A ja Ci podrzucę jako ACCEPT_LANGUAGE wartość "http://serwer.pl/kodwgrywajacyshella.txt", dostaję dostęp. Gdyby 'allow_fopen_url' lub podobne, zostało wyłączone, nadal mogę jakoś podrzucić Ci coś na lokalny serwer, albo po prostu poczytać sobie różne rzeczy na serwerze do których nie ma dostępu z poziomu przeglądarki.

Tak więc zamień te explode na proste substr.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.