2009-09-29 15 views
7

Obecnie pracuję nad wykrywaniem języka autorskiego w celu dostarczenia treści w języku użytkownika.Wykryj język użytkownika w PHP - stabilne rozwiązanie

Oczywiście można zmienić język ręcznie, ale jeśli użytkownik odwiedza stronę po raz pierwszy, chcę podać treść w jego języku.

Więc ja googlowania i znalazł $ _SERVER [HTTP_ACCEPT_LANGUAGE '] - Var uzyskać wynik tak:

de-de,de;q=0.8,en-us;q=0.5,en;q=0.3

co jest najlepszym sposobem, aby filtrować ten wynik, aby uzyskać jasny wynik jak „EN "/" DE "/" IT "?

$rL = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; // de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
$langCode = strtoupper($rl[0].$rl[1]); 

Drugi numer na tym Server-Var jest to, że daje mi tylko wynik, jeśli przeglądarka poda pewne informacje. Czy ustawienie domyślnego języka strony jest jedyną możliwością poradzenia sobie z tym?

Druga możliwość, którą mnie interesuje to uzyskanie języka przez IP. Więc jeśli zdobędę język, prawdopodobnie znam język użytkownika. Ale co słychać w krajach wielojęzycznych, takich jak Szwajcaria, Belgia? Co z tld na przykład .com/.net/.org i tak dalej.

Jaką metodę zastosowalibyśmy w celu wykrycia języka użytkownika?

dzięki za pomoc.

Odpowiedz

5

Trzymaj za pomocą Accept-Language. Wszystkie przeglądarki przechodzą nagłówek i jest o wiele bardziej prawdopodobne, że będzie to język, którego chce użytkownik, niż zwykłe odgadywanie geolokalizacji.

PECL ma http_negotiate_language które można analizować nagłówek i wybrać język dla Ciebie poprawnie, choć w praktyce nawet nieco fałszywe metoda po prostu szukasz en/de/it w ciągu działa lepiej niż penetrowanie IP.

Whats with tld's like .com/.net/.org and so on.

Nazwy domen nie są zwykle zaangażowane w IP wąchania, który posiada własną bazę danych backend zakresów IP, które są prawdopodobnie podłączony do jakiegoś kraju. Odwrotna rozdzielczość dla zgadywania kraju nie ma prawie żadnego zastosowania, ponieważ tylko kilka adresów IP odwraca kolejność do ccTLD.

+0

cóż, kiedy próbuję użyć przykładu http_negotiate_language dostałem - Błąd krytyczny: wywołanie niezdefiniowanej funkcji http_negotiate_language() - co mam nie tak? – wildhaber

+0

Zainstaluj rozszerzenie pecl_http. http://uk.php.net/manual/en/http.install.php Alternatywnie istnieje wersja native-PHP w komentarzach strony negotiate_language, która wygląda tak, jak powinna być OK. – bobince

1

Najlepszą praktyką będą objęte naprawdę dobrze opracowane komponenty Zend_Locale firmy Zend Framework.

Posiada wszystko, czego potrzeba do I18n i lokalizuje aplikację, od wykrywania ustawień lokalnych użytkownika do szerokiej liczby umiędzynarodowionych walut, numerów, formatowania dat i rozwiązań do zarządzania tłumaczeniami.

Powiązane problemy