Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: autowybór języka
Forum PHP.pl > Forum > PHP
warpech
na czym oprzeć automat decydujący o wyborze języka strony głównej serwisu? znacie jakieś sprawdzone, skuteczne metody? mam oczywiście chorągiewkę polską i angielską, ale dla wygody uzytkownika przydałoby się automatyczne wykrywanie.

z moich obserwacji wynika, że najdokładniejsza metoda to przeszukiwanie bazy numerów IP, ale to zupełnie niewydajne i nie ma racji bytu na stronie internetowej.
bregovic
Tja... sprobuj znalezc tak jak to robi php.net - oni zdaje sie nie przeszukuja bazy ip, tylko maja jakis algorytm na ip range (a moze pierdziele?).

Ja zawsze uzywam jezyka przegladarki - jesli uzytkownik uzywa dobrej przegladarki (mozilla, opera) to moze sam zdefiniowac jaki jezyk mu najbardziej odpowiada. Zazwyczaj jak potrzebuje zrobic wybieranie jezyka to uzywam zmodyfikowanego skryptu z phpmyadmin'a - jest bardzo ok, jesli tylko wywalic z niego charset'y winksmiley.jpg

edit:
php.net uzywaja bazy ip-to-country - jest tam nawet przykladowy skrypt php!
wassago
alternatywnym sposobem moze byc wyciagniecie ze stringu
  1. <?php
  2. $_SERVER['HTTP_USER_AGENT']; 
  3. // Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3
  4. ?>

jezyka przegladarki.
rogrog
  1. <?php
  2.  
  3. $_SERVER['HTTP_ACCEPT_LANGUAGE']
  4.  
  5. ?>


jest ustawiane przez przeglądarkę, co znaczy że nie zawsze musi być (myślę że wystarczy do Twoich potrzeb bo w razie jakby przeglądarka nie wysyłała tego, co rzadko się zdarza, to zawsze są chorągiewki)

była kiedyś (dosc dawno tongue.gif) dyskusja na temat możliwych wartości tego pola - poszukaj..., powinno byc biggrin.gif
yavaho
Ja mam tak: ciasteczka + sesje
Jezeli klient byl juz na tej stronie i recznie wybral jezyk to zapisuje jego wybor w ciasteczkach.

Po pierwsze sprawdzam czy ma ciasteczko.
Jezeli nie ma ciasteczka to pobieram jezyk przegladarki za pomoca $_SERVER['HTTP_ACCEPT_LANGUAGE'];
W ty miejscu mozna zastosowac inne sposoby.
Jezeli zaden z tych sposobow nie rozpoznal jezyka przyjmuje domyslny jezyl "PL" ale wtedy uzytkownik moze sam dokonac wyboru i zapisze to w ciasteczkach.

  1. <?php
  2. if(isset($_COOKIE['ciacho_lang']))
  3. $_SESSION['lang'] = $_COOKIE['ciacho_lang'];
  4. elseif(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
  5. $_SESSION['lang'] = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
  6. else
  7. $_SESSION['lang'] = 'pl';
  8. ?>
hawk
@yavaho: Tak, ale nagłówek Accept-Language wcale nie ma wartośi "pl" lub "en". No może czasem, przypadkiem. Generalnie to on ma znacznie bardziej złożoną postać i głupio by było gdyby skrypt w tym momencie zgłupiał.

Podobnie jak rogrog, odsyłam to wątku, który o tym właśnie był. Mieliśmy tam burzliwą dyskusję o rzeczonym nagłówku smile.gif
rogrog
dokładnie tak.

@yavaho: twój skrypt nie sprawdza w ogóle czy język z podanej wartości jest w Twoim serwisie dostępny (nawet zakładając że wartości są dwuliterowe) więc skrypt zgłupieje przy pierwszym wejściu z języka, którego nie masz

@warpech: numery IP nie załatwią Ci sprawy, bo przecież nawet jeśli ktoś łączy się z danego kraju to nie musi używać języka tego kraju; do tego dochodzą państwa wielojęzyczne - skąd będziesz znał konkretny język? pomijając już to, że wykluczasz możliwość korzystania przez użytkowników z zagranicznego proxy... generalnie trzeba rozróżnić dwie rzeczy - kraje i języki smile.gif więcej - poszukajcie...
warpech
właśnie niczego nie chcę wykluczać, tylko szukam sprawdzonej metody

pytam was dlatego, bo znane mi są problemy z zagranicznymi proxy, przeglądarkami które nie mają domyślnie ustawionego polskiego języka i bazy adresów ip o objętości prawie 2MB (jak ip-to-country)

póki co, najlepsza wydaje mi się metoda cookie+język przeglądarki, ale jeszcze poszperam w archiwum. dzięki za pomoc i proszę o więcej sprawdzonych rozwiązań :]

@bregovic - gdzie moge poczytać o tym jak to robią na php.net i dlaczego nie obciąża im to za bardzo serwera?
bela
@warpech: popatrz troche smile.gif masz link "show source" na kazdej stronie
rogrog
jeśli chodzi o baze IP to nie jest aż tak straszne obciążenie serwera - jedna tabelka z kilkoma polami, proste zapytanie więc nie powinno byc strasznie wolne
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.